internal/rosa/package: migrate toybox
All checks were successful
Test / Create distribution (push) Successful in 1m58s
Test / Sandbox (push) Successful in 5m6s
Test / ShareFS (push) Successful in 7m41s
Test / Sandbox (race detector) (push) Successful in 8m20s
Test / Hakurei (race detector) (push) Successful in 9m28s
Test / Hakurei (push) Successful in 2m43s
Test / Flake checks (push) Successful in 1m22s
All checks were successful
Test / Create distribution (push) Successful in 1m58s
Test / Sandbox (push) Successful in 5m6s
Test / ShareFS (push) Successful in 7m41s
Test / Sandbox (race detector) (push) Successful in 8m20s
Test / Hakurei (race detector) (push) Successful in 9m28s
Test / Hakurei (push) Successful in 2m43s
Test / Flake checks (push) Successful in 1m22s
Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
134
internal/rosa/package/toybox.az
Normal file
134
internal/rosa/package/toybox.az
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
package toybox-source {
|
||||||
|
description = "toybox source tree";
|
||||||
|
exclude = true;
|
||||||
|
|
||||||
|
version* = "0.8.13";
|
||||||
|
output = remoteTar {
|
||||||
|
url = "https://landley.net/toybox/downloads/toybox-"+version+".tar.gz";
|
||||||
|
checksum = "rZ1V1ATDte2WeQZanxLVoiRGdfPXhMlEo5-exX-e-ml8cGn9qOv0ABEUVZpX3wTI";
|
||||||
|
compress = gzip;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
package toybox {
|
||||||
|
description = "many common Linux command line utilities";
|
||||||
|
website = "https://landley.net/toybox";
|
||||||
|
anitya = 13818;
|
||||||
|
|
||||||
|
source = toybox-source;
|
||||||
|
|
||||||
|
writable = true;
|
||||||
|
enterSource = true;
|
||||||
|
toyboxEarly = true;
|
||||||
|
|
||||||
|
exec = make {
|
||||||
|
omitDefaults = true;
|
||||||
|
inPlace = true;
|
||||||
|
skipConfigure = true;
|
||||||
|
|
||||||
|
preMake = `
|
||||||
|
LDFLAGS="${LDFLAGS:-''} -static"
|
||||||
|
|
||||||
|
chmod +w /bin/
|
||||||
|
ln -rs "$(which bash)" /bin/ || true
|
||||||
|
|
||||||
|
chmod +w kconfig tests
|
||||||
|
rm \
|
||||||
|
tests/du.test \
|
||||||
|
tests/sed.test \
|
||||||
|
tests/tar.test \
|
||||||
|
tests/ls.test \
|
||||||
|
tests/taskset.test
|
||||||
|
|
||||||
|
make defconfig
|
||||||
|
sed -i \
|
||||||
|
's/^CONFIG_TOYBOX_ZHELP=y$/CONFIG_TOYBOX_ZHELP=0/' \
|
||||||
|
.config
|
||||||
|
`;
|
||||||
|
|
||||||
|
check = [
|
||||||
|
"USER=cure",
|
||||||
|
"tests",
|
||||||
|
];
|
||||||
|
skipEarlyStageCheck = true;
|
||||||
|
|
||||||
|
install = "PREFIX=/work/system/bin make install_flat";
|
||||||
|
|
||||||
|
postInstall = `
|
||||||
|
mkdir -p /work/usr/bin
|
||||||
|
ln -s ../../system/bin/env /work/usr/bin
|
||||||
|
`;
|
||||||
|
};
|
||||||
|
|
||||||
|
inputs = [
|
||||||
|
bash,
|
||||||
|
gzip,
|
||||||
|
|
||||||
|
kernel-headers,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
package toybox-early {
|
||||||
|
description = "a build of toybox with unfinished tools enabled to break dependency loops";
|
||||||
|
website = "https://landley.net/toybox";
|
||||||
|
exclude = true;
|
||||||
|
|
||||||
|
source = toybox-source;
|
||||||
|
|
||||||
|
writable = true;
|
||||||
|
enterSource = true;
|
||||||
|
toyboxEarly = true;
|
||||||
|
|
||||||
|
exec = make {
|
||||||
|
omitDefaults = true;
|
||||||
|
inPlace = true;
|
||||||
|
skipConfigure = true;
|
||||||
|
|
||||||
|
preMake = `
|
||||||
|
LDFLAGS="${LDFLAGS:-''} -static"
|
||||||
|
|
||||||
|
chmod +w /bin/
|
||||||
|
ln -rs "$(which bash)" /bin/ || true
|
||||||
|
|
||||||
|
chmod +w kconfig tests
|
||||||
|
rm \
|
||||||
|
tests/du.test \
|
||||||
|
tests/sed.test \
|
||||||
|
tests/tar.test \
|
||||||
|
tests/ls.test \
|
||||||
|
tests/taskset.test
|
||||||
|
|
||||||
|
make defconfig
|
||||||
|
sed -i \
|
||||||
|
's/^CONFIG_TOYBOX_ZHELP=y$/CONFIG_TOYBOX_ZHELP=0/' \
|
||||||
|
.config
|
||||||
|
|
||||||
|
echo '
|
||||||
|
CONFIG_EXPR=y
|
||||||
|
CONFIG_TR=y
|
||||||
|
CONFIG_AWK=y
|
||||||
|
CONFIG_DIFF=y
|
||||||
|
' >> .config
|
||||||
|
`;
|
||||||
|
|
||||||
|
check = [
|
||||||
|
"USER=cure",
|
||||||
|
"tests",
|
||||||
|
];
|
||||||
|
skipEarlyStageCheck = true;
|
||||||
|
|
||||||
|
install = "PREFIX=/work/system/bin make install_flat";
|
||||||
|
|
||||||
|
postInstall = `
|
||||||
|
mkdir -p /work/usr/bin
|
||||||
|
ln -s ../../system/bin/env /work/usr/bin
|
||||||
|
`;
|
||||||
|
};
|
||||||
|
|
||||||
|
inputs = [
|
||||||
|
bash,
|
||||||
|
gzip,
|
||||||
|
|
||||||
|
kernel-headers,
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -76,21 +76,9 @@ func (s *S) triple() string {
|
|||||||
return s.linuxArch() + "-rosa-linux-musl"
|
return s.linuxArch() + "-rosa-linux-musl"
|
||||||
}
|
}
|
||||||
|
|
||||||
// perArch is a value that differs per architecture.
|
|
||||||
type perArch[T any] map[string]T
|
|
||||||
|
|
||||||
// unwrap returns the value for the current architecture.
|
|
||||||
func (p perArch[T]) unwrap(s *S) T {
|
|
||||||
v, ok := p[s.arch]
|
|
||||||
if !ok {
|
|
||||||
panic("unsupported target " + s.arch)
|
|
||||||
}
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// EnvTriplet holds the return value of triplet.
|
// EnvTriple holds the Rosa OS host triple.
|
||||||
EnvTriplet = "ROSA_TRIPLE"
|
EnvTriple = "ROSA_TRIPLE"
|
||||||
)
|
)
|
||||||
|
|
||||||
// earlyLDFLAGS returns LDFLAGS corresponding to triplet.
|
// earlyLDFLAGS returns LDFLAGS corresponding to triplet.
|
||||||
@@ -225,16 +213,15 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// stage0Dist is a binary distribution of an initial toolchain [Stage]. It
|
|
||||||
// is used by [Toolchain.New] as stageEarly.
|
|
||||||
stage0Dist = H("stage0-dist")
|
|
||||||
|
|
||||||
// The Mksh shell is added by [Toolchain.New] and used by almost all packages.
|
// The Mksh shell is added by [Toolchain.New] and used by almost all packages.
|
||||||
Mksh = H("mksh")
|
Mksh = H("mksh")
|
||||||
// Toybox is standard utilities added by [Toolchain.New].
|
// Toybox is standard utilities added by [Toolchain.New].
|
||||||
Toybox = H("toybox")
|
Toybox = H("toybox")
|
||||||
// LLVM is the standard toolchain added by [Toolchain.New].
|
// LLVM is the standard toolchain added by [Toolchain.New].
|
||||||
LLVM = H("llvm")
|
LLVM = H("llvm")
|
||||||
|
|
||||||
|
_stage0Dist = H("stage0-dist")
|
||||||
|
_toyboxEarly = H("toybox-early")
|
||||||
)
|
)
|
||||||
|
|
||||||
// New returns a [pkg.Artifact] based on a [Toolchain] via s.
|
// New returns a [pkg.Artifact] based on a [Toolchain] via s.
|
||||||
@@ -262,7 +249,7 @@ func (t Toolchain) New(
|
|||||||
support = append(support, extra...)
|
support = append(support, extra...)
|
||||||
support = append(support, cureEtc{})
|
support = append(support, cureEtc{})
|
||||||
if t.stage == stageEarly {
|
if t.stage == stageEarly {
|
||||||
_, a := t.MustLoad(stage0Dist)
|
_, a := t.MustLoad(_stage0Dist)
|
||||||
support = append(support, a)
|
support = append(support, a)
|
||||||
} else {
|
} else {
|
||||||
support = append(support, t.S.New(_stageBusybox).New("gentoo", 0, nil, nil, nil, `
|
support = append(support, t.S.New(_stageBusybox).New("gentoo", 0, nil, nil, nil, `
|
||||||
@@ -282,7 +269,7 @@ mkdir -vp /work/system/bin
|
|||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
env = fixupEnviron(env, []string{
|
env = fixupEnviron(env, []string{
|
||||||
EnvTriplet + "=" + t.triple(),
|
EnvTriple + "=" + t.triple(),
|
||||||
lcMessages,
|
lcMessages,
|
||||||
"LDFLAGS=" + t.earlyLDFLAGS(true),
|
"LDFLAGS=" + t.earlyLDFLAGS(true),
|
||||||
}, "/system/bin",
|
}, "/system/bin",
|
||||||
@@ -297,7 +284,7 @@ mkdir -vp /work/system/bin
|
|||||||
|
|
||||||
toybox := Toybox
|
toybox := Toybox
|
||||||
if flag&TEarly != 0 {
|
if flag&TEarly != 0 {
|
||||||
toybox = toyboxEarly
|
toybox = _toyboxEarly
|
||||||
}
|
}
|
||||||
|
|
||||||
base := LLVM
|
base := LLVM
|
||||||
@@ -313,7 +300,7 @@ mkdir -vp /work/system/bin
|
|||||||
toybox,
|
toybox,
|
||||||
))
|
))
|
||||||
env = fixupEnviron(env, []string{
|
env = fixupEnviron(env, []string{
|
||||||
EnvTriplet + "=" + t.triple(),
|
EnvTriple + "=" + t.triple(),
|
||||||
lcMessages,
|
lcMessages,
|
||||||
}, "/system/bin", "/bin")
|
}, "/system/bin", "/bin")
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ tar \
|
|||||||
`, pkg.Path(fhs.AbsRoot.Append("stage0"), false, t.Append(nil,
|
`, pkg.Path(fhs.AbsRoot.Append("stage0"), false, t.Append(nil,
|
||||||
LLVM,
|
LLVM,
|
||||||
Mksh,
|
Mksh,
|
||||||
toyboxEarly,
|
_toyboxEarly,
|
||||||
)...))
|
)...))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,7 @@ tar \
|
|||||||
func (s *S) HasStage0() (ok bool) {
|
func (s *S) HasStage0() (ok bool) {
|
||||||
func() {
|
func() {
|
||||||
defer func() { ok = recover() == nil }()
|
defer func() { ok = recover() == nil }()
|
||||||
s.New(stageEarly).MustLoad(stage0Dist)
|
s.New(stageEarly).MustLoad(_stage0Dist)
|
||||||
}()
|
}()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
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"
|
|
||||||
checksum = "rZ1V1ATDte2WeQZanxLVoiRGdfPXhMlEo5-exX-e-ml8cGn9qOv0ABEUVZpX3wTI"
|
|
||||||
)
|
|
||||||
return t.NewPackage("toybox"+suffix, version, newTar(
|
|
||||||
"https://landley.net/toybox/downloads/toybox-"+version+".tar.gz",
|
|
||||||
checksum,
|
|
||||||
pkg.TarGzip,
|
|
||||||
), &PackageAttr{
|
|
||||||
// uses source tree as scratch space
|
|
||||||
Writable: true,
|
|
||||||
EnterSource: true,
|
|
||||||
|
|
||||||
Flag: TEarly,
|
|
||||||
}, &MakeHelper{
|
|
||||||
OmitDefaults: true,
|
|
||||||
InPlace: true,
|
|
||||||
SkipConfigure: true,
|
|
||||||
|
|
||||||
ScriptMakeEarly: `
|
|
||||||
LDFLAGS="${LDFLAGS:-''} -static"
|
|
||||||
|
|
||||||
chmod +w /bin/
|
|
||||||
ln -rs "$(which bash)" /bin/ || true
|
|
||||||
|
|
||||||
chmod +w kconfig tests
|
|
||||||
rm \
|
|
||||||
tests/du.test \
|
|
||||||
tests/sed.test \
|
|
||||||
tests/tar.test \
|
|
||||||
tests/ls.test \
|
|
||||||
tests/taskset.test
|
|
||||||
|
|
||||||
make defconfig
|
|
||||||
sed -i \
|
|
||||||
's/^CONFIG_TOYBOX_ZHELP=y$/CONFIG_TOYBOX_ZHELP=0/' \
|
|
||||||
.config
|
|
||||||
` + script,
|
|
||||||
SkipCheck: t.stage.isStage0(),
|
|
||||||
Check: []string{
|
|
||||||
"USER=cure",
|
|
||||||
"tests",
|
|
||||||
},
|
|
||||||
Install: "PREFIX=/work/system/bin make install_flat",
|
|
||||||
Script: `
|
|
||||||
mkdir -p /work/usr/bin
|
|
||||||
ln -s ../../system/bin/env /work/usr/bin
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
_bash,
|
|
||||||
gzip,
|
|
||||||
|
|
||||||
_kernelHeaders,
|
|
||||||
), version
|
|
||||||
}
|
|
||||||
func init() {
|
|
||||||
native.mustRegister(func(t Toolchain) (pkg.Artifact, string) {
|
|
||||||
return t.newToybox("", "")
|
|
||||||
}, &Metadata{
|
|
||||||
Name: "toybox",
|
|
||||||
Description: "many common Linux command line utilities",
|
|
||||||
Website: "https://landley.net/toybox/",
|
|
||||||
|
|
||||||
ID: 13818,
|
|
||||||
})
|
|
||||||
|
|
||||||
native.mustRegister(func(t Toolchain) (pkg.Artifact, string) {
|
|
||||||
return t.newToybox("-early", `
|
|
||||||
echo '
|
|
||||||
CONFIG_EXPR=y
|
|
||||||
CONFIG_TR=y
|
|
||||||
CONFIG_AWK=y
|
|
||||||
CONFIG_DIFF=y
|
|
||||||
' >> .config
|
|
||||||
`)
|
|
||||||
}, &Metadata{
|
|
||||||
Name: "toybox-early",
|
|
||||||
Description: "a build of toybox with unfinished tools enabled to break dependency loops",
|
|
||||||
Website: "https://landley.net/toybox/",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user