aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa')
-rw-r--r--internal/rosa/kernel.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/internal/rosa/kernel.go b/internal/rosa/kernel.go
new file mode 100644
index 00000000..7ca5b30f
--- /dev/null
+++ b/internal/rosa/kernel.go
@@ -0,0 +1,41 @@
+package rosa
+
+import (
+ "slices"
+
+ "hakurei.app/internal/pkg"
+)
+
+// newKernel is a helper for interacting with Kbuild.
+func (t Toolchain) newKernel(
+ script string,
+ extra ...pkg.Artifact,
+) pkg.Artifact {
+ const (
+ version = "6.18.5"
+ checksum = "-V1e1WWl7HuePkmm84sSKF7nLuHfUs494uNMzMqXEyxcNE_PUE0FICL0oGWn44mM"
+ )
+ return t.New("kernel-"+version, slices.Concat([]pkg.Artifact{
+ t.NewMake(),
+ }, extra), nil, nil, `
+export LLVM=1
+export HOSTCFLAGS="${ROSA_CFLAGS}"
+export HOSTLDFLAGS="${LDFLAGS}"
+chmod -R +w /usr/src/linux && cd /usr/src/linux
+`+script, pkg.Path(AbsUsrSrc.Append("linux"), true, pkg.NewHTTPGetTar(
+ nil,
+ "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/"+
+ "snapshot/linux-"+version+".tar.gz",
+ mustDecode(checksum),
+ pkg.TarGzip,
+ )))
+}
+
+// NewKernelHeaders returns a [pkg.Artifact] containing kernel headers.
+func (t Toolchain) NewKernelHeaders() pkg.Artifact {
+ return t.newKernel(`
+make "-j$(nproc)" \
+ INSTALL_HDR_PATH=/work/system \
+ headers_install
+`, t.NewRsync())
+}