internal/rosa/llvm: migrate runtimes and clang
All checks were successful
Test / Create distribution (push) Successful in 1m56s
Test / ShareFS (push) Successful in 8m1s
Test / Sandbox (race detector) (push) Successful in 8m31s
Test / Hakurei (race detector) (push) Successful in 9m57s
Test / Sandbox (push) Successful in 2m13s
Test / Hakurei (push) Successful in 3m17s
Test / Flake checks (push) Successful in 1m38s
All checks were successful
Test / Create distribution (push) Successful in 1m56s
Test / ShareFS (push) Successful in 8m1s
Test / Sandbox (race detector) (push) Successful in 8m31s
Test / Hakurei (race detector) (push) Successful in 9m57s
Test / Sandbox (push) Successful in 2m13s
Test / Hakurei (push) Successful in 3m17s
Test / Flake checks (push) Successful in 1m38s
This eliminates most newLLVM family of functions. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -396,24 +396,27 @@ func main() {
|
|||||||
rosa.SetGentooStage3(flagGentoo, checksum)
|
rosa.SetGentooStage3(flagGentoo, checksum)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, stage1 := (t - 2).NewLLVM()
|
|
||||||
_, stage2 := (t - 1).NewLLVM()
|
|
||||||
_, stage3 := t.NewLLVM()
|
|
||||||
var (
|
var (
|
||||||
pathname *check.Absolute
|
pathname *check.Absolute
|
||||||
checksum [2]unique.Handle[pkg.Checksum]
|
checksum [2]unique.Handle[pkg.Checksum]
|
||||||
)
|
)
|
||||||
|
|
||||||
if pathname, _, err = cache.Cure(stage1); err != nil {
|
if pathname, _, err = cache.Cure(
|
||||||
|
(t - 2).Load(rosa.LLVMClang),
|
||||||
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Println("stage1:", pathname)
|
log.Println("stage1:", pathname)
|
||||||
|
|
||||||
if pathname, checksum[0], err = cache.Cure(stage2); err != nil {
|
if pathname, checksum[0], err = cache.Cure(
|
||||||
|
(t - 1).Load(rosa.LLVMClang),
|
||||||
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Println("stage2:", pathname)
|
log.Println("stage2:", pathname)
|
||||||
if pathname, checksum[1], err = cache.Cure(stage3); err != nil {
|
if pathname, checksum[1], err = cache.Cure(
|
||||||
|
t.Load(rosa.LLVMClang),
|
||||||
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Println("stage3:", pathname)
|
log.Println("stage3:", pathname)
|
||||||
@@ -565,7 +568,7 @@ func main() {
|
|||||||
"shell",
|
"shell",
|
||||||
"Interactive shell in the specified Rosa OS environment",
|
"Interactive shell in the specified Rosa OS environment",
|
||||||
func(args []string) error {
|
func(args []string) error {
|
||||||
presets := make([]rosa.PArtifact, len(args))
|
presets := make([]rosa.PArtifact, len(args)+3)
|
||||||
for i, arg := range args {
|
for i, arg := range args {
|
||||||
p, ok := rosa.ResolveName(arg)
|
p, ok := rosa.ResolveName(arg)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -573,25 +576,20 @@ func main() {
|
|||||||
}
|
}
|
||||||
presets[i] = p
|
presets[i] = p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base := rosa.LLVMClang
|
||||||
|
if !flagWithToolchain {
|
||||||
|
base = rosa.Musl
|
||||||
|
}
|
||||||
|
presets = append(presets,
|
||||||
|
base,
|
||||||
|
rosa.Mksh,
|
||||||
|
rosa.Toybox,
|
||||||
|
)
|
||||||
|
|
||||||
root := make(pkg.Collect, 0, 6+len(args))
|
root := make(pkg.Collect, 0, 6+len(args))
|
||||||
root = rosa.Std.AppendPresets(root, presets...)
|
root = rosa.Std.AppendPresets(root, presets...)
|
||||||
|
|
||||||
if flagWithToolchain {
|
|
||||||
boot := rosa.Std - 1
|
|
||||||
runtimes, clang := boot.NewLLVM()
|
|
||||||
root = append(root,
|
|
||||||
boot.Load(rosa.Musl),
|
|
||||||
boot.Load(rosa.LLVMCompilerRT),
|
|
||||||
runtimes, clang,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
root = append(root, rosa.Std.Load(rosa.Musl))
|
|
||||||
}
|
|
||||||
root = append(root,
|
|
||||||
rosa.Std.Load(rosa.Mksh),
|
|
||||||
rosa.Std.Load(rosa.Toybox),
|
|
||||||
)
|
|
||||||
|
|
||||||
if _, _, err := cache.Cure(&root); err == nil {
|
if _, _, err := cache.Cure(&root); err == nil {
|
||||||
return errors.New("unreachable")
|
return errors.New("unreachable")
|
||||||
} else if !pkg.IsCollected(err) {
|
} else if !pkg.IsCollected(err) {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package rosa
|
|||||||
import (
|
import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"slices"
|
"slices"
|
||||||
"sync"
|
|
||||||
|
|
||||||
"hakurei.app/internal/pkg"
|
"hakurei.app/internal/pkg"
|
||||||
)
|
)
|
||||||
@@ -130,40 +129,26 @@ func init() {
|
|||||||
Name: "llvm-compiler-rt",
|
Name: "llvm-compiler-rt",
|
||||||
Description: "LLVM runtime: compiler-rt",
|
Description: "LLVM runtime: compiler-rt",
|
||||||
Website: "https://llvm.org/",
|
Website: "https://llvm.org/",
|
||||||
|
|
||||||
|
Dependencies: P{
|
||||||
|
Musl,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// newLLVM returns LLVM toolchain across multiple [pkg.Artifact].
|
func (t Toolchain) newLLVMRuntimes() (pkg.Artifact, string) {
|
||||||
func (t Toolchain) newLLVM() (runtimes, clang pkg.Artifact) {
|
return t.NewPackage("llvm", llvmVersion, llvmSource, &PackageAttr{
|
||||||
target := "'AArch64;RISCV;X86'"
|
Patches: llvmPatches,
|
||||||
if t.isStage0() {
|
NonStage0: t.AppendPresets(nil, LLVMCompilerRT),
|
||||||
switch runtime.GOARCH {
|
Env: stage0ExclConcat(t, []string{},
|
||||||
case "386", "amd64":
|
|
||||||
target = "X86"
|
|
||||||
case "arm64":
|
|
||||||
target = "AArch64"
|
|
||||||
case "riscv64":
|
|
||||||
target = "RISCV"
|
|
||||||
|
|
||||||
default:
|
|
||||||
panic("unsupported target " + runtime.GOARCH)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
minimalDeps := []KV{
|
|
||||||
{"LLVM_ENABLE_ZLIB", "OFF"},
|
|
||||||
{"LLVM_ENABLE_ZSTD", "OFF"},
|
|
||||||
{"LLVM_ENABLE_LIBXML2", "OFF"},
|
|
||||||
}
|
|
||||||
|
|
||||||
compilerRT := t.Load(LLVMCompilerRT)
|
|
||||||
musl := t.Load(Musl)
|
|
||||||
|
|
||||||
runtimes = t.newLLVMVariant("runtimes", &llvmAttr{
|
|
||||||
env: stage0ExclConcat(t, []string{},
|
|
||||||
"LDFLAGS="+earlyLDFLAGS(false),
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
),
|
),
|
||||||
cmake: slices.Concat([]KV{
|
Flag: TExclusive,
|
||||||
|
}, &CMakeHelper{
|
||||||
|
Variant: "runtimes",
|
||||||
|
Append: []string{"runtimes"},
|
||||||
|
|
||||||
|
Cache: []KV{
|
||||||
{"CMAKE_BUILD_TYPE", "Release"},
|
{"CMAKE_BUILD_TYPE", "Release"},
|
||||||
|
|
||||||
{"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`},
|
{"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`},
|
||||||
@@ -181,21 +166,61 @@ func (t Toolchain) newLLVM() (runtimes, clang pkg.Artifact) {
|
|||||||
|
|
||||||
{"LIBCXX_HAS_ATOMIC_LIB", "OFF"},
|
{"LIBCXX_HAS_ATOMIC_LIB", "OFF"},
|
||||||
{"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL", "OFF"},
|
{"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL", "OFF"},
|
||||||
}, minimalDeps),
|
|
||||||
append: []string{"runtimes"},
|
|
||||||
nonStage0: []pkg.Artifact{
|
|
||||||
compilerRT,
|
|
||||||
musl,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
clang = t.newLLVMVariant("clang", &llvmAttr{
|
{"LLVM_ENABLE_ZLIB", "OFF"},
|
||||||
env: stage0ExclConcat(t, []string{},
|
{"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{
|
||||||
|
LLVMCompilerRT,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Toolchain) newLLVMClang() (pkg.Artifact, string) {
|
||||||
|
target := "'AArch64;RISCV;X86'"
|
||||||
|
if t.isStage0() {
|
||||||
|
switch runtime.GOARCH {
|
||||||
|
case "386", "amd64":
|
||||||
|
target = "X86"
|
||||||
|
case "arm64":
|
||||||
|
target = "AArch64"
|
||||||
|
case "riscv64":
|
||||||
|
target = "RISCV"
|
||||||
|
|
||||||
|
default:
|
||||||
|
panic("unsupported target " + runtime.GOARCH)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return t.NewPackage("llvm", llvmVersion, llvmSource, &PackageAttr{
|
||||||
|
Patches: llvmPatches,
|
||||||
|
NonStage0: t.AppendPresets(nil, LLVMRuntimes),
|
||||||
|
Env: stage0ExclConcat(t, []string{},
|
||||||
"CFLAGS="+earlyCFLAGS,
|
"CFLAGS="+earlyCFLAGS,
|
||||||
"CXXFLAGS="+earlyCXXFLAGS(),
|
"CXXFLAGS="+earlyCXXFLAGS(),
|
||||||
"LDFLAGS="+earlyLDFLAGS(false),
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
),
|
),
|
||||||
cmake: slices.Concat([]KV{
|
Flag: TExclusive,
|
||||||
|
}, &CMakeHelper{
|
||||||
|
Variant: "clang",
|
||||||
|
Append: []string{"llvm"},
|
||||||
|
|
||||||
|
Cache: []KV{
|
||||||
{"CMAKE_BUILD_TYPE", "Release"},
|
{"CMAKE_BUILD_TYPE", "Release"},
|
||||||
|
|
||||||
{"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`},
|
{"LLVM_HOST_TRIPLE", `"${ROSA_TRIPLE}"`},
|
||||||
@@ -218,13 +243,12 @@ func (t Toolchain) newLLVM() (runtimes, clang pkg.Artifact) {
|
|||||||
{"LLVM_TARGETS_TO_BUILD", target},
|
{"LLVM_TARGETS_TO_BUILD", target},
|
||||||
{"CMAKE_CROSSCOMPILING", "OFF"},
|
{"CMAKE_CROSSCOMPILING", "OFF"},
|
||||||
{"CXX_SUPPORTS_CUSTOM_LINKER", "ON"},
|
{"CXX_SUPPORTS_CUSTOM_LINKER", "ON"},
|
||||||
}, minimalDeps),
|
|
||||||
nonStage0: []pkg.Artifact{
|
{"LLVM_ENABLE_ZLIB", "OFF"},
|
||||||
musl,
|
{"LLVM_ENABLE_ZSTD", "OFF"},
|
||||||
compilerRT,
|
{"LLVM_ENABLE_LIBXML2", "OFF"},
|
||||||
runtimes,
|
|
||||||
},
|
},
|
||||||
script: `
|
Script: `
|
||||||
ln -s ld.lld /work/system/bin/ld
|
ln -s ld.lld /work/system/bin/ld
|
||||||
|
|
||||||
ln -s clang /work/system/bin/cc
|
ln -s clang /work/system/bin/cc
|
||||||
@@ -232,32 +256,30 @@ ln -s clang++ /work/system/bin/c++
|
|||||||
|
|
||||||
ninja check-all
|
ninja check-all
|
||||||
`,
|
`,
|
||||||
})
|
},
|
||||||
|
Python,
|
||||||
|
Perl,
|
||||||
|
Diffutils,
|
||||||
|
Bash,
|
||||||
|
Gawk,
|
||||||
|
Coreutils,
|
||||||
|
Findutils,
|
||||||
|
|
||||||
return
|
KernelHeaders,
|
||||||
|
), llvmVersion
|
||||||
}
|
}
|
||||||
func init() {
|
func init() {
|
||||||
artifactsM[LLVMRuntimes] = Metadata{
|
|
||||||
f: func(t Toolchain) (pkg.Artifact, string) {
|
|
||||||
runtimes, _ := t.newLLVM()
|
|
||||||
return runtimes, llvmVersion
|
|
||||||
},
|
|
||||||
|
|
||||||
Name: "llvm-runtimes",
|
|
||||||
Description: "LLVM runtimes: libunwind, libcxx, libcxxabi",
|
|
||||||
Website: "https://llvm.org/",
|
|
||||||
}
|
|
||||||
|
|
||||||
artifactsM[LLVMClang] = Metadata{
|
artifactsM[LLVMClang] = Metadata{
|
||||||
f: func(t Toolchain) (pkg.Artifact, string) {
|
f: Toolchain.newLLVMClang,
|
||||||
_, clang := t.newLLVM()
|
|
||||||
return clang, llvmVersion
|
|
||||||
},
|
|
||||||
|
|
||||||
Name: "clang",
|
Name: "clang",
|
||||||
Description: `an "LLVM native" C/C++/Objective-C compiler`,
|
Description: `an "LLVM native" C/C++/Objective-C compiler`,
|
||||||
Website: "https://llvm.org/",
|
Website: "https://llvm.org/",
|
||||||
|
|
||||||
|
Dependencies: P{
|
||||||
|
LLVMRuntimes,
|
||||||
|
},
|
||||||
|
|
||||||
ID: 1830,
|
ID: 1830,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,18 +304,3 @@ func init() {
|
|||||||
Website: "https://libclc.llvm.org/",
|
Website: "https://libclc.llvm.org/",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
|
||||||
// llvm stores the result of Toolchain.newLLVM.
|
|
||||||
llvm [_toolchainEnd][2]pkg.Artifact
|
|
||||||
// llvmOnce is for lazy initialisation of llvm.
|
|
||||||
llvmOnce [_toolchainEnd]sync.Once
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewLLVM returns LLVM toolchain across multiple [pkg.Artifact].
|
|
||||||
func (t Toolchain) NewLLVM() (runtimes, clang pkg.Artifact) {
|
|
||||||
llvmOnce[t].Do(func() {
|
|
||||||
llvm[t][0], llvm[t][1] = t.newLLVM()
|
|
||||||
})
|
|
||||||
return llvm[t][0], llvm[t][1]
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -328,24 +328,23 @@ mkdir -vp /work/system/bin
|
|||||||
name += "-std"
|
name += "-std"
|
||||||
}
|
}
|
||||||
|
|
||||||
boot := t - 1
|
|
||||||
runtimes, clang := boot.NewLLVM()
|
|
||||||
toybox := Toybox
|
toybox := Toybox
|
||||||
if flag&TEarly != 0 {
|
if flag&TEarly != 0 {
|
||||||
toybox = toyboxEarly
|
toybox = toyboxEarly
|
||||||
}
|
}
|
||||||
std := []pkg.Artifact{cureEtc{newIANAEtc()}, boot.Load(Musl)}
|
|
||||||
toolchain := []pkg.Artifact{boot.Load(LLVMCompilerRT), runtimes, clang}
|
|
||||||
utils := []pkg.Artifact{
|
|
||||||
boot.Load(Mksh),
|
|
||||||
boot.Load(toybox),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
base := LLVMClang
|
||||||
if flag&TNoToolchain != 0 {
|
if flag&TNoToolchain != 0 {
|
||||||
toolchain = nil
|
base = Musl
|
||||||
}
|
}
|
||||||
|
|
||||||
support = slices.Concat(extra, std, toolchain, utils)
|
support = slices.Concat(extra, (t-1).AppendPresets([]pkg.Artifact{
|
||||||
|
cureEtc{newIANAEtc()},
|
||||||
|
},
|
||||||
|
base,
|
||||||
|
Mksh,
|
||||||
|
toybox,
|
||||||
|
))
|
||||||
env = fixupEnviron(env, []string{
|
env = fixupEnviron(env, []string{
|
||||||
EnvTriplet + "=" + triplet(),
|
EnvTriplet + "=" + triplet(),
|
||||||
lcMessages,
|
lcMessages,
|
||||||
|
|||||||
@@ -7,12 +7,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (t Toolchain) newStage0() (pkg.Artifact, string) {
|
func (t Toolchain) newStage0() (pkg.Artifact, string) {
|
||||||
runtimes, clang := t.NewLLVM()
|
|
||||||
return t.New("rosa-stage0", 0, []pkg.Artifact{
|
return t.New("rosa-stage0", 0, []pkg.Artifact{
|
||||||
t.Load(Musl),
|
t.Load(Musl),
|
||||||
t.Load(LLVMCompilerRT),
|
t.Load(LLVMCompilerRT),
|
||||||
runtimes,
|
t.Load(LLVMRuntimes),
|
||||||
clang,
|
t.Load(LLVMClang),
|
||||||
|
|
||||||
t.Load(Zlib),
|
t.Load(Zlib),
|
||||||
t.Load(Bzip2),
|
t.Load(Bzip2),
|
||||||
|
|||||||
Reference in New Issue
Block a user