Merge "[LSC] Add LOCAL_LICENSE_KINDS to packages/modules/Virtualization"
diff --git a/apex/Android.bp b/apex/Android.bp
index 4f7201a..0985577 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -26,7 +26,10 @@
             ],
         },
     },
-    binaries: ["assemble_cvd"],
+    binaries: [
+        "assemble_cvd",
+        "virtmanager",
+    ],
     filesystems: ["microdroid"],
 }
 
diff --git a/microdroid/Android.bp b/microdroid/Android.bp
index fc26f89..a44eb26 100644
--- a/microdroid/Android.bp
+++ b/microdroid/Android.bp
@@ -59,11 +59,21 @@
         "servicemanager",
         "tombstoned",
         "cgroups.json",
+
+        // These two files are temporary and only for test.
+        // TODO(b/178993690): migrate cil files to Soong
+        "microdroid_plat_sepolicy.cil",
+        "microdroid_plat_mapping_file",
     ] + microdroid_shell_and_utilities,
     multilib: {
         common: {
             deps: [
                 "com.android.runtime",
+                "plat_file_contexts",
+                "plat_hwservice_contexts",
+                "plat_property_contexts",
+                "plat_service_contexts",
+                "plat_keystore2_key_contexts",
             ],
         },
     },
@@ -81,17 +91,85 @@
     installable: false, // avoid collision with system partition's init.rc
 }
 
+logical_partition {
+    name: "microdroid_super",
+    sparse: true,
+    // TODO(b/181107248): remove this hard-coded value
+    size: "104857600",
+    groups: [
+        {
+            name: "mygroup",
+            // TODO(b/181107248): remove this hard-coded value
+            size: "80000000",
+            partitions: [
+                {
+                    name: "system",
+                    filesystem: ":microdroid",
+                },
+            ],
+        },
+    ],
+}
+
 bootimg {
-    name: "microdroid_vendor_boot-5.10",
+    name: "microdroid_boot-5.10",
     ramdisk_module: "microdroid_ramdisk-5.10",
+    enabled: false,
+    arch: {
+        arm64: {
+            kernel_prebuilt: ":kernel_prebuilts-5.10-arm64",
+            enabled: true,
+        },
+        x86_64: {
+            kernel_prebuilt: ":kernel_prebuilts-5.10-x86_64",
+            enabled: true,
+        },
+    },
+    // TODO(jiyong): change the name to init, cause it's confusing
+    cmdline: "rdinit=/bin/init_vendor",
     dtb_prebuilt: "dummy_dtb.img",
     header_version: "3",
-    vendor_boot: true,
-    partition_name: "vendor_boot",
+    partition_name: "boot",
 }
 
 android_filesystem {
     name: "microdroid_ramdisk-5.10",
+    deps: [
+        "init_first_stage_soong",
+    ],
+    dirs: [
+        "dev",
+        "proc",
+        "sys",
+
+        // TODO(jiyong): remove these
+        "mnt",
+        "debug_ramdisk",
+        "second_stage_resources",
+    ],
+    type: "compressed_cpio",
+}
+
+bootimg {
+    name: "microdroid_vendor_boot-5.10",
+    ramdisk_module: "microdroid_vendor_ramdisk-5.10",
+    dtb_prebuilt: "dummy_dtb.img",
+    header_version: "3",
+    vendor_boot: true,
+    partition_name: "vendor_boot",
+    enabled: false,
+    arch: {
+        arm64: {
+            enabled: true,
+        },
+        x86_64: {
+            enabled: true,
+        },
+    },
+}
+
+android_filesystem {
+    name: "microdroid_vendor_ramdisk-5.10",
     arch: {
         arm64: {
             deps: ["virt_device_prebuilts_kernel_modules-5.10-arm64"],
@@ -100,5 +178,40 @@
             deps: ["virt_device_prebuilts_kernel_modules-5.10-x86_64"],
         },
     },
+    deps: [
+        "microdroid_fstab",
+    ],
+    base_dir: "first_stage_ramdisk",
     type: "compressed_cpio",
+    symlinks: [
+        {
+            target: "etc/fstab",
+            name: "first_stage_ramdisk/fstab.microdroid",
+        },
+        {
+            target: "first_stage_ramdisk/lib",
+            name: "lib",
+        },
+    ],
+}
+
+prebuilt_etc {
+    name: "microdroid_fstab",
+    src: "fstab",
+    filename: "fstab",
+    installable: false,
+}
+
+prebuilt_etc {
+    name: "microdroid_uboot_env",
+    src: ":microdroid_uboot_env_gen",
+    filename: "uboot_env.img",
+}
+
+genrule {
+    name: "microdroid_uboot_env_gen",
+    tools: ["mkenvimage_host"],
+    srcs: ["uboot-env.txt"],
+    out: ["output.img"],
+    cmd: "$(location mkenvimage_host) -s 4096 -o $(out) $(in)",
 }
