diff options
Diffstat (limited to 'internal/rosa/llvm.go')
| -rw-r--r-- | internal/rosa/llvm.go | 129 |
1 files changed, 95 insertions, 34 deletions
diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index d9ca83e1..4d3e4b21 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -75,53 +75,112 @@ func init() { target := t.triple() 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_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY", "ON"}, - {"LIBCXXABI_USE_LLVM_UNWINDER", "ON"}, - {"LIBCXXABI_ENABLE_STATIC_UNWINDER", "ON"}, - {"LIBCXXABI_USE_COMPILER_RT", "ON"}, - {"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY", "ON"}, + {"LLVM_HOST_TRIPLE", "'" + target + "'"}, + {"LLVM_ENABLE_PROJECTS", "'" + strings.Join([]string{ + "clang", + "lld", + }, ";") + "'"}, + {"LLVM_ENABLE_RUNTIMES", "'" + strings.Join([]string{ + "compiler-rt", + "libcxx", + "libcxxabi", + "libunwind", + }, ";") + "'"}, + + {"LLVM_ENABLE_LLD", "ON"}, {"LLVM_INSTALL_BINUTILS_SYMLINKS", "ON"}, {"LLVM_INSTALL_UTILS", "ON"}, + + {"CLANG_DEFAULT_RTLIB", "compiler-rt"}, + {"CLANG_DEFAULT_UNWINDLIB", "libunwind"}, + {"CLANG_DEFAULT_CXX_STDLIB", "libc++"}, + {"CLANG_CONFIG_FILE_SYSTEM_DIR", "/system/etc/clang"}, + } + + common := []KV{ + {"CMAKE_POSITION_INDEPENDENT_CODE", "ON"}, + {"LLVM_BUILD_LLVM_DYLIB", "ON"}, {"LLVM_LINK_LLVM_DYLIB", "ON"}, {"LLVM_APPEND_VC_REV", "OFF"}, + {"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR", "ON"}, + {"LLVM_INCLUDE_BENCHMARKS", "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"}, + + {"COMPILER_RT_USE_BUILTINS_LIBRARY", "ON"}, + {"COMPILER_RT_DEFAULT_TARGET_ONLY", "ON"}, + {"COMPILER_RT_BUILD_GWP_ASAN", "OFF"}, + // symbols: clock_gettime, mallopt + {"COMPILER_RT_INCLUDE_TESTS", "OFF"}, + {"LIBUNWIND_ENABLE_ASSERTIONS", "OFF"}, {"LIBUNWIND_USE_COMPILER_RT", "ON"}, - {"LLVM_HOST_TRIPLE", "'" + target + "'"}, - {"LLVM_ENABLE_PROJECTS", "'" + strings.Join([]string{ - "clang", - "lld", - }, ";") + "'"}, - {"LLVM_ENABLE_RUNTIMES", "'" + strings.Join([]string{ - "compiler-rt", - "libcxx", - "libcxxabi", - "libunwind", - }, ";") + "'"}, + {"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_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY", "ON"}, + + {"LIBCXXABI_USE_LLVM_UNWINDER", "ON"}, + {"LIBCXXABI_ENABLE_STATIC_UNWINDER", "ON"}, + {"LIBCXXABI_USE_COMPILER_RT", "ON"}, + {"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY", "ON"}, + } + cache = append(cache, common...) + + var ( + triples []string + paths []pkg.ExecPath + ) + for _, arch := range []string{ + "amd64", + "arm64", + "riscv64", + } { + _triple := triple(arch) + triples = append(triples, _triple) + if t.stage.isStage0() { + continue + } + + if arch != t.Arch() { + sysroot := AbsSystem.Append(arch) + ct := t.native() + if ct.Arch() != arch { + ct = t.NewCross(arch).New(t.stage) + } + paths = append(paths, pkg.Path( + sysroot, true, ct.Append(nil, + _musl, + _kernelHeaders, + )..., + )) + cache = append(cache, []KV{ + {"BUILTINS_" + _triple + "_CMAKE_SYSROOT", sysroot.String()}, + {"RUNTIMES_" + _triple + "_CMAKE_SYSROOT", sysroot.String()}, + {"RUNTIMES_" + _triple + "_LLVM_INCLUDE_TESTS", "OFF"}, + }...) + } + + cache = append(cache, []KV{ + {"BUILTINS_" + _triple + "_CMAKE_BUILD_TYPE", "Release"}, + {"RUNTIMES_" + _triple + "_CMAKE_BUILD_TYPE", "Release"}, + {"RUNTIMES_" + _triple + "_CXX_SUPPORTS_FNO_EXCEPTIONS_FLAG", "ON"}, + {"RUNTIMES_" + _triple + "_CXX_SUPPORTS_FUNWIND_TABLES_FLAG", "ON"}, + }...) + for _, p := range common { + p[0] = "RUNTIMES_" + _triple + "_" + p[0] + cache = append(cache, p) + } } + targets := strings.Join(triples, ";") if !t.stage.isStage0() { skipChecks := []string{ @@ -181,9 +240,10 @@ func init() { } cache = append(cache, []KV{ - // symbols: clock_gettime, mallopt - {"COMPILER_RT_INCLUDE_TESTS", "OFF"}, + {"CLANG_VENDOR", "'Rosa OS'"}, + {"LLVM_BUILTIN_TARGETS", "'" + targets + "'"}, + {"LLVM_RUNTIME_TARGETS", "'" + targets + "'"}, {"LLVM_BUILD_TESTS", "ON"}, {"LLVM_LIT_ARGS", litArgs(true, skipChecks...)}, }...) @@ -198,6 +258,7 @@ func init() { "tr", "awk", }, + Paths: paths, ScriptEarly: ` rm -f /system/bin/clang++.cfg |
