diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-07-14 21:45:07 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-07-14 21:45:07 +0900 |
| commit | 098943ab469be1d95a5555650397d4894f67570e (patch) | |
| tree | 59db3d34d657846493e1631827783b40935143b4 | |
| parent | fb3df67ba65b22bed520b6bb570ad54608623377 (diff) | |
internal/rosa/meson: optionally use muon
This is a much faster implementation free of python dependency hell, however currently fails to handle symbol visibility correctly, so unable to default to on. This change also cleans up some meson arguments.
Signed-off-by: Ophestra <cat@gensokyo.uk>
| -rw-r--r-- | internal/rosa/meson.go | 59 | ||||
| -rw-r--r-- | internal/rosa/package/muon.az | 4 | ||||
| -rw-r--r-- | internal/rosa/state.go | 1 |
3 files changed, 48 insertions, 16 deletions
diff --git a/internal/rosa/meson.go b/internal/rosa/meson.go index d6f9b1fb..569db9b7 100644 --- a/internal/rosa/meson.go +++ b/internal/rosa/meson.go @@ -5,10 +5,16 @@ import ( "strings" ) -var _meson = H("meson") +var ( + _muon = H("muon") + _meson = H("meson") +) // MesonHelper builds and tests a meson project. type MesonHelper struct { + // Use muon instead of meson. + Muon bool + // Runs after setup. ScriptCompileEarly string // Runs after compile. @@ -29,7 +35,12 @@ type MesonHelper struct { var _ Helper = new(MesonHelper) // extra returns hardcoded meson runtime dependencies. -func (*MesonHelper) extra(int) P { return P{_meson} } +func (attr *MesonHelper) extra(int) P { + if !attr.isPython() { + return P{_muon} + } + return P{_meson} +} // wantsChmod returns false. func (*MesonHelper) wantsChmod() bool { return false } @@ -43,6 +54,12 @@ func (*MesonHelper) scriptEarly() string { return "" } // wantsDir requests a new directory in TMPDIR. func (*MesonHelper) wantsDir() (string, bool) { return `"$(mktemp -d)"`, false } +// isPython returns whether the legacy python implementation is used. +func (attr *MesonHelper) isPython() bool { + return attr != nil && + (!attr.Muon || len(attr.SkipTests) != 0 || attr.InteractiveTest) +} + // script generates the cure script. func (attr *MesonHelper) script(t Toolchain, name string) string { if attr == nil { @@ -54,13 +71,28 @@ func (attr *MesonHelper) script(t Toolchain, name string) string { scriptCompiled = "\n" + scriptCompiled } + python := attr.isPython() + muon := "muon" + compile := " samu " + jobsFlagE + destdir := "-d" + if python { + muon = "meson" + compile = " compile " + jobsFlagE + " " + loadFlagE + destdir = "--destdir" + } + var scriptTest string if !attr.SkipTest && t.opts&OptSkipCheck == 0 { scriptTest = ` -meson test \ +` + muon + ` test \ ` + jobsFlagE + ` \ - -t 10 \ + -t 10` + if python { + scriptTest += ` \ --print-errorlogs` + } else { + scriptTest += " -Rv" + } if attr.InteractiveTest { scriptTest += ` \ --interactive` @@ -71,13 +103,12 @@ meson test \ } return ` -cd "$(mktemp -d)" -meson setup \ +` + muon + ` setup \ ` + strings.Join(slices.Collect(func(yield func(string) bool) { for _, v := range append([]KV{ - {"wrap-mode", "nofallback"}, - {"prefix", "/system"}, - {"buildtype", "release"}, + {"Dwrap_mode", "nofallback"}, + {"Dprefix", "/system"}, + {"Dbuildtype", "release"}, }, attr.Setup...) { s := "-" + v[0] if len(v[0]) > 0 && v[0][0] != 'D' { @@ -91,11 +122,9 @@ meson setup \ } } }), " \\\n\t") + ` \ - . '/usr/src/` + name + `' -meson compile \ - ` + jobsFlagE + ` \ - ` + loadFlagE + scriptCompiled + scriptTest + ` -meson install \ - --destdir=/work + '/usr/src/` + name + `' +` + muon + compile + scriptCompiled + scriptTest + ` +` + muon + ` install \ + ` + destdir + ` /work ` + attr.Script } diff --git a/internal/rosa/package/muon.az b/internal/rosa/package/muon.az index a5c8cda4..512844a9 100644 --- a/internal/rosa/package/muon.az +++ b/internal/rosa/package/muon.az @@ -49,7 +49,7 @@ sed -i '/common.220 fs module/d' subprojects/meson-tests/meson.build /usr/src/muon /boot/muon-bootstrap samu `+jobsFlagE+` `; - check = "./muon test "+jobsFlagE+" -R\n"; + check = "./muon test "+jobsFlagE+" -Rv\n"; install = "./muon install -d /work\n"; }; @@ -57,4 +57,6 @@ sed -i '/common.220 fs module/d' subprojects/meson-tests/meson.build python-early, kernel-headers, ]; + + runtime = [ pkg-config ]; } diff --git a/internal/rosa/state.go b/internal/rosa/state.go index 12a9d9e2..a14f4a5d 100644 --- a/internal/rosa/state.go +++ b/internal/rosa/state.go @@ -878,6 +878,7 @@ func (s *S) getFrame() azalea.Frame { ) (v any, set bool, err error) { var attr MesonHelper if err = args.Apply(map[unique.Handle[azalea.Ident]]any{ + k("muon"): &attr.Muon, k("preCompile"): &attr.ScriptCompileEarly, k("postCompile"): &attr.ScriptCompiled, k("postInstall"): &attr.Script, |
