Build core with separate initramfs
Build the initramfs separately and include it via mkimage. Also includes
a patch to the kernel which adds support for hardcoded cmdline
to the Linux efistub.
This lowers build times by a lot, for normal changes they are now
below 5s
Test Plan: Ran `bazel run //core/scripts:launch`
X-Origin-Diff: phab/D245
GitOrigin-RevId: 206c7c5c979c10ffd25c36dfefd8b9290a6a3f43
diff --git a/core/build/linux_kernel/BUILD b/core/build/linux_kernel/BUILD
index e1f9c9b..f95e16f 100644
--- a/core/build/linux_kernel/BUILD
+++ b/core/build/linux_kernel/BUILD
@@ -1,10 +1,7 @@
genrule(
- name = "image",
+ name = "kernel",
srcs = [
"@linux_kernel//:all",
- "@//core/cmd/init",
- "@//core/build/utils",
- "initramfs.list",
"linux-smalltown.config",
],
outs = [
@@ -16,9 +13,6 @@
mkdir $$DIR/.bin
cp $(location linux-smalltown.config) $$DIR/.config
- cp $(location @//core/cmd/init) $$DIR/.bin/init
- cp $(locations @//core/build/utils) $$DIR/.bin/
- cp $(location initramfs.list) $$DIR/initramfs.list
(cd $$DIR && make -j $$(nproc)) >/dev/null
@@ -26,3 +20,30 @@
""",
visibility = ["//visibility:public"],
)
+
+genrule(
+ name = "initramfs",
+ srcs = [
+ "@//core/cmd/init",
+ "@//core/build/utils:mkfs.xfs",
+ "@kubernetes//cmd/kube-apiserver",
+ ],
+ outs = [
+ "initramfs.cpio.lz4",
+ ],
+ cmd = """
+ $(location @linux_kernel//:gen_init_cpio) - <<- 'EOF' | lz4 -l > \"$@\"
+dir /dev 0755 0 0
+nod /dev/console 0600 0 0 c 5 1
+nod /dev/null 0644 0 0 c 1 3
+file /init $(location @//core/cmd/init) 0755 0 0
+dir /bin 0755 0 0
+file /bin/mkfs.xfs $(location @//core/build/utils:mkfs.xfs) 0755 0 0
+file /bin/kube-apiserver $(location @kubernetes//cmd/kube-apiserver) 0755 0 0
+EOF
+ """,
+ tools = [
+ "@linux_kernel//:gen_init_cpio",
+ ],
+ visibility = ["//visibility:public"],
+)