aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-01 03:42:14 +0900
committerOphestra <cat@gensokyo.uk>2026-05-01 03:42:48 +0900
commit445d95023b1d9d152417838c4edad54f7bf4efe3 (patch)
tree95ba56140b93cc3220472f16a6c9e699d8c5a83e /internal/rosa
parentfc66f0bb47dd4634f81aa67bf8fc092945643520 (diff)
internal/rosa: global preset flags
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>
Diffstat (limited to 'internal/rosa')
-rw-r--r--internal/rosa/all.go16
-rw-r--r--internal/rosa/all_test.go5
-rw-r--r--internal/rosa/cmake.go2
-rw-r--r--internal/rosa/llvm.go10
-rw-r--r--internal/rosa/make.go2
-rw-r--r--internal/rosa/meson.go2
-rw-r--r--internal/rosa/rosa_test.go5
7 files changed, 33 insertions, 9 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index f61ec62f..fb745c0a 100644
--- a/internal/rosa/all.go
+++ b/internal/rosa/all.go
@@ -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)
}
diff --git a/internal/rosa/all_test.go b/internal/rosa/all_test.go
index f97ebbdf..52eabf39 100644
--- a/internal/rosa/all_test.go
+++ b/internal/rosa/all_test.go
@@ -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()
}
}
diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go
index 802a0b30..bfa035c0 100644
--- a/internal/rosa/cmake.go
+++ b/internal/rosa/cmake.go
@@ -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
}
diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go
index a7930e1b..6177a716 100644
--- a/internal/rosa/llvm.go
+++ b/internal/rosa/llvm.go
@@ -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"},
diff --git a/internal/rosa/make.go b/internal/rosa/make.go
index ecec3a5d..c283e5fb 100644
--- a/internal/rosa/make.go
+++ b/internal/rosa/make.go
@@ -194,7 +194,7 @@ make \
}
scriptMake += "\n"
- if !attr.SkipCheck {
+ if !attr.SkipCheck && presetOpts&OptSkipCheck == 0 {
scriptMake += attr.ScriptCheckEarly + `make \
` + jobsFlagE + ` \
`
diff --git a/internal/rosa/meson.go b/internal/rosa/meson.go
index 4b778a75..638074b9 100644
--- a/internal/rosa/meson.go
+++ b/internal/rosa/meson.go
@@ -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`
diff --git a/internal/rosa/rosa_test.go b/internal/rosa/rosa_test.go
index b64ebbd7..ceb7e79c 100644
--- a/internal/rosa/rosa_test.go
+++ b/internal/rosa/rosa_test.go
@@ -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()
}
}