aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--internal/rosa/busybox.go11
-rw-r--r--internal/rosa/cmake.go14
-rw-r--r--internal/rosa/git.go8
-rw-r--r--internal/rosa/llvm.go64
-rw-r--r--internal/rosa/musl.go10
-rw-r--r--internal/rosa/rosa.go18
6 files changed, 56 insertions, 69 deletions
diff --git a/internal/rosa/busybox.go b/internal/rosa/busybox.go
index d5eabe7d..b4fb2d3f 100644
--- a/internal/rosa/busybox.go
+++ b/internal/rosa/busybox.go
@@ -108,18 +108,15 @@ func (t Toolchain) NewBusybox() pkg.Artifact {
checksum = "Ial94Tnt7esJ_YEeb0AxunVL6MGYFyOw7Rtu2o87CXCi1TLrc6rlznVsN1rZk7it"
)
- extra := []pkg.Artifact{
- t.NewMake(),
- t.NewKernelHeaders(),
- }
var env []string
-
if t == toolchainStage3 {
- extra = nil
env = append(env, "EXTRA_LDFLAGS=-static")
}
- return t.New("busybox-"+version, extra, nil, slices.Concat([]string{
+ return t.New("busybox-"+version, stage3Concat(t, []pkg.Artifact{},
+ t.NewMake(),
+ t.NewKernelHeaders(),
+ ), nil, slices.Concat([]string{
"ROSA_BUSYBOX_ENABLE=" + strings.Join([]string{
"STATIC",
"PIE",
diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go
index b299e59f..d26ce25c 100644
--- a/internal/rosa/cmake.go
+++ b/internal/rosa/cmake.go
@@ -81,14 +81,6 @@ func (t Toolchain) NewViaCMake(
panic("CACHE must be non-empty")
}
- cmakeExtras := []pkg.Artifact{
- t.NewCMake(),
- t.NewNinja(),
- }
- if t == toolchainStage3 {
- cmakeExtras = nil
- }
-
scriptEarly := attr.ScriptEarly
if attr.Writable {
scriptEarly = `
@@ -102,9 +94,9 @@ chmod -R +w "${ROSA_SOURCE}"
}
sourcePath := AbsUsrSrc.Append(name)
- return t.New(name+"-"+variant+"-"+version, slices.Concat(
- attr.Extra,
- cmakeExtras,
+ return t.New(name+"-"+variant+"-"+version, stage3Concat(t, attr.Extra,
+ t.NewCMake(),
+ t.NewNinja(),
), nil, slices.Concat([]string{
"ROSA_SOURCE=" + sourcePath.String(),
"ROSA_CMAKE_SOURCE=" + sourcePath.Append(attr.Append...).String(),
diff --git a/internal/rosa/git.go b/internal/rosa/git.go
index ca10ee4c..84070240 100644
--- a/internal/rosa/git.go
+++ b/internal/rosa/git.go
@@ -10,7 +10,7 @@ func (t Toolchain) NewGit() pkg.Artifact {
version = "2.52.0"
checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS"
)
- extra := []pkg.Artifact{
+ return t.New("git-"+version, stage3Concat(t, []pkg.Artifact{},
t.NewMake(),
t.NewPerl(),
t.NewM4(),
@@ -18,11 +18,7 @@ func (t Toolchain) NewGit() pkg.Artifact {
t.NewGettext(),
t.NewZlib(),
- }
- if t == toolchainStage3 {
- extra = nil
- }
- return t.New("git-"+version, extra, nil, nil, `
+ ), nil, nil, `
chmod -R +w /usr/src/git && cd /usr/src/git
make configure
./configure --prefix=/system
diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go
index b1d79663..a577df41 100644
--- a/internal/rosa/llvm.go
+++ b/internal/rosa/llvm.go
@@ -124,20 +124,6 @@ func (t Toolchain) newLLVM(variant string, attr *llvmAttr) pkg.Artifact {
)
}
- extra := []pkg.Artifact{
- t.NewLibffi(),
- t.NewPython(),
- t.NewPerl(),
- t.NewDiffutils(),
- t.NewBash(),
- t.NewCoreutils(),
-
- t.NewKernelHeaders(),
- }
- if t == toolchainStage3 {
- extra = nil
- }
-
if attr.flags&llvmProjectClang != 0 {
cache = append(cache,
[2]string{"CLANG_DEFAULT_LINKER", "lld"},
@@ -200,7 +186,9 @@ cp -r /system/include /usr/include && rm -rf /system/include
patches[0] = pkg.Path(AbsUsrSrc.Append("llvmorg"), false, source)
if len(patches) > 1 {
source = t.New(
- "llvmorg-patched", nil, nil, nil, `
+ "llvmorg-patched", stage3Concat(t, []pkg.Artifact{},
+ t.NewPatch(),
+ ), nil, nil, `
cp -r /usr/src/llvmorg/. /work/.
chmod -R +w /work && cd /work
cat /usr/src/llvm-patches/* | patch -p 1
@@ -211,7 +199,16 @@ cat /usr/src/llvm-patches/* | patch -p 1
return t.NewViaCMake("llvm", version, variant, source, &CMakeAttr{
Cache: slices.Concat(cache, attr.cmake),
Append: cmakeAppend,
- Extra: slices.Concat(attr.extra, extra),
+ Extra: stage3Concat(t, attr.extra,
+ t.NewLibffi(),
+ t.NewPython(),
+ t.NewPerl(),
+ t.NewDiffutils(),
+ t.NewBash(),
+ t.NewCoreutils(),
+
+ t.NewKernelHeaders(),
+ ),
Prefix: attr.prefix,
Env: slices.Concat([]string{
@@ -239,15 +236,10 @@ func (t Toolchain) NewLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) {
{"LLVM_ENABLE_LIBXML2", "OFF"},
}
- var env []string
- if t == toolchainStage3 {
- env = []string{
- "LDFLAGS=" + earlyLDFLAGS(false),
- }
- }
-
compilerRT = t.newLLVM("compiler-rt", &llvmAttr{
- env: env,
+ env: stage3ExclConcat(t, []string{},
+ "LDFLAGS="+earlyLDFLAGS(false),
+ ),
cmake: [][2]string{
// libc++ not yet available
{"CMAKE_CXX_COMPILER_TARGET", ""},
@@ -288,17 +280,21 @@ ln -s \
musl = t.NewMusl(&MuslAttr{
Extra: []pkg.Artifact{compilerRT},
- Env: slices.Concat(env, []string{
+ Env: stage3ExclConcat(t, []string{
"CC=clang",
"LIBCC=/system/lib/clang/21/lib/" +
triplet() + "/libclang_rt.builtins.a",
"AR=ar",
"RANLIB=ranlib",
- }),
+ },
+ "LDFLAGS="+earlyLDFLAGS(false),
+ ),
})
runtimes = t.newLLVM("runtimes", &llvmAttr{
- env: env,
+ env: stage3ExclConcat(t, []string{},
+ "LDFLAGS="+earlyLDFLAGS(false),
+ ),
flags: llvmRuntimeLibunwind | llvmRuntimeLibcxx | llvmRuntimeLibcxxABI,
cmake: slices.Concat([][2]string{
// libc++ not yet available
@@ -314,17 +310,13 @@ ln -s \
},
})
- var clangExtraEnv []string
- if t == toolchainStage3 {
- clangExtraEnv = []string{
- "CFLAGS=" + earlyCFLAGS,
- "CXXFLAGS=" + earlyCXXFLAGS(),
- }
- }
-
clang = t.newLLVM("clang", &llvmAttr{
flags: llvmProjectClang | llvmProjectLld,
- env: slices.Concat(clangExtraEnv, env),
+ env: stage3ExclConcat(t, []string{},
+ "CFLAGS="+earlyCFLAGS,
+ "CXXFLAGS="+earlyCXXFLAGS(),
+ "LDFLAGS="+earlyLDFLAGS(false),
+ ),
cmake: slices.Concat([][2]string{
{"LLVM_TARGETS_TO_BUILD", target},
{"CMAKE_CROSSCOMPILING", "OFF"},
diff --git a/internal/rosa/musl.go b/internal/rosa/musl.go
index 41760758..c9945d19 100644
--- a/internal/rosa/musl.go
+++ b/internal/rosa/musl.go
@@ -41,16 +41,8 @@ rmdir -v /work/lib
script = ""
}
- extra := []pkg.Artifact{
+ return t.New("musl-"+version, stage3Concat(t, attr.Extra,
t.NewMake(),
- }
- if t == toolchainStage3 {
- extra = nil
- }
-
- return t.New("musl-"+version, slices.Concat(
- attr.Extra,
- extra,
), nil, slices.Concat([]string{
"ROSA_MUSL_TARGET=" + target,
}, attr.Env), `
diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go
index 06f73c67..c3b6a3ed 100644
--- a/internal/rosa/rosa.go
+++ b/internal/rosa/rosa.go
@@ -116,6 +116,24 @@ const (
Std
)
+// stage3Concat concatenates s and values. If the current toolchain is
+// toolchainStage3, stage3Concat returns s as is.
+func stage3Concat[S ~[]E, E any](t Toolchain, s S, values ...E) S {
+ if t == toolchainStage3 {
+ return s
+ }
+ return slices.Concat(s, values)
+}
+
+// stage3ExclConcat concatenates s and values. If the current toolchain is not
+// toolchainStage3, stage3ExclConcat returns s as is.
+func stage3ExclConcat[S ~[]E, E any](t Toolchain, s S, values ...E) S {
+ if t == toolchainStage3 {
+ 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 {