diff options
Diffstat (limited to 'internal/rosa/llvm.go')
| -rw-r--r-- | internal/rosa/llvm.go | 327 |
1 files changed, 126 insertions, 201 deletions
diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index 0d3c993b..a7930e1b 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -1,195 +1,138 @@ package rosa -import "hakurei.app/internal/pkg" +import ( + "regexp" + "strings" -func init() { - artifactsM[llvmSource] = Metadata{ - f: func(t Toolchain) (pkg.Artifact, string) { - return t.NewPatchedSource("llvm", llvmVersion, newFromGitHub( - "llvm/llvm-project", - "llvmorg-"+llvmVersion, - llvmChecksum, - ), true, llvmPatches...), llvmVersion - }, - - Name: "llvm-project", - Description: "LLVM monorepo with Rosa OS patches", - - ID: 1830, - } -} - -func (t Toolchain) newCompilerRT() (pkg.Artifact, string) { - muslHeaders, _ := t.newMusl(true) - return t.NewPackage("compiler-rt", llvmVersion, t.Load(llvmSource), &PackageAttr{ - NonStage0: []pkg.Artifact{ - muslHeaders, - }, - Env: stage0ExclConcat(t, []string{}, - "LDFLAGS="+earlyLDFLAGS(false), - ), - Flag: TExclusive, - }, &CMakeHelper{ - Append: []string{"compiler-rt"}, - - Cache: []KV{ - {"CMAKE_BUILD_TYPE", "Release"}, - - {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, - - // libc++ not yet available - {"CMAKE_CXX_COMPILER_TARGET", ""}, - - {"COMPILER_RT_BUILD_BUILTINS", "ON"}, - {"COMPILER_RT_DEFAULT_TARGET_ONLY", "OFF"}, - {"COMPILER_RT_SANITIZERS_TO_BUILD", "asan"}, - {"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"}, - }, - Script: ` -mkdir -p "/work/system/lib/clang/` + llvmVersionMajor + `/lib/" -ln -s \ - "../../../${ROSA_TRIPLE}" \ - "/work/system/lib/clang/` + llvmVersionMajor + `/lib/" + "hakurei.app/internal/pkg" +) -ln -s \ - "clang_rt.crtbegin-` + linuxArch() + `.o" \ - "/work/system/lib/${ROSA_TRIPLE}/crtbeginS.o" -ln -s \ - "clang_rt.crtend-` + linuxArch() + `.o" \ - "/work/system/lib/${ROSA_TRIPLE}/crtendS.o" -`, - }, - Python, +func (t Toolchain) newLLVM() (pkg.Artifact, string) { + const ( + version = "22.1.4" + checksum = "Bk3t-tV5sD5T0bqefFMcLeFuAwXnhFipywZmqst5hAZs97QQWGKB_5XyAFjj5tDB" + ) - KernelHeaders, - ), llvmVersion -} -func init() { - artifactsM[CompilerRT] = Metadata{ - f: Toolchain.newCompilerRT, + cache := []KV{ + {"CMAKE_BUILD_TYPE", "Release"}, - Name: "compiler-rt", - Description: "LLVM runtime: compiler-rt", - Website: "https://llvm.org/", + {"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"}, + {"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"}, - Dependencies: P{ - Musl, - }, + {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, + {"LLVM_ENABLE_PROJECTS", "'clang;lld;libclc'"}, + {"LLVM_ENABLE_RUNTIMES", "'compiler-rt;libcxx;libcxxabi;libunwind'"}, } -} - -func (t Toolchain) newLLVMRuntimes() (pkg.Artifact, string) { - return t.NewPackage("llvm-runtimes", llvmVersion, t.Load(llvmSource), &PackageAttr{ - NonStage0: t.AppendPresets(nil, CompilerRT), - Env: stage0ExclConcat(t, []string{}, - "LDFLAGS="+earlyLDFLAGS(false), - ), - Flag: TExclusive, - }, &CMakeHelper{ - Append: []string{"runtimes"}, - - Cache: []KV{ - {"CMAKE_BUILD_TYPE", "Release"}, - - {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_ENABLE_RUNTIMES", "'libunwind;libcxx;libcxxabi'"}, - - {"LIBUNWIND_USE_COMPILER_RT", "ON"}, - {"LIBCXX_HAS_MUSL_LIBC", "ON"}, - {"LIBCXX_USE_COMPILER_RT", "ON"}, - {"LIBCXXABI_USE_COMPILER_RT", "ON"}, - {"LIBCXXABI_USE_LLVM_UNWINDER", "ON"}, - - // libc++ not yet available - {"CMAKE_CXX_COMPILER_WORKS", "ON"}, - - {"LIBCXX_HAS_ATOMIC_LIB", "OFF"}, - {"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL", "OFF"}, - {"LLVM_ENABLE_ZLIB", "OFF"}, - {"LLVM_ENABLE_ZSTD", "OFF"}, - {"LLVM_ENABLE_LIBXML2", "OFF"}, - }, - }, - Python, - - KernelHeaders, - ), llvmVersion -} -func init() { - artifactsM[LLVMRuntimes] = Metadata{ - f: Toolchain.newLLVMRuntimes, + if !t.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", + } + for i, s := range skipChecks { + s = regexp.QuoteMeta(s) + s = strings.ReplaceAll(s, "/", "\\/") + skipChecks[i] = s + } - Name: "llvm-runtimes", - Description: "LLVM runtimes: libunwind, libcxx, libcxxabi", - Website: "https://llvm.org/", + cache = append(cache, []KV{ + // very expensive + {"LLVM_ENABLE_LTO", "Thin"}, - Dependencies: P{ - CompilerRT, - }, - } -} + // symbols: clock_gettime, mallopt + {"COMPILER_RT_INCLUDE_TESTS", "OFF"}, -func (t Toolchain) newClang() (pkg.Artifact, string) { - target := "'AArch64;RISCV;X86'" - if t.isStage0() { - target = "Native" + {"LLVM_LIT_ARGS", "'" + strings.Join([]string{ + "--verbose", + "--filter-out='\\''" + strings.Join(skipChecks, "|") + "'\\''", + }, " ") + "'"}, + }...) } - return t.NewPackage("clang", llvmVersion, t.Load(llvmSource), &PackageAttr{ - NonStage0: t.AppendPresets(nil, LLVMRuntimes), - Env: stage0ExclConcat(t, []string{}, - "CFLAGS="+earlyCFLAGS, - "CXXFLAGS="+earlyCXXFLAGS(), - "LDFLAGS="+earlyLDFLAGS(false), - ), - Flag: TExclusive, - }, &CMakeHelper{ + return t.NewPackage("llvm", version, t.NewPatchedSource("llvm", version, newFromGitHub( + "llvm/llvm-project", + "llvmorg-"+version, + checksum, + ), true, llvmPatches...), nil, &CMakeHelper{ Append: []string{"llvm"}, - Cache: []KV{ - {"CMAKE_BUILD_TYPE", "Release"}, - - {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_ENABLE_PROJECTS", "'clang;lld'"}, - - {"LLVM_ENABLE_LIBCXX", "ON"}, - {"LLVM_USE_LINKER", "lld"}, - - {"LLVM_INSTALL_BINUTILS_SYMLINKS", "ON"}, - {"LLVM_INSTALL_CCTOOLS_SYMLINKS", "ON"}, - - {"LLVM_LIT_ARGS", "'--verbose'"}, - - {"CLANG_DEFAULT_LINKER", "lld"}, - {"CLANG_DEFAULT_CXX_STDLIB", "libc++"}, - {"CLANG_DEFAULT_RTLIB", "compiler-rt"}, - {"CLANG_DEFAULT_UNWINDLIB", "libunwind"}, - - {"LLVM_TARGETS_TO_BUILD", target}, - {"CMAKE_CROSSCOMPILING", "OFF"}, - {"CXX_SUPPORTS_CUSTOM_LINKER", "ON"}, - - {"LLVM_ENABLE_ZLIB", "OFF"}, - {"LLVM_ENABLE_ZSTD", "OFF"}, - {"LLVM_ENABLE_LIBXML2", "OFF"}, - }, + Cache: cache, Script: ` ln -s ld.lld /work/system/bin/ld ln -s clang /work/system/bin/cc 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.isStage0(), + + Test: ` +chmod +w /bin && ln -s \ + ../system/bin/chmod \ + ../system/bin/mkdir \ + ../system/bin/rm \ + ../system/bin/tr \ + ../system/bin/awk \ + /bin ninja ` + jobsFlagE + ` check-all `, }, @@ -201,44 +144,26 @@ ninja ` + jobsFlagE + ` check-all Coreutils, Findutils, + Zlib, + Zstd, + muslHeaders, KernelHeaders, - ), llvmVersion + ), version } func init() { - artifactsM[Clang] = Metadata{ - f: Toolchain.newClang, + artifactsM[LLVM] = Metadata{ + f: Toolchain.newLLVM, - Name: "clang", - Description: `an "LLVM native" C/C++/Objective-C compiler`, - Website: "https://llvm.org/", + Name: "llvm", + Description: "a collection of modular and reusable compiler and toolchain technologies", + Website: "https://llvm.org", Dependencies: P{ - LLVMRuntimes, - }, - } -} - -func (t Toolchain) newLibclc() (pkg.Artifact, string) { - return t.NewPackage("libclc", llvmVersion, t.Load(llvmSource), nil, &CMakeHelper{ - Append: []string{"libclc"}, - - Cache: []KV{ - {"CMAKE_BUILD_TYPE", "Release"}, - - {"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`}, - {"LLVM_DEFAULT_TARGET_TRIPLE", `"${ROSA_TRIPLE}"`}, - - {"LIBCLC_TARGETS_TO_BUILD", "all"}, + Zlib, + Zstd, + Musl, }, - Script: "ninja " + jobsFlagE + " test", - }), llvmVersion -} -func init() { - artifactsM[Libclc] = Metadata{ - f: Toolchain.newLibclc, - Name: "libclc", - Description: "an open source, BSD/MIT dual licensed implementation of the library requirements of the OpenCL C programming language", - Website: "https://libclc.llvm.org/", + ID: 1830, } } |