diff --git a/microdroid/fstab b/microdroid/fstab
new file mode 100644
index 0000000..494f5b4
--- /dev/null
+++ b/microdroid/fstab
@@ -0,0 +1 @@
+system /system ext4 noatime,ro,errors=panic wait,first_stage_mount,logical
diff --git a/microdroid/uboot-env.txt b/microdroid/uboot-env.txt
new file mode 100644
index 0000000..cdd2c19
--- /dev/null
+++ b/microdroid/uboot-env.txt
@@ -0,0 +1,12 @@
+# Static u-boot environment variables for microdroid. See b/180481192
+
+# Boot the device following the Android boot procedure
+bootcmd=boot_android virtio -
+
+# Kernel commandlines
+bootargs=rdinit=/bin/init_vendor panic=-1 androidboot.first_stage_console=1 androidboot.hardware=microdroid androidboot.boot_devices=10000.pci
+
+# 0:2 is the misc partition
+bootdevice=0:2
+bootdelay=0
+fdtaddr=0x80000000
diff --git a/tests/hostside/AndroidTest.xml b/tests/hostside/AndroidTest.xml
index c97a1df..0995881 100644
--- a/tests/hostside/AndroidTest.xml
+++ b/tests/hostside/AndroidTest.xml
@@ -26,7 +26,7 @@
         <!-- CrosVM is installed. -->
         <option name="run-command" value="ls /apex/com.android.virt/bin/crosvm" />
         <!-- Virt Manager is installed. -->
-        <option name="run-command" value="which virtmanager" />
+        <option name="run-command" value="ls /apex/com.android.virt/bin/virtmanager" />
     </target_preparer>
 
     <!-- Push test binaries to the device. -->
diff --git a/tests/hostside/java/android/virt/test/VsockTest.java b/tests/hostside/java/android/virt/test/VsockTest.java
index 4895c9a..9de4f2e 100644
--- a/tests/hostside/java/android/virt/test/VsockTest.java
+++ b/tests/hostside/java/android/virt/test/VsockTest.java
@@ -35,7 +35,7 @@
     private static final String   TEST_MESSAGE = "HelloWorld";
 
     private static final String   SERVER_TARGET = "vsock_server";
-    private static final String   VIRT_MANAGER_COMMAND = "virtmanager";
+    private static final String   VIRT_MANAGER_COMMAND = "/apex/com.android.virt/bin/virtmanager";
 
     @Test
     public void testVsockServer() throws Exception {
diff --git a/virtmanager/Android.bp b/virtmanager/Android.bp
index 9681afc..5ff5db4 100644
--- a/virtmanager/Android.bp
+++ b/virtmanager/Android.bp
@@ -15,4 +15,5 @@
         "libserde",
         "libanyhow",
     ],
+    apex_available: ["com.android.virt"],
 }
diff --git a/virtmanager/aidl/Android.bp b/virtmanager/aidl/Android.bp
index b9fd134..ebe5624 100644
--- a/virtmanager/aidl/Android.bp
+++ b/virtmanager/aidl/Android.bp
@@ -16,6 +16,7 @@
         },
         rust: {
             enabled: true,
+            apex_available: ["com.android.virt"],
         },
     },
 }