aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-10-23 02:42:47 +0900
committerOphestra <cat@gensokyo.uk>2026-10-23 02:42:47 +0900
commit9a9f53daac112c841487a3c530318601c102895a (patch)
treee7c8bf3f2d26069f68b91ee132abbdc14288bdef
parentac60441cfe5b7018314ebe2b72e9b4db834b70f3 (diff)
internal/rosa: cross-only native tools
For situations where a package uses a just-built program as part of its own build process. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/rosa/azalea/evaluate.go3
-rw-r--r--internal/rosa/rosa.go7
-rw-r--r--internal/rosa/state.go5
3 files changed, 13 insertions, 2 deletions
diff --git a/internal/rosa/azalea/evaluate.go b/internal/rosa/azalea/evaluate.go
index 59702062..9b7b08d0 100644
--- a/internal/rosa/azalea/evaluate.go
+++ b/internal/rosa/azalea/evaluate.go
@@ -208,6 +208,8 @@ var (
IdentInputs = unique.Make(Ident("inputs"))
// IdentCross has the same semantics as [IdentTools].
IdentCross = unique.Make(Ident("cross"))
+ // IdentNative has the same semantics as [IdentTools].
+ IdentNative = unique.Make(Ident("native"))
// IdentRuntime has the same semantics as [IdentTools].
IdentRuntime = unique.Make(Ident("runtime"))
// IdentExtra has the same semantics as [IdentTools].
@@ -364,6 +366,7 @@ func evaluateAny(d PF, s []Frame, expr, rp any) bool {
IdentTools,
IdentInputs,
IdentCross,
+ IdentNative,
IdentRuntime,
IdentExtra,
} {
diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go
index 7123de6e..27f31ecf 100644
--- a/internal/rosa/rosa.go
+++ b/internal/rosa/rosa.go
@@ -344,6 +344,8 @@ type PackageAttr struct {
NoLibc bool
// Inputs added only during cross-compilation.
Cross P
+ // Native utilities added only during cross-compilation.
+ CrossTools P
// Native utilities used by the build process.
Tools P
// Unregistered extras.
@@ -429,7 +431,7 @@ func (t Toolchain) New(
root := make([]pkg.Artifact, 0, 1<<3+
len(attr.Extra)+
len(attr.Tools)+
- len(attr.Cross)+
+ len(attr.CrossTools)+
len(inputs))
root = append(root, attr.Extra...)
@@ -545,6 +547,9 @@ func (t Toolchain) New(
for _, p := range attr.Cross {
rootCross = t.appendHandle(rootCross, spv, p)
}
+ for _, p := range attr.CrossTools {
+ root = native.appendHandle(root, pv, p)
+ }
}
boot := native.S.New(t.stage - 1)
diff --git a/internal/rosa/state.go b/internal/rosa/state.go
index 5d2de9a0..aba5c312 100644
--- a/internal/rosa/state.go
+++ b/internal/rosa/state.go
@@ -1103,7 +1103,7 @@ func (ctx *evalContext) pf(
overlay string
join bool
- tools, inputs, extra azalea.Array
+ tools, native, inputs, extra azalea.Array
cross, runtimes = azalea.Array{}, azalea.Array{}
bootstrap, libc = true, true
@@ -1138,6 +1138,7 @@ func (ctx *evalContext) pf(
k("exec"): &helper,
k("inputs"): &inputs,
k("cross"): &cross,
+ k("native"): &native,
k("tools"): &tools,
k("runtime"): &runtimes,
k("join"): &join,
@@ -1154,6 +1155,8 @@ func (ctx *evalContext) pf(
return
} else if attr.Cross, err = toHandles(cross); err != nil {
return
+ } else if attr.CrossTools, err = toHandles(native); err != nil {
+ return
} else if attr.Tools, err = toHandles(tools); err != nil {
return
} else if extraH, err = toHandles(extra); err != nil {