aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/musl.go
blob: 4ac5a4e5529ecea061ca26c0015d186a6913f262 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package rosa

import "hakurei.app/internal/pkg"

func (t Toolchain) newMusl(
	headers bool,
	env []string,
	extra ...pkg.Artifact,
) pkg.Artifact {
	const (
		version  = "1.2.5"
		checksum = "y6USdIeSdHER_Fw2eT2CNjqShEye85oEg2jnOur96D073ukmIpIqDOLmECQroyDb"
	)

	name := "musl"
	attr := MakeAttr{
		OmitDefaults: true,
		SkipCheck:    true,

		Env: env,
		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 headers {
		name += "-headers"
		attr.ScriptInstall = "make DESTDIR=/work install-headers"
		attr.Script = ""
	}

	return t.NewViaMake(name, version, 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,
	), &attr, stage0Concat(t, extra,
		t.Load(Coreutils),
	)...)
}
func init() {
	artifactsF[musl] = func(t Toolchain) pkg.Artifact {
		return t.newMusl(false, nil)
	}
}