From 9dfbf95db02054204defbe422099c02b790a19fc Mon Sep 17 00:00:00 2001 From: Ophestra Date: Thu, 22 Oct 2026 01:56:23 +0900 Subject: internal/rosa: initial cross-compilation support This successfully cross-compiles the toolchain. More work is needed to support cross-compilation on all native helpers and existing packages. Signed-off-by: Ophestra --- internal/rosa/package/kernel/package.az | 8 ++++- internal/rosa/package/llvm/package.az | 52 +++++++++++++++++++++++++++------ internal/rosa/package/musl/package.az | 15 ++++++++++ 3 files changed, 65 insertions(+), 10 deletions(-) (limited to 'internal/rosa/package') diff --git a/internal/rosa/package/kernel/package.az b/internal/rosa/package/kernel/package.az index 47bc4323..8e2dcfe5 100644 --- a/internal/rosa/package/kernel/package.az +++ b/internal/rosa/package/kernel/package.az @@ -29,6 +29,12 @@ package kernel-headers { make = [ "-f /usr/src/kernel-headers/Makefile", "O=/tmp/kbuild", + "ARCH='"+arch { + default = arch; + + amd64 = "x86"; + riscv64 = "riscv"; + }+"'", "LLVM=1", `HOSTLDFLAGS="${LDFLAGS:-''}"`, "INSTALL_HDR_PATH=/work/system", @@ -47,7 +53,7 @@ cat \ amd64 = "8BdskuTo4WxcJDFbdHakHmvkeIASmOkDd0LanTjaXwkmoMa5PeMf0gqee0FqYRFd"; arm64 = "RQ27XMgxEj5M6cagVHljCE1n-9q_gFayOaakWr0PoAq5yllfLHEz0KQx1fXLwCzp"; - riscv64 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + riscv64 = "N4YuFlWVfdgnmoJMFMrTL3vhnzh-yUpxGmFaHqSuNIOmgBn2rI_SWcodONGcfOhw"; }; tools = [ rsync ]; diff --git a/internal/rosa/package/llvm/package.az b/internal/rosa/package/llvm/package.az index 631228be..02cea79a 100644 --- a/internal/rosa/package/llvm/package.az +++ b/internal/rosa/package/llvm/package.az @@ -17,13 +17,41 @@ package llvm-project { ]; } +package early-builtins { + description = "early LLVM runtime: compiler-rt (builtins)"; + source = llvm-project; + + exclusive = true; + + exec = cmake { + append = [ "compiler-rt/lib/builtins" ]; + cache = { + "LLVM_HOST_TRIPLE": triple; + "LLVM_ENABLE_RTTI": "ON"; + "LLVM_BUILD_LLVM_DYLIB": "ON"; + "LLVM_LINK_LLVM_DYLIB": "ON"; + "LLVM_ENABLE_PER_TARGET_RUNTIME_DIR": "ON"; + + "COMPILER_RT_DEFAULT_TARGET_ONLY": "ON"; + }; + test = nil; + }; + + tools = [ python-early ]; + + inputs = [ + musl-headers, + kernel-headers, + ]; +} + package early-compiler-rt { description = "early LLVM runtime: compiler-rt"; source = llvm-project; exclusive = true; early = ` -LLVM_VERSION_MAJOR="$(cmake -P /dev/stdin <<< ' +LLVM_VERSION_MAJOR="$(CLICOLOR_FORCE= cmake -P /dev/stdin <<< ' include(cmake/Modules/LLVMVersion.cmake) message(NOTICE "${LLVM_VERSION_MAJOR}") ' 2>&1)" @@ -36,6 +64,9 @@ message(NOTICE "${LLVM_VERSION_MAJOR}") // libc++ not yet available "CMAKE_CXX_COMPILER_TARGET": ""; + // musl not yet available + "CMAKE_TRY_COMPILE_TARGET_TYPE": "STATIC_LIBRARY"; + "LLVM_HOST_TRIPLE": triple; "LLVM_ENABLE_RTTI": "ON"; "LLVM_BUILD_LLVM_DYLIB": "ON"; @@ -45,15 +76,15 @@ message(NOTICE "${LLVM_VERSION_MAJOR}") "COMPILER_RT_BUILD_BUILTINS": "ON"; "COMPILER_RT_DEFAULT_TARGET_ONLY": "ON"; "COMPILER_RT_USE_BUILTINS_LIBRARY": "ON"; - "COMPILER_RT_SANITIZERS_TO_BUILD": "asan"; - "COMPILER_RT_BUILD_GWP_ASAN": "OFF"; // does not work without libunwind "COMPILER_RT_BUILD_CTX_PROFILE": "OFF"; + "COMPILER_RT_BUILD_SANITIZERS": "OFF"; "COMPILER_RT_BUILD_LIBFUZZER": "OFF"; "COMPILER_RT_BUILD_MEMPROF": "OFF"; "COMPILER_RT_BUILD_PROFILE": "OFF"; "COMPILER_RT_BUILD_XRAY": "OFF"; + "COMPILER_RT_BUILD_ORC": "OFF"; }; test = nil; postInstall = ` @@ -71,14 +102,14 @@ ln -s \ `; }; - inputs = [ - python-early, + tools = [ python-early ]; + inputs = [ musl-headers, kernel-headers, ]; - runtime = [ musl ]; + cross = [ early-builtins ]; } package early-runtimes { @@ -120,14 +151,17 @@ package early-runtimes { test = nil; }; - inputs = [ - python-early, + tools = [ python-early ]; + inputs = [ zlib, zstd, early-compiler-rt, kernel-headers, ]; - runtime = [ early-compiler-rt ]; + runtime = [ + musl, + early-compiler-rt, + ]; } diff --git a/internal/rosa/package/musl/package.az b/internal/rosa/package/musl/package.az index c264c782..7afa7e2f 100644 --- a/internal/rosa/package/musl/package.az +++ b/internal/rosa/package/musl/package.az @@ -24,6 +24,9 @@ package musl-headers { exec = make { defaults = false; + configure = { + "target": triple; + }; make = [ "DESTDIR=/work", "install-headers" ]; check = nil; install = "# headers installed during make"; @@ -46,9 +49,20 @@ package musl { env = [ "LDFLAGS=" + earlyLDFLAGS, ]; + early = ` +[ -e '/system/`+arch+`' ] && \ + ln -s ../../../../`+arch+`/system/lib/`+triple+` /system/lib/clang/*/lib || true +`; exec = make { defaults = false; + configure = { + "target": triple; + + "AR": "ar"; + "RANLIB": "ranlib"; + "CC": "'clang --target="+triple+" -rtlib=compiler-rt'"; + }; check = nil; postInstall = ` mkdir -p /work/system/bin @@ -61,5 +75,6 @@ rmdir -v /work/lib `; }; + cross = [ early-compiler-rt ]; tools = [ coreutils ]; } -- cgit v1.3.1