internal/rosa: stage3 special case helper
All checks were successful
Test / Create distribution (push) Successful in 49s
Test / Sandbox (push) Successful in 2m42s
Test / Hakurei (push) Successful in 3m48s
Test / ShareFS (push) Successful in 3m58s
Test / Hpkg (push) Successful in 4m30s
Test / Sandbox (race detector) (push) Successful in 5m1s
Test / Hakurei (race detector) (push) Successful in 5m54s
Test / Flake checks (push) Successful in 1m40s
All checks were successful
Test / Create distribution (push) Successful in 49s
Test / Sandbox (push) Successful in 2m42s
Test / Hakurei (push) Successful in 3m48s
Test / ShareFS (push) Successful in 3m58s
Test / Hpkg (push) Successful in 4m30s
Test / Sandbox (race detector) (push) Successful in 5m1s
Test / Hakurei (race detector) (push) Successful in 5m54s
Test / Flake checks (push) Successful in 1m40s
This makes it cleaner to specify non-stage3 and stage3-exclusive dependencies. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -108,18 +108,15 @@ func (t Toolchain) NewBusybox() pkg.Artifact {
|
|||||||
checksum = "Ial94Tnt7esJ_YEeb0AxunVL6MGYFyOw7Rtu2o87CXCi1TLrc6rlznVsN1rZk7it"
|
checksum = "Ial94Tnt7esJ_YEeb0AxunVL6MGYFyOw7Rtu2o87CXCi1TLrc6rlznVsN1rZk7it"
|
||||||
)
|
)
|
||||||
|
|
||||||
extra := []pkg.Artifact{
|
|
||||||
t.NewMake(),
|
|
||||||
t.NewKernelHeaders(),
|
|
||||||
}
|
|
||||||
var env []string
|
var env []string
|
||||||
|
|
||||||
if t == toolchainStage3 {
|
if t == toolchainStage3 {
|
||||||
extra = nil
|
|
||||||
env = append(env, "EXTRA_LDFLAGS=-static")
|
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{
|
"ROSA_BUSYBOX_ENABLE=" + strings.Join([]string{
|
||||||
"STATIC",
|
"STATIC",
|
||||||
"PIE",
|
"PIE",
|
||||||
|
|||||||
@@ -81,14 +81,6 @@ func (t Toolchain) NewViaCMake(
|
|||||||
panic("CACHE must be non-empty")
|
panic("CACHE must be non-empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
cmakeExtras := []pkg.Artifact{
|
|
||||||
t.NewCMake(),
|
|
||||||
t.NewNinja(),
|
|
||||||
}
|
|
||||||
if t == toolchainStage3 {
|
|
||||||
cmakeExtras = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
scriptEarly := attr.ScriptEarly
|
scriptEarly := attr.ScriptEarly
|
||||||
if attr.Writable {
|
if attr.Writable {
|
||||||
scriptEarly = `
|
scriptEarly = `
|
||||||
@@ -102,9 +94,9 @@ chmod -R +w "${ROSA_SOURCE}"
|
|||||||
}
|
}
|
||||||
|
|
||||||
sourcePath := AbsUsrSrc.Append(name)
|
sourcePath := AbsUsrSrc.Append(name)
|
||||||
return t.New(name+"-"+variant+"-"+version, slices.Concat(
|
return t.New(name+"-"+variant+"-"+version, stage3Concat(t, attr.Extra,
|
||||||
attr.Extra,
|
t.NewCMake(),
|
||||||
cmakeExtras,
|
t.NewNinja(),
|
||||||
), nil, slices.Concat([]string{
|
), nil, slices.Concat([]string{
|
||||||
"ROSA_SOURCE=" + sourcePath.String(),
|
"ROSA_SOURCE=" + sourcePath.String(),
|
||||||
"ROSA_CMAKE_SOURCE=" + sourcePath.Append(attr.Append...).String(),
|
"ROSA_CMAKE_SOURCE=" + sourcePath.Append(attr.Append...).String(),
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ func (t Toolchain) NewGit() pkg.Artifact {
|
|||||||
version = "2.52.0"
|
version = "2.52.0"
|
||||||
checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS"
|
checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS"
|
||||||
)
|
)
|
||||||
extra := []pkg.Artifact{
|
return t.New("git-"+version, stage3Concat(t, []pkg.Artifact{},
|
||||||
t.NewMake(),
|
t.NewMake(),
|
||||||
t.NewPerl(),
|
t.NewPerl(),
|
||||||
t.NewM4(),
|
t.NewM4(),
|
||||||
@@ -18,11 +18,7 @@ func (t Toolchain) NewGit() pkg.Artifact {
|
|||||||
t.NewGettext(),
|
t.NewGettext(),
|
||||||
|
|
||||||
t.NewZlib(),
|
t.NewZlib(),
|
||||||
}
|
), nil, nil, `
|
||||||
if t == toolchainStage3 {
|
|
||||||
extra = nil
|
|
||||||
}
|
|
||||||
return t.New("git-"+version, extra, nil, nil, `
|
|
||||||
chmod -R +w /usr/src/git && cd /usr/src/git
|
chmod -R +w /usr/src/git && cd /usr/src/git
|
||||||
make configure
|
make configure
|
||||||
./configure --prefix=/system
|
./configure --prefix=/system
|
||||||
|
|||||||
@@ -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 {
|
if attr.flags&llvmProjectClang != 0 {
|
||||||
cache = append(cache,
|
cache = append(cache,
|
||||||
[2]string{"CLANG_DEFAULT_LINKER", "lld"},
|
[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)
|
patches[0] = pkg.Path(AbsUsrSrc.Append("llvmorg"), false, source)
|
||||||
if len(patches) > 1 {
|
if len(patches) > 1 {
|
||||||
source = t.New(
|
source = t.New(
|
||||||
"llvmorg-patched", nil, nil, nil, `
|
"llvmorg-patched", stage3Concat(t, []pkg.Artifact{},
|
||||||
|
t.NewPatch(),
|
||||||
|
), nil, nil, `
|
||||||
cp -r /usr/src/llvmorg/. /work/.
|
cp -r /usr/src/llvmorg/. /work/.
|
||||||
chmod -R +w /work && cd /work
|
chmod -R +w /work && cd /work
|
||||||
cat /usr/src/llvm-patches/* | patch -p 1
|
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{
|
return t.NewViaCMake("llvm", version, variant, source, &CMakeAttr{
|
||||||
Cache: slices.Concat(cache, attr.cmake),
|
Cache: slices.Concat(cache, attr.cmake),
|
||||||
Append: cmakeAppend,
|
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,
|
Prefix: attr.prefix,
|
||||||
|
|
||||||
Env: slices.Concat([]string{
|
Env: slices.Concat([]string{
|
||||||
@@ -239,15 +236,10 @@ func (t Toolchain) NewLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) {
|
|||||||
{"LLVM_ENABLE_LIBXML2", "OFF"},
|
{"LLVM_ENABLE_LIBXML2", "OFF"},
|
||||||
}
|
}
|
||||||
|
|
||||||
var env []string
|
|
||||||
if t == toolchainStage3 {
|
|
||||||
env = []string{
|
|
||||||
"LDFLAGS=" + earlyLDFLAGS(false),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compilerRT = t.newLLVM("compiler-rt", &llvmAttr{
|
compilerRT = t.newLLVM("compiler-rt", &llvmAttr{
|
||||||
env: env,
|
env: stage3ExclConcat(t, []string{},
|
||||||
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
|
),
|
||||||
cmake: [][2]string{
|
cmake: [][2]string{
|
||||||
// libc++ not yet available
|
// libc++ not yet available
|
||||||
{"CMAKE_CXX_COMPILER_TARGET", ""},
|
{"CMAKE_CXX_COMPILER_TARGET", ""},
|
||||||
@@ -288,17 +280,21 @@ ln -s \
|
|||||||
|
|
||||||
musl = t.NewMusl(&MuslAttr{
|
musl = t.NewMusl(&MuslAttr{
|
||||||
Extra: []pkg.Artifact{compilerRT},
|
Extra: []pkg.Artifact{compilerRT},
|
||||||
Env: slices.Concat(env, []string{
|
Env: stage3ExclConcat(t, []string{
|
||||||
"CC=clang",
|
"CC=clang",
|
||||||
"LIBCC=/system/lib/clang/21/lib/" +
|
"LIBCC=/system/lib/clang/21/lib/" +
|
||||||
triplet() + "/libclang_rt.builtins.a",
|
triplet() + "/libclang_rt.builtins.a",
|
||||||
"AR=ar",
|
"AR=ar",
|
||||||
"RANLIB=ranlib",
|
"RANLIB=ranlib",
|
||||||
}),
|
},
|
||||||
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
|
),
|
||||||
})
|
})
|
||||||
|
|
||||||
runtimes = t.newLLVM("runtimes", &llvmAttr{
|
runtimes = t.newLLVM("runtimes", &llvmAttr{
|
||||||
env: env,
|
env: stage3ExclConcat(t, []string{},
|
||||||
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
|
),
|
||||||
flags: llvmRuntimeLibunwind | llvmRuntimeLibcxx | llvmRuntimeLibcxxABI,
|
flags: llvmRuntimeLibunwind | llvmRuntimeLibcxx | llvmRuntimeLibcxxABI,
|
||||||
cmake: slices.Concat([][2]string{
|
cmake: slices.Concat([][2]string{
|
||||||
// libc++ not yet available
|
// 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{
|
clang = t.newLLVM("clang", &llvmAttr{
|
||||||
flags: llvmProjectClang | llvmProjectLld,
|
flags: llvmProjectClang | llvmProjectLld,
|
||||||
env: slices.Concat(clangExtraEnv, env),
|
env: stage3ExclConcat(t, []string{},
|
||||||
|
"CFLAGS="+earlyCFLAGS,
|
||||||
|
"CXXFLAGS="+earlyCXXFLAGS(),
|
||||||
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
|
),
|
||||||
cmake: slices.Concat([][2]string{
|
cmake: slices.Concat([][2]string{
|
||||||
{"LLVM_TARGETS_TO_BUILD", target},
|
{"LLVM_TARGETS_TO_BUILD", target},
|
||||||
{"CMAKE_CROSSCOMPILING", "OFF"},
|
{"CMAKE_CROSSCOMPILING", "OFF"},
|
||||||
|
|||||||
@@ -41,16 +41,8 @@ rmdir -v /work/lib
|
|||||||
script = ""
|
script = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
extra := []pkg.Artifact{
|
return t.New("musl-"+version, stage3Concat(t, attr.Extra,
|
||||||
t.NewMake(),
|
t.NewMake(),
|
||||||
}
|
|
||||||
if t == toolchainStage3 {
|
|
||||||
extra = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return t.New("musl-"+version, slices.Concat(
|
|
||||||
attr.Extra,
|
|
||||||
extra,
|
|
||||||
), nil, slices.Concat([]string{
|
), nil, slices.Concat([]string{
|
||||||
"ROSA_MUSL_TARGET=" + target,
|
"ROSA_MUSL_TARGET=" + target,
|
||||||
}, attr.Env), `
|
}, attr.Env), `
|
||||||
|
|||||||
@@ -116,6 +116,24 @@ const (
|
|||||||
Std
|
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].
|
// lastIndexFunc is like [strings.LastIndexFunc] but for [slices].
|
||||||
func lastIndexFunc[S ~[]E, E any](s S, f func(E) bool) (i int) {
|
func lastIndexFunc[S ~[]E, E any](s S, f func(E) bool) (i int) {
|
||||||
if i = slices.IndexFunc(s, f); i < 0 {
|
if i = slices.IndexFunc(s, f); i < 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user