aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/rosa.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa/rosa.go')
-rw-r--r--internal/rosa/rosa.go100
1 files changed, 76 insertions, 24 deletions
diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go
index c1f71cfa..e83d7097 100644
--- a/internal/rosa/rosa.go
+++ b/internal/rosa/rosa.go
@@ -268,11 +268,10 @@ function apply {
return t.New(name+"-src", Unversioned, nil, &PackageAttr{
Paths: paths,
+ Tools: P{_patch},
}, &GenericHelper{
Build: buf.String(),
- },
- _patch,
- )
+ })
}
// helperInPlace is a special directory value for omitting the cd statement.
@@ -338,6 +337,8 @@ type PackageAttr struct {
// Whether to create [pkg.KindExecNet] instead of [pkg.KindExec].
HostNet bool
+ // Inputs added only during cross-compilation.
+ Cross P
// Native utilities used by the build process.
Tools P
// Unregistered extras.
@@ -419,9 +420,16 @@ func (t Toolchain) New(
root := make([]pkg.Artifact, 0, 1<<3+
len(attr.Extra)+
len(attr.Tools)+
+ len(attr.Cross)+
len(inputs))
root = append(root, attr.Extra...)
+ cross := t.cross()
+ var rootCross []pkg.Artifact
+ if cross {
+ rootCross = make([]pkg.Artifact, 0, len(inputs)+len(attr.Cross))
+ }
+
const lcMessages = "LC_MESSAGES=C.UTF-8"
srn := rn
env := slices.Clone(attr.Env)
@@ -490,24 +498,51 @@ func (t Toolchain) New(
wantsChmod, wantsWrite := helper.wantsChmod(), helper.wantsWrite()
{
+ native := t.native()
pv := paGet()
+ spv := pv
+ if cross {
+ spv = paGet()
+ }
for _, p := range helper.tools() {
- root = t.appendHandle(root, pv, p)
+ root = native.appendHandle(root, pv, p)
}
- for _, p := range helper.inputs() {
- root = t.appendHandle(root, pv, p)
+
+ if !cross {
+ for _, p := range helper.inputs() {
+ root = t.appendHandle(root, spv, p)
+ }
+ } else {
+ for _, p := range helper.inputs() {
+ rootCross = t.appendHandle(rootCross, spv, p)
+ }
}
+
for _, p := range attr.Tools {
- root = t.appendHandle(root, pv, p)
+ root = native.appendHandle(root, pv, p)
}
- for _, p := range inputs {
- root = t.appendHandle(root, pv, p)
+
+ if !cross {
+ for _, p := range inputs {
+ root = t.appendHandle(root, spv, p)
+ }
+ } else {
+ for _, p := range inputs {
+ rootCross = t.appendHandle(rootCross, spv, p)
+ }
+ for _, p := range attr.Cross {
+ rootCross = t.appendHandle(rootCross, spv, p)
+ }
}
- boot := t.S.New(t.stage - 1)
+
+ boot := native.S.New(t.stage - 1)
for _, p := range extraBoot {
root = boot.appendHandle(root, pv, p)
}
paPut(pv)
+ if cross {
+ paPut(spv)
+ }
}
if t.stage == stageGentoo {
@@ -569,37 +604,51 @@ ln -s ../bin /usr/`
scriptEarly += " /bin/)\n"
}
+ arch := t.Arch()
+ sys := []pkg.ExecPath{pkg.Path(
+ fhs.AbsRoot, true,
+ root...,
+ ), pkg.Path(
+ absCureScript, false,
+ pkg.NewFile(scriptName, []byte(
+ "#!/system/bin/sh\n"+
+ "set -eu -o pipefail\n"+
+ scriptEarly+helper.script(t, name),
+ )),
+ )}
+ if cross {
+ var _arch string
+ _arch, arch = arch, t.S.native.Arch()
+ if len(rootCross) > 0 {
+ sys = append(sys, pkg.Path(
+ AbsSystem.Append(_arch), true,
+ rootCross...,
+ ))
+ }
+ srn += "-cross-" + _arch
+ }
+
return pkg.NewExec(
- srn, t.arch, attr.KnownChecksum, pkg.ExecTimeoutMax,
+ srn, arch, attr.KnownChecksum, pkg.ExecTimeoutMax,
attr.HostNet,
attr.Exclusive,
fhs.AbsRoot, env,
absCureScript,
nil,
- slices.Concat([]pkg.ExecPath{pkg.Path(
- fhs.AbsRoot, true,
- root...,
- ), pkg.Path(
- absCureScript, false,
- pkg.NewFile(scriptName, []byte(
- "#!/system/bin/sh\n"+
- "set -eu -o pipefail\n"+
- scriptEarly+helper.script(t, name),
- )),
- )}, paths)...,
+ slices.Concat(sys, paths)...,
)
}
// GenericHelper directly passes build script segments for invocations of
// one-off build scripts too specific to fit into any other [Helper]
-// implementation, but can still benefit from [Toolchain.NewPackage].
+// implementation, but can still benefit from [Toolchain.New].
type GenericHelper struct {
// Remain in current directory.
InPlace bool
// Concatenated for [Toolchain].
- Build, Check, Install string
+ Cross, Build, Check, Install string
}
var _ Helper = new(GenericHelper)
@@ -634,6 +683,9 @@ func (attr *GenericHelper) script(t Toolchain, _ string) string {
}
script := attr.Build
+ if t.cross() {
+ script = attr.Cross + script
+ }
if t.opts&OptSkipCheck == 0 {
script += attr.Check
}