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-$(uname -m).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, false, stage3Concat(t, attr.Extra, t.Load(Make), ), nil, slices.Concat([]string{ "ROSA_MUSL_TARGET=" + target, }, attr.Env), ` # expected to be writable in copies chmod -R +w /usr/src/musl/ 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"), true, pkg.NewHTTPGetTar( nil, "https://musl.libc.org/releases/musl-"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, ))) }