aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-20 08:07:43 +0900
committerOphestra <cat@gensokyo.uk>2026-05-20 08:15:23 +0900
commitb482fd4abfb2b3765b1791915b31067a0f80fec7 (patch)
tree1cb95592a7f243aa920e3f4c497909a2e8bf9efb
parent2e502ede6c885496f4ac0a480aa4e4e337c54f51 (diff)
internal/rosa: remove global handles
These no longer serve any purpose. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--cmd/mbf/info_test.go12
-rw-r--r--cmd/mbf/main.go4
-rw-r--r--internal/rosa/bison.go6
-rw-r--r--internal/rosa/git.go2
-rw-r--r--internal/rosa/go.go8
-rw-r--r--internal/rosa/hakurei.go22
-rw-r--r--internal/rosa/images.go18
-rw-r--r--internal/rosa/llvm.go52
-rw-r--r--internal/rosa/make.go4
-rw-r--r--internal/rosa/ninja.go8
-rw-r--r--internal/rosa/nss.go22
-rw-r--r--internal/rosa/python.go5
-rw-r--r--internal/rosa/rosa.go11
-rw-r--r--internal/rosa/stage0.go6
-rw-r--r--internal/rosa/state_native.go49
-rw-r--r--internal/rosa/tamago.go4
-rw-r--r--internal/rosa/toybox.go12
17 files changed, 120 insertions, 125 deletions
diff --git a/cmd/mbf/info_test.go b/cmd/mbf/info_test.go
index 30658119..80653f20 100644
--- a/cmd/mbf/info_test.go
+++ b/cmd/mbf/info_test.go
@@ -22,12 +22,12 @@ func TestInfo(t *testing.T) {
t.Parallel()
_t := rosa.Native().Std()
- qemuMeta, _ := _t.Load(rosa.QEMU)
- glibMeta, _ := _t.Load(rosa.GLib)
- zlibMeta, zlib := _t.Load(rosa.Zlib)
- zstdMeta, _ := _t.Load(rosa.Zstd)
- hakureiMeta, _ := _t.Load(rosa.Hakurei)
- hakureiDistMeta, _ := _t.Load(rosa.HakureiDist)
+ qemuMeta, _ := _t.Load(rosa.H("qemu"))
+ glibMeta, _ := _t.Load(rosa.H("glib"))
+ zlibMeta, zlib := _t.Load(rosa.H("zlib"))
+ zstdMeta, _ := _t.Load(rosa.H("zstd"))
+ hakureiMeta, _ := _t.Load(rosa.H("hakurei"))
+ hakureiDistMeta, _ := _t.Load(rosa.H("hakurei-dist"))
testCases := []struct {
name string
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go
index 9552fc0a..f87d388f 100644
--- a/cmd/mbf/main.go
+++ b/cmd/mbf/main.go
@@ -122,7 +122,7 @@ func main() {
rosa.Native().DropCaches("", flags)
cross := flagArch != "" && flagArch != runtime.GOARCH
if flagQEMU || cross {
- _, cm.qemu = rosa.Native().Std().MustLoad(rosa.QEMU)
+ _, cm.qemu = rosa.Native().Std().MustLoad(rosa.H("qemu"))
}
if cross {
@@ -769,7 +769,7 @@ func main() {
base := rosa.LLVM
if !flagWithToolchain {
- base = rosa.Musl
+ base = rosa.H("musl")
}
handles = append(handles,
base,
diff --git a/internal/rosa/bison.go b/internal/rosa/bison.go
index 4ca95093..4a16d911 100644
--- a/internal/rosa/bison.go
+++ b/internal/rosa/bison.go
@@ -60,9 +60,9 @@ func (t Toolchain) newBison() (pkg.Artifact, string) {
"check",
},
},
- M4,
- Diffutils,
- Sed,
+ H("m4"),
+ diffutils,
+ H("sed"),
), version
}
func init() {
diff --git a/internal/rosa/git.go b/internal/rosa/git.go
index 935d1ce7..0954477f 100644
--- a/internal/rosa/git.go
+++ b/internal/rosa/git.go
@@ -19,7 +19,7 @@ func (t Toolchain) NewViaGit(
path.Base(url),
".git",
)+"-src-"+path.Base(rev), THostNet, t.Append(nil,
- NSSCACert,
+ nssCACert,
Git,
), &checksum, nil, `
git \
diff --git a/internal/rosa/go.go b/internal/rosa/go.go
index 2bde38c0..ef8a3a1c 100644
--- a/internal/rosa/go.go
+++ b/internal/rosa/go.go
@@ -6,11 +6,13 @@ import (
"hakurei.app/internal/pkg"
)
+var _go = H("go")
+
// newGoBootstrap returns the Go bootstrap toolchain.
func (t Toolchain) newGoBootstrap() pkg.Artifact {
const checksum = "8o9JL_ToiQKadCTb04nvBDkp8O1xiWOolAxVEqaTGodieNe4lOFEjlOxN3bwwe23"
return t.New("go1.4-bootstrap", 0, t.Append(nil,
- Bash,
+ bash,
), nil, []string{
"CGO_ENABLED=0",
}, `
@@ -39,7 +41,7 @@ func (t Toolchain) newGo(
name = "make"
}
return t.New("go"+version, 0, t.Append(extra,
- Bash,
+ bash,
), nil, slices.Concat([]string{
"CC=cc",
"GOCACHE=/tmp/gocache",
@@ -78,7 +80,7 @@ func (t Toolchain) newGoLatest() (pkg.Artifact, string) {
case "arm64", "riscv64":
bootstrapEnv = append(bootstrapEnv, "GOROOT_BOOTSTRAP=/system")
- bootstrapExtra = t.Append(bootstrapExtra, gcc)
+ bootstrapExtra = t.Append(bootstrapExtra, H("gcc"))
finalEnv = append(finalEnv, "CGO_ENABLED=0")
default:
diff --git a/internal/rosa/hakurei.go b/internal/rosa/hakurei.go
index a44d64da..8fe74c07 100644
--- a/internal/rosa/hakurei.go
+++ b/internal/rosa/hakurei.go
@@ -48,21 +48,17 @@ HAKUREI_VERSION='v` + hakureiVersion + `'
Check: check,
Install: install,
},
- Go,
- PkgConfig,
+ _go,
+ H("pkg-config"),
- // dist tarball
- Gzip,
+ H("libseccomp"),
+ H("acl"),
+ H("fuse"),
+ H("xcb"),
+ H("wayland"),
+ H("wayland-protocols"),
- // statically linked
- Libseccomp,
- ACL,
- Fuse,
- XCB,
- Wayland,
- WaylandProtocols,
-
- KernelHeaders,
+ kernelHeaders,
)
}
func init() {
diff --git a/internal/rosa/images.go b/internal/rosa/images.go
index c46cb837..c42ef3ed 100644
--- a/internal/rosa/images.go
+++ b/internal/rosa/images.go
@@ -5,6 +5,8 @@ import (
"hakurei.app/internal/pkg"
)
+var earlyInit = H("earlyinit")
+
func init() {
meta := Metadata{
Name: "earlyinit",
@@ -35,17 +37,17 @@ func init() {
}
native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
return &meta, t.New("system.img", TNoToolchain, t.Append(nil,
- SquashfsTools,
+ H("squashfs-tools"),
), nil, nil, `
mksquashfs /mnt/system /work/system.img
`, pkg.Path(fhs.AbsRoot.Append("mnt"), false, t.Append(nil,
- Musl,
+ musl,
Mksh,
Toybox,
- Kmod,
- Kernel,
- Firmware,
+ H("kmod"),
+ H("kernel"),
+ H("firmware"),
)...))
})
}
@@ -58,9 +60,9 @@ func init() {
}
native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
return &meta, t.New("initramfs", TNoToolchain, t.Append(nil,
- Zstd,
- EarlyInit,
- GenInitCPIO,
+ zstd,
+ earlyInit,
+ H("gen_init_cpio"),
), nil, nil, `
gen_init_cpio -t 4294967295 -c /usr/src/initramfs | zstd > /work/initramfs.zst
`, pkg.Path(AbsUsrSrc.Append("initramfs"), false, pkg.NewFile("initramfs", []byte(`
diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go
index 0758183e..38468783 100644
--- a/internal/rosa/llvm.go
+++ b/internal/rosa/llvm.go
@@ -8,7 +8,25 @@ import (
"hakurei.app/internal/pkg"
)
-// litArgs returns [LIT] arguments for optional verbosity and check skipping.
+var (
+ llvmSource = H("llvm-project")
+ muslHeaders = H("musl-headers")
+ earlyCompilerRT = H("early-compiler-rt")
+ earlyRuntimes = H("early-runtimes")
+ musl = H("musl")
+
+ bash = H("bash")
+ gawk = H("gawk")
+ coreutils = H("coreutils")
+ diffutils = H("diffutils")
+ findutils = H("findutils")
+
+ zlib = H("zlib")
+ zstd = H("zstd")
+ kernelHeaders = H("kernel-headers")
+)
+
+// litArgs returns LIT arguments for optional verbosity and check skipping.
func litArgs(verbose bool, skipChecks ...string) string {
args := []string{"-sv"}
if verbose {
@@ -36,7 +54,7 @@ func init() {
Description: "early LLVM runtime: compiler-rt",
Dependencies: P{
- Musl,
+ musl,
},
}
_meta, source := t.MustLoad(llvmSource)
@@ -91,7 +109,7 @@ ln -s \
Python,
muslHeaders,
- KernelHeaders,
+ kernelHeaders,
)
})
@@ -146,10 +164,10 @@ ln -s \
},
Python,
- Zlib,
- Zstd,
+ zlib,
+ zstd,
earlyCompilerRT,
- KernelHeaders,
+ kernelHeaders,
)
})
@@ -180,9 +198,9 @@ ln -s \
Website: "https://llvm.org",
Dependencies: P{
- Zlib,
- Zstd,
- Musl,
+ zlib,
+ zstd,
+ musl,
},
}
_meta, source := t.MustLoad(llvmSource)
@@ -335,16 +353,16 @@ ninja ` + jobsFlagE + ` check-all
},
Python,
Perl,
- Diffutils,
- Bash,
- Gawk,
- Coreutils,
- Findutils,
+ diffutils,
+ bash,
+ gawk,
+ coreutils,
+ findutils,
- Zlib,
- Zstd,
+ zlib,
+ zstd,
early,
- KernelHeaders,
+ kernelHeaders,
)
})
diff --git a/internal/rosa/make.go b/internal/rosa/make.go
index eb7d7016..73fac69c 100644
--- a/internal/rosa/make.go
+++ b/internal/rosa/make.go
@@ -55,8 +55,8 @@ func (attr *MakeHelper) extra(flag int) P {
extra := P{Make}
if (attr == nil || !attr.OmitDefaults) && flag&TEarly == 0 {
extra = append(extra,
- Gawk,
- Coreutils,
+ gawk,
+ coreutils,
)
}
return extra
diff --git a/internal/rosa/ninja.go b/internal/rosa/ninja.go
index e8984888..0f29d186 100644
--- a/internal/rosa/ninja.go
+++ b/internal/rosa/ninja.go
@@ -19,11 +19,11 @@ func init() {
ID: 2089,
}
native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
- _, python := t.Load(Python)
- _, bash := t.Load(Bash)
+ _, _python := t.Load(Python)
+ _, _bash := t.Load(bash)
return &meta, t.New(meta.Name+"-"+version, 0, []pkg.Artifact{
- python,
- bash,
+ _python,
+ _bash,
}, nil, nil, `
cd "$(mktemp -d)"
python3 /usr/src/ninja/configure.py \
diff --git a/internal/rosa/nss.go b/internal/rosa/nss.go
index cbb2bd5d..a9aed1c4 100644
--- a/internal/rosa/nss.go
+++ b/internal/rosa/nss.go
@@ -6,6 +6,12 @@ import (
"hakurei.app/internal/pkg"
)
+var (
+ unzip = H("unzip")
+ nss = H("nss")
+ nssCACert = H("nss-cacert")
+)
+
func (t Toolchain) newNSS() (pkg.Artifact, string) {
const (
version = "3.123.1"
@@ -58,12 +64,12 @@ cp -r \
},
Perl,
Python,
- Unzip,
- Gawk,
- Coreutils,
+ unzip,
+ gawk,
+ coreutils,
- Zlib,
- KernelHeaders,
+ zlib,
+ kernelHeaders,
), version
}
func init() {
@@ -73,7 +79,7 @@ func init() {
Website: "https://firefox-source-docs.mozilla.org/security/nss/index.html",
Dependencies: P{
- Zlib,
+ zlib,
},
ID: 2503,
@@ -82,9 +88,9 @@ func init() {
func (t Toolchain) newNSSCACert() (pkg.Artifact, string) {
return t.New("nss-cacert", 0, t.Append(nil,
- Bash,
+ bash,
- NSS,
+ nss,
H("buildcatrust"),
), nil, nil, `
mkdir -p /work/system/etc/ssl/{certs/unbundled,certs/hashed,trust-source}
diff --git a/internal/rosa/python.go b/internal/rosa/python.go
index bce36256..d80aee76 100644
--- a/internal/rosa/python.go
+++ b/internal/rosa/python.go
@@ -29,10 +29,13 @@ type PipHelper struct {
var _ Helper = new(PipHelper)
+// pythonPyTest is used by [PipHelper] for automated testing.
+var pythonPyTest = H("python-pytest")
+
// extra returns python, or pytest if defaults are assumed.
func (attr *PipHelper) extra(int) P {
if attr == nil || (!attr.SkipCheck && attr.Check == "") {
- return P{PythonPyTest}
+ return P{pythonPyTest}
}
return P{Python}
}
diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go
index 3ad0b089..aee3fdb4 100644
--- a/internal/rosa/rosa.go
+++ b/internal/rosa/rosa.go
@@ -231,6 +231,10 @@ var (
// The Mksh shell is added by [Toolchain.New] and used by almost all packages.
Mksh = H("mksh")
+ // Toybox is standard utilities added by [Toolchain.New].
+ Toybox = H("toybox")
+ // LLVM is the standard toolchain added by [Toolchain.New].
+ LLVM = H("llvm")
)
// New returns a [pkg.Artifact] based on a [Toolchain] via s.
@@ -298,7 +302,7 @@ mkdir -vp /work/system/bin
base := LLVM
if flag&TNoToolchain != 0 {
- base = Musl
+ base = musl
}
support = slices.Concat(extra, t.S.New(t.stage-1).Append([]pkg.Artifact{
@@ -335,6 +339,9 @@ mkdir -vp /work/system/bin
)
}
+// patch is used by [Toolchain.NewPatchedSource].
+var patch = H("patch")
+
// NewPatchedSource returns [pkg.Artifact] of source with patches applied. If
// passthrough is true, source is returned as is for zero length patches.
func (t Toolchain) NewPatchedSource(
@@ -371,7 +378,7 @@ cat /usr/src/` + name + `-patches/* | \
aname += "-patched"
}
return t.New(aname, 0, t.Append(nil,
- Patch,
+ patch,
), nil, nil, script, paths...)
}
diff --git a/internal/rosa/stage0.go b/internal/rosa/stage0.go
index 55b26504..eff0c5a8 100644
--- a/internal/rosa/stage0.go
+++ b/internal/rosa/stage0.go
@@ -5,6 +5,10 @@ import (
"hakurei.app/internal/pkg"
)
+// Stage0 is the handle of the stage0 distribution tarball built on the
+// toolchain of stage [Std].
+var Stage0 = H("rosa-stage0")
+
func init() {
meta := Metadata{
Name: "rosa-stage0",
@@ -13,7 +17,7 @@ func init() {
}
native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
return &meta, t.New("rosa-stage0", 0, t.Append(nil,
- Bzip2,
+ H("bzip2"),
), nil, nil, `
umask 377
tar \
diff --git a/internal/rosa/state_native.go b/internal/rosa/state_native.go
deleted file mode 100644
index 43210d31..00000000
--- a/internal/rosa/state_native.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package rosa
-
-var (
- LLVM = H("llvm")
- EarlyInit = H("earlyinit")
- Kernel = H("kernel")
- KernelHeaders = H("kernel-headers")
- Firmware = H("firmware")
- ACL = H("acl")
- Bash = H("bash")
- Bzip2 = H("bzip2")
- Coreutils = H("coreutils")
- Diffutils = H("diffutils")
- Findutils = H("findutils")
- Fuse = H("fuse")
- GLib = H("glib")
- Gawk = H("gawk")
- GenInitCPIO = H("gen_init_cpio")
- Go = H("go")
- Gzip = H("gzip")
- Hakurei = H("hakurei")
- HakureiDist = H("hakurei-dist")
- Kmod = H("kmod")
- Libseccomp = H("libseccomp")
- M4 = H("m4")
- NSS = H("nss")
- NSSCACert = H("nss-cacert")
- Patch = H("patch")
- PkgConfig = H("pkg-config")
- PythonPyTest = H("python-pytest")
- QEMU = H("qemu")
- Sed = H("sed")
- SquashfsTools = H("squashfs-tools")
- Toybox = H("toybox")
- toyboxEarly = H("toybox-early")
- Unzip = H("unzip")
- Wayland = H("wayland")
- WaylandProtocols = H("wayland-protocols")
- XCB = H("xcb")
- Zlib = H("zlib")
- Zstd = H("zstd")
- llvmSource = H("llvm-project")
- earlyCompilerRT = H("early-compiler-rt")
- earlyRuntimes = H("early-runtimes")
- Musl = H("musl")
- muslHeaders = H("musl-headers")
- gcc = H("gcc")
- Stage0 = H("rosa-stage0")
-)
diff --git a/internal/rosa/tamago.go b/internal/rosa/tamago.go
index 36818114..a9ea12c8 100644
--- a/internal/rosa/tamago.go
+++ b/internal/rosa/tamago.go
@@ -8,8 +8,8 @@ func (t Toolchain) newTamaGo() (pkg.Artifact, string) {
checksum = "-nH3MjAzDDLTeJ2hRKYJcJwo5-Ikci4zOHfB8j1vKn7zrF9TS6zYaoLi8qohGwAE"
)
return t.New("tamago-go"+version, 0, t.Append(nil,
- Bash,
- Go,
+ bash,
+ _go,
), nil, []string{
"CC=cc",
"GOCACHE=/tmp/gocache",
diff --git a/internal/rosa/toybox.go b/internal/rosa/toybox.go
index a0e439f1..4065e90a 100644
--- a/internal/rosa/toybox.go
+++ b/internal/rosa/toybox.go
@@ -2,6 +2,12 @@ package rosa
import "hakurei.app/internal/pkg"
+var (
+ gzip = H("gzip")
+
+ toyboxEarly = H("toybox-early")
+)
+
func (t Toolchain) newToybox(suffix, script string) (pkg.Artifact, string) {
const (
version = "0.8.13"
@@ -52,10 +58,10 @@ mkdir -p /work/usr/bin
ln -s ../../system/bin/env /work/usr/bin
`,
},
- Bash,
- Gzip,
+ bash,
+ gzip,
- KernelHeaders,
+ kernelHeaders,
), version
}
func init() {