forked from rosa/hakurei
Enabling this as a project is deprecated. Signed-off-by: Ophestra <cat@gensokyo.uk>
183 lines
4.5 KiB
Go
183 lines
4.5 KiB
Go
package rosa
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
|
|
"hakurei.app/internal/pkg"
|
|
)
|
|
|
|
func (t Toolchain) newLLVM() (pkg.Artifact, string) {
|
|
const (
|
|
version = "22.1.4"
|
|
checksum = "Bk3t-tV5sD5T0bqefFMcLeFuAwXnhFipywZmqst5hAZs97QQWGKB_5XyAFjj5tDB"
|
|
)
|
|
|
|
cache := []KV{
|
|
{"CMAKE_BUILD_TYPE", "Release"},
|
|
|
|
{"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"},
|
|
|
|
{"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.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
|
|
}
|
|
|
|
if presetOpts&OptLLVMNoLTO == 0 {
|
|
cache = append(cache, []KV{
|
|
// very expensive
|
|
{"LLVM_ENABLE_LTO", "Thin"},
|
|
}...)
|
|
}
|
|
|
|
cache = append(cache, []KV{
|
|
// symbols: clock_gettime, mallopt
|
|
{"COMPILER_RT_INCLUDE_TESTS", "OFF"},
|
|
|
|
{"LLVM_LIT_ARGS", "'" + strings.Join([]string{
|
|
"--verbose",
|
|
"--filter-out='\\''" + strings.Join(skipChecks, "|") + "'\\''",
|
|
}, " ") + "'"},
|
|
}...)
|
|
}
|
|
|
|
return t.NewPackage("llvm", version, t.NewPatchedSource("llvm", version, newFromGitHub(
|
|
"llvm/llvm-project",
|
|
"llvmorg-"+version,
|
|
checksum,
|
|
), true, llvmPatches...), nil, &CMakeHelper{
|
|
Append: []string{"llvm"},
|
|
|
|
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
|
|
`,
|
|
},
|
|
Python,
|
|
Perl,
|
|
Diffutils,
|
|
Bash,
|
|
Gawk,
|
|
Coreutils,
|
|
Findutils,
|
|
|
|
Zlib,
|
|
Zstd,
|
|
muslHeaders,
|
|
KernelHeaders,
|
|
), version
|
|
}
|
|
func init() {
|
|
artifactsM[LLVM] = Metadata{
|
|
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,
|
|
},
|
|
|
|
ID: 1830,
|
|
}
|
|
}
|