package rosa import "hakurei.app/internal/pkg" 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/" 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, KernelHeaders, ), llvmVersion } func init() { artifactsM[CompilerRT] = Metadata{ f: Toolchain.newCompilerRT, Name: "compiler-rt", Description: "LLVM runtime: compiler-rt", Website: "https://llvm.org/", Dependencies: P{ Musl, }, } } 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, Name: "llvm-runtimes", Description: "LLVM runtimes: libunwind, libcxx, libcxxabi", Website: "https://llvm.org/", Dependencies: P{ CompilerRT, }, } } func (t Toolchain) newClang() (pkg.Artifact, string) { target := "'AArch64;RISCV;X86'" if t.isStage0() { target = "Native" } 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{ 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"}, }, Script: ` ln -s ld.lld /work/system/bin/ld ln -s clang /work/system/bin/cc ln -s clang++ /work/system/bin/c++ ninja check-all `, }, Python, Perl, Diffutils, Bash, Gawk, Coreutils, Findutils, KernelHeaders, ), llvmVersion } func init() { artifactsM[Clang] = Metadata{ f: Toolchain.newClang, Name: "clang", Description: `an "LLVM native" C/C++/Objective-C compiler`, 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"}, }, Script: "ninja 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/", } }