Files
scriptc/native/llvm-codegen/src/target.h
Chris Tate c41f1a8be9 Expand LLVM native output targets (#280)
* Expand LLVM native output targets

- Add owned helper and runtime-pack contracts for macOS x64, Linux glibc/musl, Windows x64, and WASI.
- Generalize LLVM target selection, package validation, linker plans, and release/CI matrices.
- Document linker boundaries and add focused native-output and runtime-pack coverage.

* Pin Windows LLVM helper CI to VS 2022

The official LLVM archive needs the Visual Studio 2022 CMake generator, which is not guaranteed by windows-latest.

* Align bootstrap cache with LLVM runtime-pack builds

Use the same target-specific helper and linker identity before and after compiler loading so routed executable cache hits remain lightweight.

* Install Windows LLVM CI tools with Chocolatey

windows-2022 includes Visual Studio but not winget; use its available Chocolatey bootstrap for CMake and Ninja.

* Prevent Zig version probes from leaving runtime-pack objects

Run runtime-pack compiler version probes in a private temporary directory and remove the accidental tracked WASI a.o file.

* Use 7-Zip for Windows LLVM setup

Extract the official LLVM development archive with two-stage 7-Zip instead of Windows tar.exe, which timed out while materializing the toolchain tree.

* Define ssize_t for the MSVC runtime pack

Clang's MSVC target does not expose POSIX ssize_t through sys/types.h; define the pointer-sized runtime type without affecting MinGW.

* Build the Windows runtime pack with Zig

Use the MinGW-compatible Windows sysroot required by the runtime while retaining COFF helper output and installing Zig in the Windows native CI lane.

* Give macOS LLVM differential shard time to finish

Shard 1 passed its setup and focused contracts but was cancelled during its cold LLVM differential slice at the 20-minute job limit.
2026-09-01 13:41:34 -05:00

42 lines
1.2 KiB
C++

#pragma once
#include "llvm/ADT/StringRef.h"
#include <memory>
#include <string>
namespace llvm {
class TargetMachine;
}
namespace scriptc {
inline constexpr llvm::StringLiteral ProtocolVersion = "1";
inline constexpr llvm::StringLiteral LlvmVersion = "22.1.8";
#ifndef SCRIPTC_DEFAULT_TARGET
#define SCRIPTC_DEFAULT_TARGET "arm64-apple-macosx14.0.0"
#endif
#ifndef SCRIPTC_DEFAULT_DATA_LAYOUT
#define SCRIPTC_DEFAULT_DATA_LAYOUT "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32"
#endif
#ifndef SCRIPTC_TARGET_BACKENDS
#define SCRIPTC_TARGET_BACKENDS "AArch64"
#endif
#ifndef SCRIPTC_ALLOWED_TARGETS
#define SCRIPTC_ALLOWED_TARGETS "arm64-apple-macosx14.0.0"
#endif
inline constexpr llvm::StringLiteral DefaultTarget =
SCRIPTC_DEFAULT_TARGET;
inline constexpr llvm::StringLiteral DefaultDataLayout =
SCRIPTC_DEFAULT_DATA_LAYOUT;
inline constexpr llvm::StringLiteral TargetBackends = SCRIPTC_TARGET_BACKENDS;
inline constexpr llvm::StringLiteral AllowedTargets = SCRIPTC_ALLOWED_TARGETS;
void initializeTargets();
bool supportsTarget(llvm::StringRef Triple);
std::unique_ptr<llvm::TargetMachine>
createTargetMachine(llvm::StringRef Triple, llvm::StringRef OptLevel,
std::string &Error);
} // namespace scriptc