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"],
+)