internal/rosa: lazy initialise llvm
All checks were successful
Test / Create distribution (push) Successful in 49s
Test / Sandbox (push) Successful in 2m36s
Test / ShareFS (push) Successful in 3m57s
Test / Hakurei (push) Successful in 4m3s
Test / Hpkg (push) Successful in 4m48s
Test / Sandbox (race detector) (push) Successful in 5m1s
Test / Hakurei (race detector) (push) Successful in 5m56s
Test / Flake checks (push) Successful in 1m46s
All checks were successful
Test / Create distribution (push) Successful in 49s
Test / Sandbox (push) Successful in 2m36s
Test / ShareFS (push) Successful in 3m57s
Test / Hakurei (push) Successful in 4m3s
Test / Hpkg (push) Successful in 4m48s
Test / Sandbox (race detector) (push) Successful in 5m1s
Test / Hakurei (race detector) (push) Successful in 5m56s
Test / Flake checks (push) Successful in 1m46s
This significantly improves performance. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
|||||||
"slices"
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"hakurei.app/container/check"
|
"hakurei.app/container/check"
|
||||||
"hakurei.app/internal/pkg"
|
"hakurei.app/internal/pkg"
|
||||||
@@ -72,8 +73,8 @@ func llvmFlagName(flag int) string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// newLLVM returns a [pkg.Artifact] containing a LLVM variant.
|
// newLLVMVariant returns a [pkg.Artifact] containing a LLVM variant.
|
||||||
func (t Toolchain) newLLVM(variant string, attr *llvmAttr) pkg.Artifact {
|
func (t Toolchain) newLLVMVariant(variant string, attr *llvmAttr) pkg.Artifact {
|
||||||
const (
|
const (
|
||||||
version = "21.1.8"
|
version = "21.1.8"
|
||||||
checksum = "8SUpqDkcgwOPsqHVtmf9kXfFeVmjVxl4LMn-qSE1AI_Xoeju-9HaoPNGtidyxyka"
|
checksum = "8SUpqDkcgwOPsqHVtmf9kXfFeVmjVxl4LMn-qSE1AI_Xoeju-9HaoPNGtidyxyka"
|
||||||
@@ -219,8 +220,8 @@ cat /usr/src/llvm-patches/* | patch -p 1
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewLLVM returns LLVM toolchain across multiple [pkg.Artifact].
|
// newLLVM returns LLVM toolchain across multiple [pkg.Artifact].
|
||||||
func (t Toolchain) NewLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) {
|
func (t Toolchain) newLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) {
|
||||||
var target string
|
var target string
|
||||||
switch runtime.GOARCH {
|
switch runtime.GOARCH {
|
||||||
case "386", "amd64":
|
case "386", "amd64":
|
||||||
@@ -236,7 +237,7 @@ func (t Toolchain) NewLLVM() (musl, compilerRT, runtimes, clang pkg.Artifact) {
|
|||||||
{"LLVM_ENABLE_LIBXML2", "OFF"},
|
{"LLVM_ENABLE_LIBXML2", "OFF"},
|
||||||
}
|
}
|
||||||
|
|
||||||
compilerRT = t.newLLVM("compiler-rt", &llvmAttr{
|
compilerRT = t.newLLVMVariant("compiler-rt", &llvmAttr{
|
||||||
env: stage3ExclConcat(t, []string{},
|
env: stage3ExclConcat(t, []string{},
|
||||||
"LDFLAGS="+earlyLDFLAGS(false),
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
),
|
),
|
||||||
@@ -291,7 +292,7 @@ ln -s \
|
|||||||
),
|
),
|
||||||
})
|
})
|
||||||
|
|
||||||
runtimes = t.newLLVM("runtimes", &llvmAttr{
|
runtimes = t.newLLVMVariant("runtimes", &llvmAttr{
|
||||||
env: stage3ExclConcat(t, []string{},
|
env: stage3ExclConcat(t, []string{},
|
||||||
"LDFLAGS="+earlyLDFLAGS(false),
|
"LDFLAGS="+earlyLDFLAGS(false),
|
||||||
),
|
),
|
||||||
@@ -310,7 +311,7 @@ ln -s \
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
clang = t.newLLVM("clang", &llvmAttr{
|
clang = t.newLLVMVariant("clang", &llvmAttr{
|
||||||
flags: llvmProjectClang | llvmProjectLld,
|
flags: llvmProjectClang | llvmProjectLld,
|
||||||
env: stage3ExclConcat(t, []string{},
|
env: stage3ExclConcat(t, []string{},
|
||||||
"CFLAGS="+earlyCFLAGS,
|
"CFLAGS="+earlyCFLAGS,
|
||||||
@@ -459,3 +460,18 @@ index 64324a3f8b01..15ce70b68217 100644
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// llvm stores the result of Toolchain.newLLVM.
|
||||||
|
llvm [_toolchainEnd][4]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() (musl, compilerRT, runtimes, clang pkg.Artifact) {
|
||||||
|
llvmOnce[t].Do(func() {
|
||||||
|
llvm[t][0], llvm[t][1], llvm[t][2], llvm[t][3] = t.newLLVM()
|
||||||
|
})
|
||||||
|
return llvm[t][0], llvm[t][1], llvm[t][2], llvm[t][3]
|
||||||
|
}
|
||||||
|
|||||||
@@ -114,6 +114,10 @@ const (
|
|||||||
|
|
||||||
// Std denotes the standard Rosa OS toolchain.
|
// Std denotes the standard Rosa OS toolchain.
|
||||||
Std
|
Std
|
||||||
|
|
||||||
|
// _toolchainEnd is the total number of toolchains available and does not
|
||||||
|
// denote a valid toolchain.
|
||||||
|
_toolchainEnd
|
||||||
)
|
)
|
||||||
|
|
||||||
// stage3Concat concatenates s and values. If the current toolchain is
|
// stage3Concat concatenates s and values. If the current toolchain is
|
||||||
|
|||||||
Reference in New Issue
Block a user