Reland Add microdroid_16k

So far only non-protected VMs can boot with 16k kernel.

Support for microdroid_16k pvms is tracked in b/376870129.

Bug: 317201718
Bug: 376517173
Bug: 333730505
Bug: 376870129
Test: adb shell /apex/com.android.virt/bin/vm run-microdroid \
    --os microdroid_16k \
    --debug full
Test: atest MicrodropidTests
Test: atest MicrodroidHostTestCases
Test: atest virtualizationmanager_device_test
Test: presubmit
Change-Id: I0fe5cd431b16f57e5bcc51146691fd0368d30818
diff --git a/build/microdroid/initrd/Android.bp b/build/microdroid/initrd/Android.bp
index 6d45417..7331e0b 100644
--- a/build/microdroid/initrd/Android.bp
+++ b/build/microdroid/initrd/Android.bp
@@ -84,6 +84,10 @@
     ":microdroid_vbmeta_bootconfig_gen",
 ]
 
+bootconfigs_x86_64_16k = bootconfigs_x86_64 + [
+    ":microdroid_16k_bootconfig_x86_64_gen",
+]
+
 java_genrule {
     name: "microdroid_initrd_debuggable_arm64",
     tools: ["initrd_bootconfig"],
@@ -118,6 +122,17 @@
 }
 
 java_genrule {
+    name: "microdroid_16k_initrd_debuggable_x86_64",
+    tools: ["initrd_bootconfig"],
+    srcs: [
+        ":microdroid_initrd_gen",
+        ":microdroid_bootconfig_debuggable_src",
+    ] + bootconfigs_x86_64_16k,
+    out: ["microdroid_16k_initrd_debuggable_x86_64"],
+    cmd: "$(location initrd_bootconfig) attach --output $(out) $(in)",
+}
+
+java_genrule {
     name: "microdroid_gki-android15-6.6_initrd_debuggable_x86_64",
     tools: ["initrd_bootconfig"],
     srcs: [
@@ -162,6 +177,17 @@
 }
 
 java_genrule {
+    name: "microdroid_16k_initrd_normal_x86_64",
+    tools: ["initrd_bootconfig"],
+    srcs: [
+        ":microdroid_initrd_gen",
+        ":microdroid_bootconfig_normal_src",
+    ] + bootconfigs_x86_64_16k,
+    out: ["microdroid_16k_initrd_normal_x86_64"],
+    cmd: "$(location initrd_bootconfig) attach --output $(out) $(in)",
+}
+
+java_genrule {
     name: "microdroid_gki-android15-6.6_initrd_normal_x86_64",
     tools: ["initrd_bootconfig"],
     srcs: [
@@ -188,6 +214,24 @@
 }
 
 prebuilt_etc {
+    name: "microdroid_16k_initrd_debuggable",
+    // We don't have ramdisk for architectures other than x86_64 & arm64
+    src: ":empty_file",
+    arch: {
+        // For x86_64 we emulate 16k by adding `page_shift=14` to bootconfig, that's why we need
+        // separate initrd.
+        x86_64: {
+            src: ":microdroid_16k_initrd_debuggable_x86_64",
+        },
+        // For arm64, the initrd for 16k kernel is the same.
+        arm64: {
+            src: ":microdroid_initrd_debuggable_arm64",
+        },
+    },
+    filename: "microdroid_16k_initrd_debuggable.img",
+}
+
+prebuilt_etc {
     name: "microdroid_gki-android15-6.6_initrd_debuggable",
     // We don't have ramdisk for architectures other than x86_64 & arm64
     src: ":empty_file",
@@ -218,6 +262,24 @@
 }
 
 prebuilt_etc {
+    name: "microdroid_16k_initrd_normal",
+    // We don't have ramdisk for architectures other than x86_64 & arm64
+    src: ":empty_file",
+    arch: {
+        // For x86_64 we emulate 16k by adding `page_shift=14` to bootconfig, that's why we need
+        // separate initrd.
+        x86_64: {
+            src: ":microdroid_16k_initrd_normal_x86_64",
+        },
+        // For arm64, the initrd for 16k kernel is the same.
+        arm64: {
+            src: ":microdroid_initrd_normal_arm64",
+        },
+    },
+    filename: "microdroid_16k_initrd_normal.img",
+}
+
+prebuilt_etc {
     name: "microdroid_gki-android15-6.6_initrd_normal",
     // We don't have ramdisk for architectures other than x86_64 & arm64
     src: ":empty_file",