aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cmd/mbf/main.go8
-rw-r--r--internal/rosa/all.go10
-rw-r--r--internal/rosa/llvm.go327
-rw-r--r--internal/rosa/llvm_latest.go9
-rw-r--r--internal/rosa/llvm_patches.go (renamed from internal/rosa/llvm_patches_latest.go)0
-rw-r--r--internal/rosa/mksh.go6
-rw-r--r--internal/rosa/musl.go39
-rw-r--r--internal/rosa/rosa.go57
-rw-r--r--internal/rosa/rosa_test.go2
-rw-r--r--internal/rosa/stage0.go3
10 files changed, 166 insertions, 295 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go
index 1438baa5..1a986ca7 100644
--- a/cmd/mbf/main.go
+++ b/cmd/mbf/main.go
@@ -318,7 +318,7 @@ func main() {
if err = cm.Do(func(cache *pkg.Cache) (err error) {
pathname, _, err = cache.Cure(
- (t - 2).Load(rosa.Clang),
+ (t - 2).Load(rosa.LLVM),
)
return
}); err != nil {
@@ -328,7 +328,7 @@ func main() {
if err = cm.Do(func(cache *pkg.Cache) (err error) {
pathname, checksum[0], err = cache.Cure(
- (t - 1).Load(rosa.Clang),
+ (t - 1).Load(rosa.LLVM),
)
return
}); err != nil {
@@ -337,7 +337,7 @@ func main() {
log.Println("stage2:", pathname)
if err = cm.Do(func(cache *pkg.Cache) (err error) {
pathname, checksum[1], err = cache.Cure(
- t.Load(rosa.Clang),
+ t.Load(rosa.LLVM),
)
return
}); err != nil {
@@ -542,7 +542,7 @@ func main() {
presets[i] = p
}
- base := rosa.Clang
+ base := rosa.LLVM
if !flagWithToolchain {
base = rosa.Musl
}
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index c5cce349..f61ec62f 100644
--- a/internal/rosa/all.go
+++ b/internal/rosa/all.go
@@ -16,9 +16,7 @@ import (
type PArtifact int
const (
- CompilerRT PArtifact = iota
- LLVMRuntimes
- Clang
+ LLVM PArtifact = iota
// EarlyInit is the Rosa OS init program.
EarlyInit
@@ -77,7 +75,6 @@ const (
LibXau
Libbsd
Libcap
- Libclc
Libdrm
Libev
Libexpat
@@ -174,12 +171,13 @@ const (
// PresetUnexportedStart is the first unexported preset.
PresetUnexportedStart
- llvmSource = iota - 1
- buildcatrust
+ buildcatrust = iota - 1
utilMacros
// Musl is a standalone libc that does not depend on the toolchain.
Musl
+ // muslHeaders is a system installation of [Musl] headers.
+ muslHeaders
// gcc is a hacked-to-pieces GCC toolchain meant for use in intermediate
// stages only. This preset and its direct output must never be exposed.
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,
}
}
diff --git a/internal/rosa/llvm_latest.go b/internal/rosa/llvm_latest.go
deleted file mode 100644
index b5822eb5..00000000
--- a/internal/rosa/llvm_latest.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package rosa
-
-// latest version of LLVM, conditional to temporarily avoid broken new releases
-const (
- llvmVersionMajor = "22"
- llvmVersion = llvmVersionMajor + ".1.4"
-
- llvmChecksum = "Bk3t-tV5sD5T0bqefFMcLeFuAwXnhFipywZmqst5hAZs97QQWGKB_5XyAFjj5tDB"
-)
diff --git a/internal/rosa/llvm_patches_latest.go b/internal/rosa/llvm_patches.go
index f1060b9f..f1060b9f 100644
--- a/internal/rosa/llvm_patches_latest.go
+++ b/internal/rosa/llvm_patches.go
diff --git a/internal/rosa/mksh.go b/internal/rosa/mksh.go
index fde25270..59784276 100644
--- a/internal/rosa/mksh.go
+++ b/internal/rosa/mksh.go
@@ -7,9 +7,9 @@ func (t Toolchain) newMksh() (pkg.Artifact, string) {
version = "59c"
checksum = "0Zj-k4nXEu3IuJY4lvwD2OrC2t27GdZj8SPy4DoaeuBRH1padWb7oREpYgwY8JNq"
)
- return t.New("mksh-"+version, 0, stage0Concat(t, []pkg.Artifact{},
- t.Load(Perl),
- t.Load(Coreutils),
+ return t.New("mksh-"+version, 0, t.AppendPresets(nil,
+ Perl,
+ Coreutils,
), nil, []string{
"LDSTATIC=-static",
"CPPFLAGS=-DMKSH_DEFAULT_PROFILEDIR=\\\"/system/etc\\\"",
diff --git a/internal/rosa/musl.go b/internal/rosa/musl.go
index 2e9709cd..0cc3356a 100644
--- a/internal/rosa/musl.go
+++ b/internal/rosa/musl.go
@@ -2,10 +2,7 @@ package rosa
import "hakurei.app/internal/pkg"
-func (t Toolchain) newMusl(
- headers bool,
- extra ...pkg.Artifact,
-) (pkg.Artifact, string) {
+func (t Toolchain) newMusl(headers bool) (pkg.Artifact, string) {
const (
version = "1.2.6"
checksum = "WtWb_OV_XxLDAB5NerOL9loLlHVadV00MmGk65PPBU1evaolagoMHfvpZp_vxEzS"
@@ -36,25 +33,26 @@ rmdir -v /work/lib
helper.Script = ""
}
+ env := []string{
+ "LDFLAGS=" + earlyLDFLAGS(false),
+ }
+ if t.isStage0() {
+ env = append(env,
+ "CC=clang",
+ "AR=ar",
+ "RANLIB=ranlib",
+ )
+ }
+
return t.NewPackage(name, version, newTar(
"https://musl.libc.org/releases/musl-"+version+".tar.gz",
checksum,
pkg.TarGzip,
), &PackageAttr{
- NonStage0: extra,
-
// expected to be writable in copies
Chmod: true,
- Env: stage0ExclConcat(t, []string{
- "CC=clang",
- "LIBCC=/system/lib/clang/" + llvmVersionMajor + "/lib/" +
- triplet() + "/libclang_rt.builtins.a",
- "AR=ar",
- "RANLIB=ranlib",
- },
- "LDFLAGS="+earlyLDFLAGS(false),
- ),
+ Env: env,
}, &helper,
Coreutils,
), version
@@ -62,7 +60,7 @@ rmdir -v /work/lib
func init() {
artifactsM[Musl] = Metadata{
f: func(t Toolchain) (pkg.Artifact, string) {
- return t.newMusl(false, t.Load(CompilerRT))
+ return t.newMusl(false)
},
Name: "musl",
@@ -71,4 +69,13 @@ func init() {
ID: 11688,
}
+
+ artifactsM[muslHeaders] = Metadata{
+ f: func(t Toolchain) (pkg.Artifact, string) {
+ return t.newMusl(true)
+ },
+
+ Name: "musl-headers",
+ Description: "system installation of musl headers",
+ }
}
diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go
index c60e4568..e1d20407 100644
--- a/internal/rosa/rosa.go
+++ b/internal/rosa/rosa.go
@@ -107,21 +107,6 @@ func earlyLDFLAGS(static bool) string {
return s
}
-// earlyCFLAGS is reference CFLAGS for the stage0 toolchain.
-const earlyCFLAGS = "-Qunused-arguments " +
- "-isystem/system/include"
-
-// earlyCXXFLAGS returns reference CXXFLAGS for the stage0 toolchain
-// corresponding to [runtime.GOARCH].
-func earlyCXXFLAGS() string {
- return "--start-no-unused-arguments " +
- "-stdlib=libc++ " +
- "--end-no-unused-arguments " +
- "-isystem/system/include/c++/v1 " +
- "-isystem/system/include/" + triplet() + "/c++/v1 " +
- "-isystem/system/include "
-}
-
// Toolchain denotes the infrastructure to compile a [pkg.Artifact] on.
type Toolchain uint32
@@ -191,24 +176,6 @@ func (t Toolchain) isStd() bool {
}
}
-// stage0Concat concatenates s and values. If the current toolchain is
-// toolchainStage0, stage0Concat returns s as is.
-func stage0Concat[S ~[]E, E any](t Toolchain, s S, values ...E) S {
- if t.isStage0() {
- return s
- }
- return slices.Concat(s, values)
-}
-
-// stage0ExclConcat concatenates s and values. If the current toolchain is not
-// toolchainStage0, stage0ExclConcat returns s as is.
-func stage0ExclConcat[S ~[]E, E any](t Toolchain, s S, values ...E) S {
- if t.isStage0() {
- return slices.Concat(s, values)
- }
- return s
-}
-
// lastIndexFunc is like [strings.LastIndexFunc] but for [slices].
func lastIndexFunc[S ~[]E, E any](s S, f func(E) bool) (i int) {
if i = slices.IndexFunc(s, f); i < 0 {
@@ -338,7 +305,7 @@ mkdir -vp /work/system/bin
toybox = toyboxEarly
}
- base := Clang
+ base := LLVM
if flag&TNoToolchain != 0 {
base = Musl
}
@@ -353,11 +320,6 @@ mkdir -vp /work/system/bin
env = fixupEnviron(env, []string{
EnvTriplet + "=" + triplet(),
lcMessages,
-
- "AR=ar",
- "RANLIB=ranlib",
- "LIBCC=/system/lib/clang/" + llvmVersionMajor + "/lib/" + triplet() +
- "/libclang_rt.builtins.a",
}, "/system/bin", "/bin")
default:
@@ -415,8 +377,8 @@ cat /usr/src/` + name + `-patches/* | \
`
aname += "-patched"
}
- return t.New(aname, 0, stage0Concat(t, []pkg.Artifact{},
- t.Load(Patch),
+ return t.New(aname, 0, t.AppendPresets(nil,
+ Patch,
), nil, nil, script, paths...)
}
@@ -463,9 +425,6 @@ type PackageAttr struct {
// Passed to [Toolchain.NewPatchedSource].
Patches []KV
- // Dependencies not provided by stage0.
- NonStage0 []pkg.Artifact
-
// Passed through to [Toolchain.New], before source.
Paths []pkg.ExecPath
// Passed through to [Toolchain.New].
@@ -533,14 +492,8 @@ func (t Toolchain) NewPackage(
panic("source must be non-nil")
}
wantsChmod, wantsWrite := helper.wantsChmod(), helper.wantsWrite()
- dc := len(attr.NonStage0)
- if !t.isStage0() {
- dc += 1<<3 + len(extra)
- }
-
- extraRes := make([]pkg.Artifact, 0, dc)
- extraRes = append(extraRes, attr.NonStage0...)
- if !t.isStage0() {
+ extraRes := make([]pkg.Artifact, 0, 1<<3+len(extra))
+ {
pv := paGet()
for _, p := range helper.extra(attr.Flag) {
extraRes = t.appendPreset(extraRes, pv, p)
diff --git a/internal/rosa/rosa_test.go b/internal/rosa/rosa_test.go
index 0386aee7..b64ebbd7 100644
--- a/internal/rosa/rosa_test.go
+++ b/internal/rosa/rosa_test.go
@@ -94,7 +94,7 @@ func TestCureAll(t *testing.T) {
func BenchmarkStage3(b *testing.B) {
for b.Loop() {
- rosa.Std.Load(rosa.Clang)
+ rosa.Std.Load(rosa.LLVM)
b.StopTimer()
rosa.DropCaches()
diff --git a/internal/rosa/stage0.go b/internal/rosa/stage0.go
index 747fd802..0afaddfb 100644
--- a/internal/rosa/stage0.go
+++ b/internal/rosa/stage0.go
@@ -9,9 +9,6 @@ import (
func (t Toolchain) newStage0() (pkg.Artifact, string) {
return t.New("rosa-stage0", 0, []pkg.Artifact{
t.Load(Musl),
- t.Load(CompilerRT),
- t.Load(LLVMRuntimes),
- t.Load(Clang),
t.Load(Zlib),
t.Load(Bzip2),