Add microdroid_16k kernel

Since microdroid_16k kernel uses the same initrd as regulard microdroid
kernel, I've added a small hack in payload.rs. If we want, we can add a
more generic solution in a follow-up patch.

Additionally, since 16k kernels are only supported for 16k kernel builds
(trying to build x86_64 16k kernel on android15-6.6 branch results in
"ERROR: 16k pages not supported on x86_64."), the microdroid_16k related
soong modules are only enabled for products that set
TARGET_BOOTS_16K := true. This is needed to make checkbuild on x86_64
products happy.

Test: adb shell /apex/com.android.virt/bin info
Test: atest virtualizationmanager_device_test
Change-Id: Id74da6bb73093cc5ee60c58d99a8c218a31468c9
diff --git a/build/microdroid/Android.bp b/build/microdroid/Android.bp
index abb97da..6fa15fe 100644
--- a/build/microdroid/Android.bp
+++ b/build/microdroid/Android.bp
@@ -377,6 +377,11 @@
 }
 
 prebuilt_etc {
+    name: "microdroid_16k.json",
+    src: "microdroid_16k.json",
+}
+
+prebuilt_etc {
     name: "microdroid_manifest",
     src: "microdroid_manifest.xml",
     filename: "manifest.xml",
@@ -507,6 +512,29 @@
     ],
 }
 
+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",
+        },
+    },
+    include_descriptors_from_images: [
+        ":microdroid_initrd_normal_hashdesc",
+        ":microdroid_initrd_debug_hashdesc",
+    ],
+    // Currently x86_64 arch doesn't support building 16k kernels, meaning that
+    // we don't have microdroid_16k kernel prebuilts in x86_64.
+    // We need to disable this module on x86_64 products, otherwise checkbuild
+    // will complain.
+    enabled: select(soong_config_variable("ANDROID", "target_boots_16k"), {
+        true: true,
+        default: false,
+    }),
+}
+
 prebuilt_etc {
     name: "microdroid_kernel",
     src: ":empty_file",
@@ -521,6 +549,23 @@
     },
 }
 
+prebuilt_etc {
+    name: "microdroid_kernel_16k",
+    src: ":empty_file",
+    relative_install_path: "fs",
+    arch: {
+        arm64: {
+            src: ":microdroid_kernel_16k_signed",
+        },
+    },
+    // The microdroid_kernel_16k_signed is only enabled for products that set
+    // TARGET_BOOTS_16K, so we also need to conditionally enable this module.
+    enabled: select(soong_config_variable("ANDROID", "target_boots_16k"), {
+        true: true,
+        default: false,
+    }),
+}
+
 ///////////////////////////////////////
 // GKI-android15-6.6
 ///////////////////////////////////////
diff --git a/build/microdroid/microdroid_16k.json b/build/microdroid/microdroid_16k.json
new file mode 100644
index 0000000..ba6a949
--- /dev/null
+++ b/build/microdroid/microdroid_16k.json
@@ -0,0 +1,21 @@
+{
+  "kernel": "/apex/com.android.virt/etc/fs/microdroid_kernel_16k",
+  "disks": [
+    {
+      "partitions": [
+        {
+          "label": "vbmeta_a",
+          "path": "/apex/com.android.virt/etc/fs/microdroid_vbmeta.img"
+        },
+        {
+          "label": "super",
+          "path": "/apex/com.android.virt/etc/fs/microdroid_super.img"
+        }
+      ],
+      "writable": false
+    }
+  ],
+  "memory_mib": 256,
+  "console_input_device": "hvc0",
+  "platform_version": "~1.0"
+}