internal/rosa: global preset flags
All checks were successful
Test / Create distribution (push) Successful in 1m31s
Test / Sandbox (push) Successful in 5m8s
Test / Hakurei (push) Successful in 7m31s
Test / Sandbox (race detector) (push) Successful in 8m6s
Test / ShareFS (push) Successful in 8m28s
Test / Hakurei (race detector) (push) Successful in 11m8s
Test / Flake checks (push) Successful in 2m41s

These changes preset behaviour globally. Useful for ad hoc workarounds for development or bootstrapping on resource-constrained systems.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-05-01 03:42:14 +09:00
parent fc66f0bb47
commit 445d95023b
8 changed files with 52 additions and 9 deletions

View File

@@ -322,15 +322,29 @@ var (
}
// artifactsOnce is for lazy initialisation of artifacts.
artifactsOnce [_toolchainEnd][len(artifactsM)]sync.Once
// presetOpts globally modifies behaviour of presets.
presetOpts int
)
const (
// OptSkipCheck skips running all test suites.
OptSkipCheck = 1 << iota
// OptLLVMNoLTO disables LTO in all [LLVM] stages.
OptLLVMNoLTO
)
// Flags returns the current preset flags
func Flags() int { return presetOpts }
// zero zeros the value pointed to by p.
func zero[T any](p *T) { var v T; *p = v }
// DropCaches arranges for all cached [pkg.Artifact] to be freed some time after
// it returns. Must not be used concurrently with any other function from this
// package.
func DropCaches() {
func DropCaches(flags int) {
presetOpts = flags
zero(&artifacts)
zero(&artifactsOnce)
}

View File

@@ -20,13 +20,16 @@ func TestLoad(t *testing.T) {
}
func BenchmarkAll(b *testing.B) {
flags := rosa.Flags()
b.Cleanup(func() { rosa.DropCaches(flags) })
for b.Loop() {
for i := range rosa.PresetEnd {
rosa.Std.Load(rosa.PArtifact(i))
}
b.StopTimer()
rosa.DropCaches()
rosa.DropCaches(0)
b.StartTimer()
}
}

View File

@@ -185,7 +185,7 @@ func (attr *CMakeHelper) script(name string) string {
}
script := attr.Script
if !attr.SkipTest {
if !attr.SkipTest && presetOpts&OptSkipCheck == 0 {
script += "\n" + test
}

View File

@@ -90,10 +90,14 @@ func (t Toolchain) newLLVM() (pkg.Artifact, string) {
skipChecks[i] = s
}
cache = append(cache, []KV{
// very expensive
{"LLVM_ENABLE_LTO", "Thin"},
if presetOpts&OptLLVMNoLTO == 0 {
cache = append(cache, []KV{
// very expensive
{"LLVM_ENABLE_LTO", "Thin"},
}...)
}
cache = append(cache, []KV{
// symbols: clock_gettime, mallopt
{"COMPILER_RT_INCLUDE_TESTS", "OFF"},

View File

@@ -194,7 +194,7 @@ make \
}
scriptMake += "\n"
if !attr.SkipCheck {
if !attr.SkipCheck && presetOpts&OptSkipCheck == 0 {
scriptMake += attr.ScriptCheckEarly + `make \
` + jobsFlagE + ` \
`

View File

@@ -117,7 +117,7 @@ func (attr *MesonHelper) script(name string) string {
}
var scriptTest string
if !attr.SkipTest {
if !attr.SkipTest && presetOpts&OptSkipCheck == 0 {
scriptTest = `
meson test \
--print-errorlogs`

View File

@@ -93,11 +93,14 @@ func TestCureAll(t *testing.T) {
}
func BenchmarkStage3(b *testing.B) {
flags := rosa.Flags()
b.Cleanup(func() { rosa.DropCaches(flags) })
for b.Loop() {
rosa.Std.Load(rosa.LLVM)
b.StopTimer()
rosa.DropCaches()
rosa.DropCaches(0)
b.StartTimer()
}
}