aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/kernel.go
blob: ac6e0c4da625c69a965b961cd76ebe464af12a8b (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package rosa

import "hakurei.app/internal/pkg"

const kernelVersion = "6.12.73"

var kernelSource = pkg.NewHTTPGetTar(
	nil, "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/"+
		"snapshot/linux-"+kernelVersion+".tar.gz",
	mustDecode("29oUBJKF1ULIv1-XQLpEUUc3LgjUSmyvOSskG37MYUcBlBjMk7RcbCTLrD7UfSM6"),
	pkg.TarGzip,
)

func (t Toolchain) newKernelSource() pkg.Artifact {
	return t.New("kernel-"+kernelVersion+"-src", 0, nil, nil, nil, `
mkdir -p /work/usr/src/
cp -r /usr/src/linux /work/usr/src/
chmod -R +w /work/usr/src/linux/
`, pkg.Path(AbsUsrSrc.Append("linux"), false, kernelSource))
}
func init() { artifactsF[KernelSource] = Toolchain.newKernelSource }

func (t Toolchain) newKernelHeaders() pkg.Artifact {
	return t.NewViaMake("kernel-headers", kernelVersion, kernelSource, &MakeAttr{
		SkipConfigure: true,

		SkipCheck: true,
		Make: []string{
			"-f /usr/src/kernel-headers/Makefile",
			"O=/tmp/kbuild",
			"LLVM=1",
			`HOSTLDFLAGS="${LDFLAGS}"`,
			"INSTALL_HDR_PATH=/work/system",
			"headers_install",
		},
		ScriptInstall: "\n",

		Flag: TEarly,
	},
		t.Load(Rsync),
	)
}
func init() { artifactsF[KernelHeaders] = Toolchain.newKernelHeaders }

func (t Toolchain) newKernel() pkg.Artifact {
	return t.NewViaMake("kernel", kernelVersion, kernelSource, &MakeAttr{
		OmitDefaults:  true,
		SkipConfigure: true,

		// Build, install, and boot kernel before running kselftest on it.
		SkipCheck: true,

		Env: []string{
			"PATH=/system/sbin",
		},
		ScriptEarly: `
install -Dm0400 \
	/usr/src/.config \
	/tmp/kbuild/.config
install -Dm0500 \
	/usr/src/.installkernel \
	/sbin/installkernel
`,
		Make: []string{
			"-f /usr/src/kernel/Makefile",
			"O=/tmp/kbuild",

			"LLVM=1",
			"KBUILD_BUILD_VERSION='1-Rosa'",
			"KBUILD_BUILD_TIMESTAMP='2106-02-07 06:28:15 UTC'",
			"KBUILD_BUILD_USER=kbuild",
			"KBUILD_BUILD_HOST=localhost",
			"all",
		},
		ScriptInstall: `
make \
	"-j$(nproc)" \
	-f /usr/src/kernel/Makefile \
	O=/tmp/kbuild \
	LLVM=1 \
	INSTALL_PATH=/work \
	install \
	INSTALL_MOD_PATH=/work \
	modules_install
rm -v /work/lib/modules/` + kernelVersion + `/build
`,

		Paths: []pkg.ExecPath{
			pkg.Path(AbsUsrSrc.Append(
				".config",
			), false, pkg.NewFile(".config", kernelConfig)),
			pkg.Path(AbsUsrSrc.Append(
				".installkernel",
			), false, pkg.NewFile("installkernel", []byte(`#!/bin/sh -e
echo "Installing linux $1..."
cp -av "$2" "$4"
cp -av "$3" "$4"
`))),
		},
	},
		t.Load(Flex),
		t.Load(Bison),
		t.Load(M4),
		t.Load(Tar),
		t.Load(Perl),
		t.Load(BC),
		t.Load(Sed),
		t.Load(Gawk),
		t.Load(Coreutils),
		t.Load(Diffutils),

		t.Load(XZ),
		t.Load(Zlib),
		t.Load(Gzip),
		t.Load(Bzip2),
		t.Load(Zstd),
		t.Load(Kmod),
		t.Load(Elfutils),
		t.Load(OpenSSL),
		t.Load(KernelHeaders),
	)
}
func init() { artifactsF[Kernel] = Toolchain.newKernel }