diff options
Diffstat (limited to 'internal/rosa/llvm.go')
| -rw-r--r-- | internal/rosa/llvm.go | 512 |
1 files changed, 254 insertions, 258 deletions
diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index ccc8ee8c..0758183e 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -29,42 +29,52 @@ func litArgs(verbose bool, skipChecks ...string) string { return "'" + strings.Join(args, " ") + "'" } -func (t Toolchain) newEarlyCompilerRT() (pkg.Artifact, string) { - source, version := t.Load(llvmSource) - major, _, _ := strings.Cut(version, ".") - return t.NewPackage("early-compiler-rt", version, source, &PackageAttr{ - Flag: TExclusive, - }, &CMakeHelper{ - Append: []string{"compiler-rt"}, +func init() { + native.MustRegister("early-compiler-rt", func(t Toolchain) (*Metadata, pkg.Artifact) { + meta := Metadata{ + Name: "early-compiler-rt", + Description: "early LLVM runtime: compiler-rt", - Cache: []KV{ - {"ENABLE_LINKER_BUILD_ID", "ON"}, + Dependencies: P{ + Musl, + }, + } + _meta, source := t.MustLoad(llvmSource) + meta.Version = _meta.Version + major, _, _ := strings.Cut(meta.Version, ".") + return &meta, t.NewPackage("early-compiler-rt", meta.Version, source, &PackageAttr{ + Flag: TExclusive, + }, &CMakeHelper{ + Append: []string{"compiler-rt"}, - // libc++ not yet available - {"CMAKE_CXX_COMPILER_TARGET", ""}, + Cache: []KV{ + {"ENABLE_LINKER_BUILD_ID", "ON"}, - {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_ENABLE_RTTI", "ON"}, - {"LLVM_BUILD_LLVM_DYLIB", "ON"}, - {"LLVM_LINK_LLVM_DYLIB", "ON"}, - {"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR", "ON"}, + // libc++ not yet available + {"CMAKE_CXX_COMPILER_TARGET", ""}, - {"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"}, + {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_ENABLE_RTTI", "ON"}, + {"LLVM_BUILD_LLVM_DYLIB", "ON"}, + {"LLVM_LINK_LLVM_DYLIB", "ON"}, + {"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR", "ON"}, - // does not work without libunwind - {"COMPILER_RT_BUILD_CTX_PROFILE", "OFF"}, - {"COMPILER_RT_BUILD_LIBFUZZER", "OFF"}, - {"COMPILER_RT_BUILD_MEMPROF", "OFF"}, - {"COMPILER_RT_BUILD_PROFILE", "OFF"}, - {"COMPILER_RT_BUILD_XRAY", "OFF"}, - }, - SkipTest: true, - Script: ` + {"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_LIBFUZZER", "OFF"}, + {"COMPILER_RT_BUILD_MEMPROF", "OFF"}, + {"COMPILER_RT_BUILD_PROFILE", "OFF"}, + {"COMPILER_RT_BUILD_XRAY", "OFF"}, + }, + SkipTest: true, + Script: ` mkdir -p "/work/system/lib/clang/` + major + `/lib/" ln -s \ "../../../${ROSA_TRIPLE}" \ @@ -77,223 +87,242 @@ ln -s \ "clang_rt.crtend-` + t.linuxArch() + `.o" \ "/work/system/lib/${ROSA_TRIPLE}/crtendS.o" `, - }, - Python, + }, + Python, - muslHeaders, - KernelHeaders, - ), version -} -func init() { - native.MustRegister(&Artifact{ - f: Toolchain.newEarlyCompilerRT, + muslHeaders, + KernelHeaders, + ) + }) + + native.MustRegister("early-runtimes", func(t Toolchain) (*Metadata, pkg.Artifact) { + meta := Metadata{ + Name: "early-runtimes", + Description: "early LLVM runtimes: libunwind, libcxx, libcxxabi", - Name: "early-compiler-rt", - Description: "early LLVM runtime: compiler-rt", + Dependencies: P{ + earlyCompilerRT, + }, + } + _meta, source := t.MustLoad(llvmSource) + meta.Version = _meta.Version - Dependencies: P{ - Musl, + return &meta, t.NewPackage("early-runtimes", meta.Version, source, &PackageAttr{ + Flag: TExclusive, + }, &CMakeHelper{ + Append: []string{"runtimes"}, + + Cache: []KV{ + {"ENABLE_LINKER_BUILD_ID", "ON"}, + + // libc++ not yet available + {"CMAKE_CXX_COMPILER_WORKS", "ON"}, + + {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_ENABLE_RTTI", "ON"}, + {"LLVM_BUILD_LLVM_DYLIB", "ON"}, + {"LLVM_LINK_LLVM_DYLIB", "ON"}, + {"LLVM_ENABLE_RUNTIMES", "'libunwind;libcxx;libcxxabi'"}, + + {"LIBUNWIND_ENABLE_ASSERTIONS", "OFF"}, + {"LIBUNWIND_USE_COMPILER_RT", "ON"}, + {"LIBCXX_HAS_MUSL_LIBC", "ON"}, + {"LIBCXX_USE_COMPILER_RT", "ON"}, + {"LIBCXX_CXX_ABI", "libcxxabi"}, + {"LIBCXX_ENABLE_STATIC_ABI_LIBRARY", "OFF"}, + {"LIBCXX_HARDENING_MODE", "fast"}, + {"LIBCXX_HAS_ATOMIC_LIB", "OFF"}, + {"LIBCXXABI_USE_COMPILER_RT", "ON"}, + {"LIBCXXABI_USE_LLVM_UNWINDER", "ON"}, + {"LIBCXXABI_ENABLE_STATIC_UNWINDER", "OFF"}, + {"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL", "OFF"}, + + {"LLVM_ENABLE_ZLIB", "FORCE_ON"}, + {"LLVM_ENABLE_ZSTD", "FORCE_ON"}, + {"LLVM_ENABLE_LIBXML2", "OFF"}, + }, + SkipTest: true, }, + Python, + + Zlib, + Zstd, + earlyCompilerRT, + KernelHeaders, + ) }) -} -func (t Toolchain) newEarlyRuntimes() (pkg.Artifact, string) { - source, version := t.Load(llvmSource) - return t.NewPackage("early-runtimes", version, source, &PackageAttr{ - Flag: TExclusive, - }, &CMakeHelper{ - Append: []string{"runtimes"}, + const ( + version = "22.1.5" + checksum = "32gOaLPHcUlo3hkdk5RbFumTE01XKeCAYZcpvn8IDHF95egXVfDFSl6eZL3ChMen" + ) - Cache: []KV{ - {"ENABLE_LINKER_BUILD_ID", "ON"}, + native.MustRegister("llvm-project", func(t Toolchain) (*Metadata, pkg.Artifact) { + meta := Metadata{ + Name: "llvm-project", + Description: "LLVM monorepo with Rosa OS patches", + Version: version, - // libc++ not yet available - {"CMAKE_CXX_COMPILER_WORKS", "ON"}, + ID: 1830, + } + return &meta, t.NewPatchedSource("llvm", version, newFromGitHub( + "llvm/llvm-project", + "llvmorg-"+version, + checksum, + ), true, llvmPatches...) + }) - {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_ENABLE_RTTI", "ON"}, - {"LLVM_BUILD_LLVM_DYLIB", "ON"}, - {"LLVM_LINK_LLVM_DYLIB", "ON"}, - {"LLVM_ENABLE_RUNTIMES", "'libunwind;libcxx;libcxxabi'"}, + native.MustRegister("llvm", func(t Toolchain) (*Metadata, pkg.Artifact) { + meta := Metadata{ + Name: "llvm", + Description: "a collection of modular and reusable compiler and toolchain technologies", + Website: "https://llvm.org", - {"LIBUNWIND_ENABLE_ASSERTIONS", "OFF"}, - {"LIBUNWIND_USE_COMPILER_RT", "ON"}, - {"LIBCXX_HAS_MUSL_LIBC", "ON"}, - {"LIBCXX_USE_COMPILER_RT", "ON"}, + Dependencies: P{ + Zlib, + Zstd, + Musl, + }, + } + _meta, source := t.MustLoad(llvmSource) + meta.Version = _meta.Version + + early := muslHeaders + if t.stage.isStage0() { + // The LLVM build system uses the system installation when building with + // LLVM_LINK_LLVM_DYLIB, since it builds runtimes after the fact, using + // the just-built toolchain. This is unacceptable in stage0 due to the + // potential version difference. Later stages bootstrap off of runtimes + // of its previous stage via 3-stage determinism. + early = earlyRuntimes + } + + cache := []KV{ + {"ENABLE_LINKER_BUILD_ID", "ON"}, + {"COMPILER_RT_USE_BUILTINS_LIBRARY", "ON"}, + {"COMPILER_RT_DEFAULT_TARGET_ONLY", "ON"}, + {"COMPILER_RT_BUILD_GWP_ASAN", "OFF"}, {"LIBCXX_CXX_ABI", "libcxxabi"}, + {"LIBCXX_USE_COMPILER_RT", "ON"}, {"LIBCXX_ENABLE_STATIC_ABI_LIBRARY", "OFF"}, + {"LIBCXX_HAS_MUSL_LIBC", "ON"}, {"LIBCXX_HARDENING_MODE", "fast"}, - {"LIBCXX_HAS_ATOMIC_LIB", "OFF"}, - {"LIBCXXABI_USE_COMPILER_RT", "ON"}, {"LIBCXXABI_USE_LLVM_UNWINDER", "ON"}, {"LIBCXXABI_ENABLE_STATIC_UNWINDER", "OFF"}, - {"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL", "OFF"}, - + {"LIBCXXABI_USE_COMPILER_RT", "ON"}, + {"LLVM_INSTALL_BINUTILS_SYMLINKS", "ON"}, + {"LLVM_INSTALL_UTILS", "ON"}, + {"LLVM_BUILD_LLVM_DYLIB", "ON"}, + {"LLVM_LINK_LLVM_DYLIB", "ON"}, + {"LLVM_APPEND_VC_REV", "OFF"}, + {"LLVM_ENABLE_RTTI", "ON"}, {"LLVM_ENABLE_ZLIB", "FORCE_ON"}, {"LLVM_ENABLE_ZSTD", "FORCE_ON"}, + {"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR", "ON"}, + {"LLVM_INCLUDE_BENCHMARKS", "OFF"}, + {"CLANG_DEFAULT_RTLIB", "compiler-rt"}, + {"CLANG_DEFAULT_UNWINDLIB", "libunwind"}, + {"CLANG_DEFAULT_CXX_STDLIB", "libc++"}, + {"CLANG_CONFIG_FILE_SYSTEM_DIR", "/system/etc/clang"}, + {"LLVM_ENABLE_FFI", "OFF"}, {"LLVM_ENABLE_LIBXML2", "OFF"}, - }, - SkipTest: true, - }, - Python, - - Zlib, - Zstd, - earlyCompilerRT, - KernelHeaders, - ), version -} -func init() { - native.MustRegister(&Artifact{ - f: Toolchain.newEarlyRuntimes, - - Name: "early-runtimes", - Description: "early LLVM runtimes: libunwind, libcxx, libcxxabi", - - Dependencies: P{ - earlyCompilerRT, - }, - }) -} - -func (t Toolchain) newLLVM() (pkg.Artifact, string) { - early := muslHeaders - if t.stage.isStage0() { - // The LLVM build system uses the system installation when building with - // LLVM_LINK_LLVM_DYLIB, since it builds runtimes after the fact, using - // the just-built toolchain. This is unacceptable in stage0 due to the - // potential version difference. Later stages bootstrap off of runtimes - // of its previous stage via 3-stage determinism. - early = earlyRuntimes - } + {"LLVM_ENABLE_LIBCXX", "ON"}, + {"LLVM_ENABLE_LLD", "ON"}, + {"LIBUNWIND_ENABLE_ASSERTIONS", "OFF"}, + {"LIBUNWIND_USE_COMPILER_RT", "ON"}, - cache := []KV{ - {"ENABLE_LINKER_BUILD_ID", "ON"}, - {"COMPILER_RT_USE_BUILTINS_LIBRARY", "ON"}, - {"COMPILER_RT_DEFAULT_TARGET_ONLY", "ON"}, - {"COMPILER_RT_BUILD_GWP_ASAN", "OFF"}, - {"LIBCXX_CXX_ABI", "libcxxabi"}, - {"LIBCXX_USE_COMPILER_RT", "ON"}, - {"LIBCXX_ENABLE_STATIC_ABI_LIBRARY", "OFF"}, - {"LIBCXX_HAS_MUSL_LIBC", "ON"}, - {"LIBCXX_HARDENING_MODE", "fast"}, - {"LIBCXXABI_USE_LLVM_UNWINDER", "ON"}, - {"LIBCXXABI_ENABLE_STATIC_UNWINDER", "OFF"}, - {"LIBCXXABI_USE_COMPILER_RT", "ON"}, - {"LLVM_INSTALL_BINUTILS_SYMLINKS", "ON"}, - {"LLVM_INSTALL_UTILS", "ON"}, - {"LLVM_BUILD_LLVM_DYLIB", "ON"}, - {"LLVM_LINK_LLVM_DYLIB", "ON"}, - {"LLVM_APPEND_VC_REV", "OFF"}, - {"LLVM_ENABLE_RTTI", "ON"}, - {"LLVM_ENABLE_ZLIB", "FORCE_ON"}, - {"LLVM_ENABLE_ZSTD", "FORCE_ON"}, - {"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR", "ON"}, - {"LLVM_INCLUDE_BENCHMARKS", "OFF"}, - {"CLANG_DEFAULT_RTLIB", "compiler-rt"}, - {"CLANG_DEFAULT_UNWINDLIB", "libunwind"}, - {"CLANG_DEFAULT_CXX_STDLIB", "libc++"}, - {"CLANG_CONFIG_FILE_SYSTEM_DIR", "/system/etc/clang"}, - {"LLVM_ENABLE_FFI", "OFF"}, - {"LLVM_ENABLE_LIBXML2", "OFF"}, - {"LLVM_ENABLE_LIBCXX", "ON"}, - {"LLVM_ENABLE_LLD", "ON"}, - {"LIBUNWIND_ENABLE_ASSERTIONS", "OFF"}, - {"LIBUNWIND_USE_COMPILER_RT", "ON"}, + {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_ENABLE_PROJECTS", "'" + strings.Join([]string{ + "clang", + "lld", + }, ";") + "'"}, + {"LLVM_ENABLE_RUNTIMES", "'" + strings.Join([]string{ + "compiler-rt", + "libcxx", + "libcxxabi", + "libunwind", + "libclc", + }, ";") + "'"}, + } - {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_ENABLE_PROJECTS", "'" + strings.Join([]string{ - "clang", - "lld", - }, ";") + "'"}, - {"LLVM_ENABLE_RUNTIMES", "'" + strings.Join([]string{ - "compiler-rt", - "libcxx", - "libcxxabi", - "libunwind", - "libclc", - }, ";") + "'"}, - } + if !t.stage.isStage0() { + skipChecks := []string{ + // expensive, pointless to run here + "benchmarks", + // LLVM ERROR: Tried to execute an unknown external function: roundevenf + "ExecutionEngine/Interpreter/intrinsics.ll", + // clang: deadlocks with LLVM_BUILD_LLVM_DYLIB + "crash-recovery-modules", + // clang: fatal error: '__config_site' file not found + "CodeGen/PowerPC/ppc-xmmintrin.c", + "CodeGen/PowerPC/ppc-mmintrin.c", + "CodeGen/PowerPC/ppc-emmintrin.c", + "CodeGen/PowerPC/ppc-pmmintrin.c", + "CodeGen/PowerPC/ppc-tmmintrin.c", + "CodeGen/PowerPC/ppc-smmintrin.c", + "CodeGenCUDA/amdgpu-alias-undef-symbols.cu", + // cxx: fails on musl + "close.dont-get-rid-of-buffer", + "re/re.traits", + "std/time", + "localization/locales", + "localization/locale.categories", + "selftest/dsl/dsl.sh.py", + "input.output/iostream.format", + "locale-specific_form", + // cxx: deadlocks + "std/thread/thread.jthread", + // unwind: fails on musl + "eh_frame_fde_pc_range", + } + switch t.arch { + case "arm64": + skipChecks = append(skipChecks, + // LLVM: intermittently crashes + "ExecutionEngine/OrcLazy/multiple-compile-threads-basic.ll", + // unwind: unexpectedly passes + "unwind_leaffunction", + ) + } - if !t.stage.isStage0() { - skipChecks := []string{ - // expensive, pointless to run here - "benchmarks", - // LLVM ERROR: Tried to execute an unknown external function: roundevenf - "ExecutionEngine/Interpreter/intrinsics.ll", - // clang: deadlocks with LLVM_BUILD_LLVM_DYLIB - "crash-recovery-modules", - // clang: fatal error: '__config_site' file not found - "CodeGen/PowerPC/ppc-xmmintrin.c", - "CodeGen/PowerPC/ppc-mmintrin.c", - "CodeGen/PowerPC/ppc-emmintrin.c", - "CodeGen/PowerPC/ppc-pmmintrin.c", - "CodeGen/PowerPC/ppc-tmmintrin.c", - "CodeGen/PowerPC/ppc-smmintrin.c", - "CodeGenCUDA/amdgpu-alias-undef-symbols.cu", - // cxx: fails on musl - "close.dont-get-rid-of-buffer", - "re/re.traits", - "std/time", - "localization/locales", - "localization/locale.categories", - "selftest/dsl/dsl.sh.py", - "input.output/iostream.format", - "locale-specific_form", - // cxx: deadlocks - "std/thread/thread.jthread", - // unwind: fails on musl - "eh_frame_fde_pc_range", - } - switch t.arch { - case "arm64": - skipChecks = append(skipChecks, - // LLVM: intermittently crashes - "ExecutionEngine/OrcLazy/multiple-compile-threads-basic.ll", - // unwind: unexpectedly passes - "unwind_leaffunction", - ) - } + if t.opts&OptLLVMNoLTO == 0 { + cache = append(cache, []KV{ + // very expensive + {"LLVM_ENABLE_LTO", "Thin"}, + }...) + } - if t.opts&OptLLVMNoLTO == 0 { cache = append(cache, []KV{ - // very expensive - {"LLVM_ENABLE_LTO", "Thin"}, + // symbols: clock_gettime, mallopt + {"COMPILER_RT_INCLUDE_TESTS", "OFF"}, + + {"LLVM_BUILD_TESTS", "ON"}, + {"LLVM_LIT_ARGS", litArgs(true, skipChecks...)}, }...) } - cache = append(cache, []KV{ - // symbols: clock_gettime, mallopt - {"COMPILER_RT_INCLUDE_TESTS", "OFF"}, + return &meta, t.NewPackage("llvm", meta.Version, source, &PackageAttr{ + Flag: TExclusive, + }, &CMakeHelper{ + Append: []string{"llvm"}, - {"LLVM_BUILD_TESTS", "ON"}, - {"LLVM_LIT_ARGS", litArgs(true, skipChecks...)}, - }...) - } - - source, version := t.Load(llvmSource) - return t.NewPackage("llvm", version, source, &PackageAttr{ - Flag: TExclusive, - }, &CMakeHelper{ - Append: []string{"llvm"}, - - Cache: cache, - Script: ` + Cache: cache, + Script: ` ln -s ld.lld /work/system/bin/ld ln -s clang /work/system/bin/cc ln -s clang /work/system/bin/cpp ln -s clang++ /work/system/bin/c++ `, - // LLVM_LINK_LLVM_DYLIB causes llvm test suite to leak system - // installation into test environment, and the tests end up testing the - // system installation instead. Tests are disabled on stage0 and relies - // on 3-stage determinism to test later stages. - SkipTest: t.stage.isStage0(), + // LLVM_LINK_LLVM_DYLIB causes llvm test suite to leak system + // installation into test environment, and the tests end up testing the + // system installation instead. Tests are disabled on stage0 and relies + // on 3-stage determinism to test later stages. + SkipTest: t.stage.isStage0(), - Test: ` + Test: ` chmod +w /bin && ln -s \ ../system/bin/chmod \ ../system/bin/mkdir \ @@ -303,53 +332,20 @@ chmod +w /bin && ln -s \ /bin ninja ` + jobsFlagE + ` check-all `, - }, - Python, - Perl, - Diffutils, - Bash, - Gawk, - Coreutils, - Findutils, - - Zlib, - Zstd, - early, - KernelHeaders, - ), version -} -func init() { - const ( - version = "22.1.5" - checksum = "32gOaLPHcUlo3hkdk5RbFumTE01XKeCAYZcpvn8IDHF95egXVfDFSl6eZL3ChMen" - ) - - native.MustRegister(&Artifact{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.NewPatchedSource("llvm", version, newFromGitHub( - "llvm/llvm-project", - "llvmorg-"+version, - checksum, - ), true, llvmPatches...), version }, + Python, + Perl, + Diffutils, + Bash, + Gawk, + Coreutils, + Findutils, - Name: "llvm-project", - Description: "LLVM monorepo with Rosa OS patches", - - ID: 1830, - }) - - native.MustRegister(&Artifact{ - f: Toolchain.newLLVM, - - Name: "llvm", - Description: "a collection of modular and reusable compiler and toolchain technologies", - Website: "https://llvm.org", - - Dependencies: P{ Zlib, Zstd, - Musl, - }, + early, + KernelHeaders, + ) + }) } |
