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/Android.bp b/build/microdroid/Android.bp
index abb97da..d5d8108 100644
--- a/build/microdroid/Android.bp
+++ b/build/microdroid/Android.bp
@@ -344,6 +344,11 @@
     cmd: "cat $(in) > $(out)",
 }
 
+filegroup {
+    name: "microdroid_16k_bootconfig_x86_64_gen",
+    srcs: ["bootconfig.x86_64_16k"],
+}
+
 prebuilt_etc {
     name: "microdroid_fstab",
     src: "fstab.microdroid",
@@ -377,6 +382,11 @@
 }
 
 prebuilt_etc {
+    name: "microdroid_16k.json",
+    src: "microdroid_16k.json",
+}
+
+prebuilt_etc {
     name: "microdroid_manifest",
     src: "microdroid_manifest.xml",
     filename: "manifest.xml",
@@ -431,6 +441,12 @@
     src: ":microdroid_initrd_normal",
 }
 
+avb_gen_vbmeta_image {
+    name: "microdroid_16k_initrd_normal_hashdesc",
+    defaults: ["microdroid_initrd_normal_defaults"],
+    src: ":microdroid_16k_initrd_normal",
+}
+
 // python -c "import hashlib; print(hashlib.sha256(b'initrd_debug').hexdigest())"
 initrd_debug_salt = "8ab9dc9cb7e6456700ff6ef18c6b4c3acc24c5fa5381b829563f8d7a415d869a"
 
@@ -447,6 +463,12 @@
     src: ":microdroid_initrd_debuggable",
 }
 
+avb_gen_vbmeta_image {
+    name: "microdroid_16k_initrd_debug_hashdesc",
+    defaults: ["microdroid_initrd_debug_defaults"],
+    src: ":microdroid_16k_initrd_debuggable",
+}
+
 soong_config_module_type {
     name: "flag_aware_avb_add_hash_footer_defaults",
     module_type: "avb_add_hash_footer_defaults",
@@ -521,6 +543,40 @@
     },
 }
 
+avb_add_hash_footer {
+    name: "microdroid_kernel_16k_signed",
+    defaults: ["microdroid_kernel_signed_defaults"],
+    filename: "microdroid_kernel_16k",
+    arch: {
+        arm64: {
+            src: ":microdroid_kernel_16k_prebuilt-arm64",
+        },
+        // There is no 16k x86_64 kernel. Instead the 16k emulation is triggered by adding
+        // `page_shift=14` to the kernel cmdline or bootconfig.
+        x86_64: {
+            src: ":microdroid_kernel_prebuilt-x86_64",
+        },
+    },
+    include_descriptors_from_images: [
+        ":microdroid_16k_initrd_normal_hashdesc",
+        ":microdroid_16k_initrd_debug_hashdesc",
+    ],
+}
+
+prebuilt_etc {
+    name: "microdroid_kernel_16k",
+    src: ":empty_file",
+    relative_install_path: "fs",
+    arch: {
+        arm64: {
+            src: ":microdroid_kernel_16k_signed",
+        },
+        x86_64: {
+            src: ":microdroid_kernel_16k_signed",
+        },
+    },
+}
+
 ///////////////////////////////////////
 // GKI-android15-6.6
 ///////////////////////////////////////