aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/llvm.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa/llvm.go')
-rw-r--r--internal/rosa/llvm.go327
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,
}
}