| package { | 
 |     default_applicable_licenses: ["Android-Apache-2.0"], | 
 | } | 
 |  | 
 | microdroid_filesystem_images = [ | 
 |     "microdroid_boot", | 
 |     "microdroid_bootconfig_debuggable", | 
 |     "microdroid_bootconfig_normal", | 
 |     "microdroid_init_boot", | 
 |     "microdroid_super", | 
 |     "microdroid_uboot_env", | 
 |     "microdroid_vbmeta", | 
 |     "microdroid_vbmeta_bootconfig", | 
 |     "microdroid_vendor_boot", | 
 | ] | 
 |  | 
 | soong_config_module_type { | 
 |     name: "virt_apex", | 
 |     module_type: "apex", | 
 |     config_namespace: "ANDROID", | 
 |     bool_variables: ["avf_enabled"], | 
 |     properties: ["defaults"], | 
 | } | 
 |  | 
 | virt_apex { | 
 |     name: "com.android.virt", | 
 |     soong_config_variables: { | 
 |         avf_enabled: { | 
 |             defaults: ["com.android.virt_avf_enabled"], | 
 |             conditions_default: { | 
 |                 defaults: ["com.android.virt_avf_disabled"], | 
 |             }, | 
 |         }, | 
 |     }, | 
 | } | 
 |  | 
 | apex_defaults { | 
 |     name: "com.android.virt_common", | 
 |     // TODO(jiyong): make it updatable | 
 |     updatable: false, | 
 |     future_updatable: true, | 
 |     platform_apis: true, | 
 |  | 
 |     manifest: "manifest.json", | 
 |  | 
 |     key: "com.android.virt.key", | 
 |     certificate: ":com.android.virt.certificate", | 
 |  | 
 |     apps: [ | 
 |         "android.system.virtualmachine.res", | 
 |     ], | 
 |  | 
 |     file_contexts: ":com.android.virt-file_contexts", | 
 |     canned_fs_config: "canned_fs_config", | 
 |  | 
 |     bootclasspath_fragments: [ | 
 |         "com.android.virt-bootclasspath-fragment", | 
 |     ], | 
 |     jni_libs: [ | 
 |         "libvirtualmachine_jni", | 
 |     ], | 
 | } | 
 |  | 
 | apex_defaults { | 
 |     name: "com.android.virt_avf_enabled", | 
 |  | 
 |     defaults: ["com.android.virt_common"], | 
 |  | 
 |     custom_sign_tool: "sign_virt_apex", | 
 |  | 
 |     // crosvm and virtualizationservice are only enabled for 64-bit targets on device | 
 |     arch: { | 
 |         arm64: { | 
 |             binaries: [ | 
 |                 "crosvm", | 
 |                 "virtualizationservice", | 
 |             ], | 
 |             filesystems: microdroid_filesystem_images, | 
 |         }, | 
 |         x86_64: { | 
 |             binaries: [ | 
 |                 "crosvm", | 
 |                 "virtualizationservice", | 
 |             ], | 
 |             filesystems: microdroid_filesystem_images, | 
 |         }, | 
 |     }, | 
 |     binaries: [ | 
 |         "fd_server", | 
 |         "vm", | 
 |     ], | 
 |     prebuilts: [ | 
 |         "com.android.virt.init.rc", | 
 |         "features_com.android.virt.xml", | 
 |         "microdroid_initrd_debuggable", | 
 |         "microdroid_initrd_normal", | 
 |         "microdroid.json", | 
 |         "microdroid_bootloader", | 
 |         "microdroid_bootloader.avbpubkey", | 
 |         "microdroid_kernel", | 
 |     ], | 
 |     host_required: [ | 
 |         "vm_shell", | 
 |     ], | 
 |     apps: [ | 
 |         "EmptyPayloadApp", | 
 |     ], | 
 | } | 
 |  | 
 | apex_defaults { | 
 |     name: "com.android.virt_avf_disabled", | 
 |  | 
 |     defaults: ["com.android.virt_common"], | 
 | } | 
 |  | 
 | apex_key { | 
 |     name: "com.android.virt.key", | 
 |     public_key: "com.android.virt.avbpubkey", | 
 |     private_key: "com.android.virt.pem", | 
 | } | 
 |  | 
 | android_app_certificate { | 
 |     name: "com.android.virt.certificate", | 
 |     certificate: "com.android.virt", | 
 | } | 
 |  | 
 | prebuilt_etc { | 
 |     name: "com.android.virt.init.rc", | 
 |     src: "virtualizationservice.rc", | 
 |     filename: "init.rc", | 
 |     installable: false, | 
 | } | 
 |  | 
 | // Virt apex needs a custom signer for its payload | 
 | python_binary_host { | 
 |     name: "sign_virt_apex", | 
 |     srcs: [ | 
 |         "sign_virt_apex.py", | 
 |     ], | 
 |     version: { | 
 |         py3: { | 
 |             embedded_launcher: true, | 
 |         }, | 
 |     }, | 
 |     required: [ | 
 |         "img2simg", | 
 |         "lpmake", | 
 |         "lpunpack", | 
 |         "simg2img", | 
 |     ], | 
 | } | 
 |  | 
 | sh_test_host { | 
 |     name: "sign_virt_apex_test", | 
 |     src: "sign_virt_apex_test.sh", | 
 |     test_config: "sign_virt_apex_test.xml", | 
 |     data_bins: [ | 
 |         // deapexer | 
 |         "deapexer", | 
 |         "debugfs_static", | 
 |         "blkid", | 
 |         "fsck.erofs", | 
 |  | 
 |         // sign_virt_apex | 
 |         "avbtool", | 
 |         "img2simg", | 
 |         "lpmake", | 
 |         "lpunpack", | 
 |         "sign_virt_apex", | 
 |         "simg2img", | 
 |     ], | 
 |     data_libs: [ | 
 |         "libbase", | 
 |         "libc++", | 
 |         "libcrypto_utils", | 
 |         "libcrypto", | 
 |         "libext4_utils", | 
 |         "liblog", | 
 |         "liblp", | 
 |         "libsparse", | 
 |         "libz", | 
 |     ], | 
 |     data: [ | 
 |         ":com.android.virt", | 
 |         ":test.com.android.virt.pem", | 
 |     ], | 
 |     test_suites: ["general-tests"], | 
 | } | 
 |  | 
 | filegroup { | 
 |     name: "test.com.android.virt.pem", | 
 |     srcs: ["test.com.android.virt.pem"], | 
 | } | 
 |  | 
 | filegroup { | 
 |     name: "test2.com.android.virt.pem", | 
 |     srcs: ["test2.com.android.virt.pem"], | 
 | } | 
 |  | 
 | // custom tool to replace bytes in a file | 
 | python_binary_host { | 
 |     name: "replace_bytes", | 
 |     srcs: [ | 
 |         "replace_bytes.py", | 
 |     ], | 
 |     version: { | 
 |         py3: { | 
 |             embedded_launcher: true, | 
 |         }, | 
 |     }, | 
 | } | 
 |  | 
 | // Encapsulate the contributions made by the com.android.virt to the bootclasspath. | 
 | bootclasspath_fragment { | 
 |     name: "com.android.virt-bootclasspath-fragment", | 
 |     contents: ["framework-virtualization"], | 
 |     apex_available: ["com.android.virt"], | 
 |  | 
 |     // The bootclasspath_fragments that provide APIs on which this depends. | 
 |     fragments: [ | 
 |         { | 
 |             apex: "com.android.art", | 
 |             module: "art-bootclasspath-fragment", | 
 |         }, | 
 |     ], | 
 |  | 
 |     // Additional stubs libraries that this fragment's contents use which are | 
 |     // not provided by another bootclasspath_fragment. | 
 |     additional_stubs: [ | 
 |         "android-non-updatable", | 
 |     ], | 
 |  | 
 |     hidden_api: { | 
 |  | 
 |         // This module does not contain any split packages. | 
 |         split_packages: [], | 
 |  | 
 |         // The following packages and all their subpackages currently only | 
 |         // contain classes from this bootclasspath_fragment. Listing a package | 
 |         // here won't prevent other bootclasspath modules from adding classes in | 
 |         // any of those packages but it will prevent them from adding those | 
 |         // classes into an API surface, e.g. public, system, etc.. Doing so will | 
 |         // result in a build failure due to inconsistent flags. | 
 |         package_prefixes: [ | 
 |             "android.system.virtualmachine", | 
 |             "android.system.virtualizationservice", | 
 |             // android.sysprop.*, renamed by jarjar | 
 |             "com.android.system.virtualmachine.sysprop", | 
 |         ], | 
 |     }, | 
 | } |