All checks were successful
Test / Create distribution (push) Successful in 1m1s
Test / Sandbox (race detector) (push) Successful in 57s
Test / Sandbox (push) Successful in 2m9s
Test / Hakurei (push) Successful in 3m9s
Test / ShareFS (push) Successful in 3m4s
Test / Hakurei (race detector) (push) Successful in 3m42s
Test / Hpkg (push) Successful in 3m24s
Test / Flake checks (push) Successful in 1m46s
This works around the zfs overlay mount overhead and significantly reduces I/O in general. Signed-off-by: Ophestra <cat@gensokyo.uk>
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package rosa
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"hakurei.app/internal/pkg"
|
|
)
|
|
|
|
// MuslAttr holds the attributes that will be applied to musl.
|
|
type MuslAttr struct {
|
|
// Install headers only.
|
|
Headers bool
|
|
// Environment variables concatenated with defaults.
|
|
Env []string
|
|
// Dependencies concatenated with defaults.
|
|
Extra []pkg.Artifact
|
|
}
|
|
|
|
// NewMusl returns a [pkg.Artifact] containing an installation of musl libc.
|
|
func (t Toolchain) NewMusl(attr *MuslAttr) pkg.Artifact {
|
|
const (
|
|
version = "1.2.5"
|
|
checksum = "y6USdIeSdHER_Fw2eT2CNjqShEye85oEg2jnOur96D073ukmIpIqDOLmECQroyDb"
|
|
)
|
|
|
|
if attr == nil {
|
|
attr = new(MuslAttr)
|
|
}
|
|
|
|
target := "install"
|
|
script := `
|
|
mkdir -p /work/system/bin
|
|
COMPAT_LINKER_NAME="ld-musl-` + linuxArch() + `.so.1"
|
|
ln -vs ../lib/libc.so /work/system/bin/linker
|
|
ln -vs ../lib/libc.so /work/system/bin/ldd
|
|
ln -vs libc.so "/work/system/lib/${COMPAT_LINKER_NAME}"
|
|
rm -v "/work/lib/${COMPAT_LINKER_NAME}"
|
|
rmdir -v /work/lib
|
|
`
|
|
if attr.Headers {
|
|
target = "install-headers"
|
|
script = ""
|
|
}
|
|
|
|
return t.New("musl-"+version, 0, stage3Concat(t, attr.Extra,
|
|
t.Load(Make),
|
|
t.Load(Coreutils),
|
|
), nil, slices.Concat([]string{
|
|
"ROSA_MUSL_TARGET=" + target,
|
|
}, attr.Env), `
|
|
cd "$(mktemp -d)"
|
|
/usr/src/musl/configure \
|
|
--prefix=/system \
|
|
--target="${ROSA_TRIPLE}"
|
|
make "-j$(nproc)" DESTDIR=/work "${ROSA_MUSL_TARGET}"
|
|
`+script, pkg.Path(AbsUsrSrc.Append("musl"), false, t.NewPatchedSource(
|
|
// expected to be writable in copies
|
|
"musl", version, pkg.NewHTTPGetTar(
|
|
nil, "https://musl.libc.org/releases/musl-"+version+".tar.gz",
|
|
mustDecode(checksum),
|
|
pkg.TarGzip,
|
|
), false,
|
|
)))
|
|
}
|