package { default_applicable_licenses: ["Android-Apache-2.0"], } microdroid_shell_and_utilities = [ "reboot", "sh", "toolbox", "toybox", ] microdroid_rootdirs = [ "dev", "proc", "sys", "system", "vendor", "debug_ramdisk", "mnt", "apex", "linkerconfig", "second_stage_resources", "postinstall", ] microdroid_symlinks = [ { target: "/sys/kernel/debug", name: "d", }, ] android_filesystem { name: "microdroid", use_avb: true, avb_private_key: "microdroid.pem", avb_algorithm: "SHA256_RSA4096", deps: [ "init_second_stage", "microdroid_init_rc", "ueventd.rc", "libbinder", "libstdc++", "logcat", "logd", "run-as", "secilc", "adbd", "apexd", "debuggerd", "linker", "linkerconfig", "servicemanager", "tombstoned", "cgroups.json", // These files are temporary and only for test. // TODO(b/178993690): migrate cil files to Soong "microdroid_plat_mapping_file", "microdroid_plat_sepolicy_and_mapping.sha256", ] + microdroid_shell_and_utilities, multilib: { common: { deps: [ "com.android.runtime", "plat_sepolicy.cil", "plat_file_contexts", "plat_hwservice_contexts", "plat_property_contexts", "plat_service_contexts", "plat_keystore2_key_contexts", ], }, }, base_dir: "system", dirs: microdroid_rootdirs, symlinks: microdroid_symlinks, file_contexts: "microdroid_file_contexts", } prebuilt_etc { name: "microdroid_init_rc", filename: "init.rc", src: "init.rc", relative_install_path: "init/hw", installable: false, // avoid collision with system partition's init.rc } android_filesystem { name: "microdroid_vendor", use_avb: true, deps: [ "microdroid_plat_sepolicy_vers.txt", "microdroid_vendor_sepolicy.cil", "microdroid_plat_pub_versioned.cil", "microdroid_precompiled_sepolicy", "microdroid_precompiled_sepolicy.plat_sepolicy_and_mapping.sha256", ], avb_private_key: "microdroid.pem", avb_algorithm: "SHA256_RSA4096", file_contexts: "microdroid_vendor_file_contexts", } prebuilt_etc { name: "microdroid_plat_sepolicy_vers.txt", src: "plat_sepolicy_vers.txt", filename: "plat_sepolicy_vers.txt", sub_dir: "selinux", installable: false, } 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", }, { name: "vendor", filesystem: ":microdroid_vendor", }, ], }, ], } bootimg { name: "microdroid_boot-5.10", ramdisk_module: "microdroid_ramdisk-5.10", // We don't have kernel for arm and x86. But Soong demands one when it builds for // arm or x86 target. Satisfy that by providing an empty file as the kernel. kernel_prebuilt: "empty_kernel", arch: { arm64: { kernel_prebuilt: ":kernel_prebuilts-5.10-arm64", }, x86_64: { kernel_prebuilt: ":kernel_prebuilts-5.10-x86_64", }, }, // TODO(jiyong): change the name to init, cause it's confusing cmdline: "rdinit=/bin/init_vendor " + "panic=-1 " + // TODO(b/181936135) make the ratelimiting conditional; ratelimiting on prod build "printk.devkmsg=on " + "androidboot.first_stage_console=1 " + "androidboot.hardware=microdroid " + "androidboot.boot_devices=10000.pci " + // TODO(b/181747352) remove this to enforce selinux "androidboot.selinux=permissive", dtb_prebuilt: "dummy_dtb.img", header_version: "4", 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: "4", vendor_boot: true, partition_name: "vendor_boot", } android_filesystem { name: "microdroid_vendor_ramdisk-5.10", arch: { arm64: { deps: ["virt_device_prebuilts_kernel_modules-5.10-arm64"], }, x86_64: { 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)", } genrule { name: "microdroid_plat_sepolicy_and_mapping.sha256_gen", srcs: [ ":plat_sepolicy.cil", ":microdroid_plat_mapping_file", ], out: ["plat_sepolicy_and_mapping.sha256"], cmd: "cat $(in) | sha256sum | cut -d' ' -f1 > $(out)", } // sepolicy sha256 for system prebuilt_etc { name: "microdroid_plat_sepolicy_and_mapping.sha256", src: ":microdroid_plat_sepolicy_and_mapping.sha256_gen", filename: "plat_sepolicy_and_mapping.sha256", relative_install_path: "selinux", installable: false, } // sepolicy sha256 for vendor (filename differs) prebuilt_etc { name: "microdroid_precompiled_sepolicy.plat_sepolicy_and_mapping.sha256", src: ":microdroid_plat_sepolicy_and_mapping.sha256_gen", filename: "precompiled_sepolicy.plat_sepolicy_and_mapping.sha256", relative_install_path: "selinux", installable: false, } genrule { name: "microdroid_precompiled_sepolicy_gen", tools: ["secilc"], srcs: [ ":plat_sepolicy.cil", ":microdroid_plat_mapping_file", ":microdroid_plat_pub_versioned.cil", ":microdroid_vendor_sepolicy.cil", ], out: ["precompiled_sepolicy"], cmd: "$(location secilc) -m -M true -G -c 30 $(in) -o $(out) -f /dev/null", } prebuilt_etc { name: "microdroid_precompiled_sepolicy", src: ":microdroid_precompiled_sepolicy_gen", filename: "precompiled_sepolicy", relative_install_path: "selinux", installable: false, }