• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package {
2    default_applicable_licenses: ["Android-Apache-2.0"],
3}
4
5microdroid_shell_and_utilities = [
6    "reboot",
7    "sh",
8    "strace",
9    "toolbox",
10    "toybox",
11]
12
13microdroid_rootdirs = [
14    "dev",
15    "proc",
16    "sys",
17
18    "system",
19    "debug_ramdisk",
20    "mnt",
21    "data",
22
23    "apex",
24    "linkerconfig",
25    "second_stage_resources",
26
27    // Ideally we should only create the /vendor for Microdroid VMs that will mount /vendor, but
28    // for the time being we will just create it unconditionally.
29    "vendor",
30]
31
32microdroid_symlinks = [
33    {
34        target: "/sys/kernel/debug",
35        name: "d",
36    },
37    {
38        target: "/system/etc",
39        name: "etc",
40    },
41    {
42        target: "/system/bin",
43        name: "bin",
44    },
45]
46
47android_system_image {
48    name: "microdroid",
49    use_avb: true,
50    avb_private_key: ":microdroid_sign_key",
51    avb_algorithm: "SHA256_RSA4096",
52    avb_hash_algorithm: "sha256",
53    use_fec: false,
54    partition_name: "system",
55    deps: [
56        "init_second_stage.microdroid",
57        "microdroid_build_prop",
58        "microdroid_init_debug_policy",
59        "microdroid_init_rc",
60        "microdroid_ueventd_rc",
61        "microdroid_launcher",
62
63        "libbinder_ndk",
64        "libstdc++",
65
66        // "com.android.adbd" requires these,
67        "libadbd_auth",
68        "libadbd_fs",
69
70        // "com.android.art" requires
71        "heapprofd_client_api",
72        "libartpalette-system",
73
74        "apexd.microdroid",
75        "debuggerd",
76        "linker",
77        "cgroups.json",
78        "task_profiles.json",
79        "public.libraries.android.txt",
80
81        "microdroid_event-log-tags",
82        "microdroid_file_contexts",
83        "microdroid_manifest",
84        "microdroid_property_contexts",
85        "e2fsck.microdroid",
86        "mke2fs.microdroid",
87        "resize2fs.microdroid",
88        "microdroid_fstab",
89
90        "libvm_payload", // used by payload to interact with microdroid manager
91
92        "prng_seeder_microdroid",
93
94        // Binaries required to capture traces in Microdroid.
95        "atrace",
96        "traced",
97        "traced_probes",
98        "perfetto",
99    ] + select(release_flag("RELEASE_AVF_ENABLE_MULTI_TENANT_MICRODROID_VM"), {
100        true: [
101            "microdroid_etc_passwd",
102            "microdroid_etc_group",
103        ],
104        default: [],
105    }) + microdroid_shell_and_utilities,
106    multilib: {
107        common: {
108            deps: [
109                // non-updatable & mandatory apexes
110                "com.android.runtime",
111
112                "microdroid_crashdump_initrd",
113                "microdroid_precompiled_sepolicy",
114            ],
115        },
116        lib64: {
117            deps: [
118                "apkdmverity",
119                "authfs",
120                "authfs_service",
121                "encryptedstore",
122                "microdroid_kexec",
123                "microdroid_manager",
124                "zipfuse",
125            ] + select(release_flag("RELEASE_AVF_ENABLE_DICE_CHANGES"), {
126                true: ["derive_microdroid_vendor_dice_node"],
127                default: [],
128            }),
129        },
130    },
131    arch: {
132        // b/273792258: These could be in multilib.lib64 except that
133        // microdroid_crashdump_kernel doesn't exist for riscv64 yet
134        arm64: {
135            deps: [
136                "microdroid_crashdump_kernel",
137            ],
138        },
139        x86_64: {
140            deps: [
141                "microdroid_crashdump_kernel",
142            ],
143        },
144    },
145    linker_config: {
146        gen_linker_config: true,
147        linker_config_srcs: ["linker.config.json"],
148    },
149    base_dir: "system",
150    dirs: microdroid_rootdirs + select(release_flag("RELEASE_AVF_ENABLE_DICE_CHANGES"), {
151        true: ["microdroid_resources"],
152        default: [],
153    }),
154    symlinks: microdroid_symlinks,
155    file_contexts: ":microdroid_file_contexts.gen",
156    // For deterministic output, use fake_timestamp, hard-coded uuid
157    fake_timestamp: "1611569676",
158    // python -c "import uuid; print(uuid.uuid5(uuid.NAMESPACE_URL, 'www.android.com/avf/microdroid/system'))"
159    uuid: "5fe079c6-f01a-52be-87d3-d415231a72ad",
160}
161
162prebuilt_etc {
163    name: "microdroid_init_rc",
164    filename: "init.rc",
165    src: "init.rc",
166    relative_install_path: "init/hw",
167    no_full_install: true, // avoid collision with system partition's init.rc
168}
169
170prebuilt_etc {
171    name: "microdroid_ueventd_rc",
172    filename: "ueventd.rc",
173    src: "ueventd.rc",
174    no_full_install: true, // avoid collision with system partition's ueventd.rc
175}
176
177prebuilt_etc {
178    name: "microdroid_etc_passwd",
179    src: "microdroid_passwd",
180    filename: "passwd",
181    no_full_install: true,
182}
183
184prebuilt_etc {
185    name: "microdroid_etc_group",
186    src: "microdroid_group",
187    filename: "group",
188    no_full_install: true,
189}
190
191prebuilt_root {
192    name: "microdroid_build_prop",
193    filename: "build.prop",
194    src: "build.prop",
195    arch: {
196        x86_64: {
197            src: ":microdroid_build_prop_gen_x86_64",
198        },
199        arm64: {
200            src: ":microdroid_build_prop_gen_arm64",
201        },
202    },
203    no_full_install: true,
204}
205
206java_genrule {
207    name: "microdroid_build_prop_gen_x86_64",
208    srcs: [
209        "build.prop",
210        ":system-build.prop",
211    ],
212    out: ["build.prop.out"],
213    cmd: "(echo '# build properties from system/build.prop' && " +
214        "grep ro\\.build\\.version\\.codename= $(location :system-build.prop) && " +
215        "grep ro\\.build\\.version\\.release= $(location :system-build.prop) && " +
216        "grep ro\\.build\\.version\\.sdk= $(location :system-build.prop) && " +
217        "grep ro\\.build\\.version\\.security_patch= $(location :system-build.prop) && " +
218        "grep ro\\.build\\.version\\.known_codenames= $(location :system-build.prop) && " +
219        "cat $(location build.prop) && " +
220        "echo ro.product.cpu.abilist=x86_64 && " +
221        "echo ro.product.cpu.abi=x86_64) > $(out)",
222}
223
224java_genrule {
225    name: "microdroid_build_prop_gen_arm64",
226    srcs: [
227        "build.prop",
228        ":system-build.prop",
229    ],
230    out: ["build.prop.out"],
231    cmd: "(echo '# build properties from system/build.prop' && " +
232        "grep ro\\.build\\.version\\.codename= $(location :system-build.prop) && " +
233        "grep ro\\.build\\.version\\.release= $(location :system-build.prop) && " +
234        "grep ro\\.build\\.version\\.sdk= $(location :system-build.prop) && " +
235        "grep ro\\.build\\.version\\.security_patch= $(location :system-build.prop) && " +
236        "grep ro\\.build\\.version\\.known_codenames= $(location :system-build.prop) && " +
237        "cat $(location build.prop) && " +
238        "echo ro.product.cpu.abilist=arm64-v8a && " +
239        "echo ro.product.cpu.abi=arm64-v8a) > $(out)",
240}
241
242// Need to keep microdroid_vendor for the release configurations that don't
243// have RELEASE_AVF_ENABLE_VENDOR_MODULES build flag enabled.
244android_filesystem {
245    name: "microdroid_vendor",
246    partition_name: "vendor",
247    use_avb: true,
248    avb_private_key: ":microdroid_sign_key",
249    avb_algorithm: "SHA256_RSA4096",
250    avb_hash_algorithm: "sha256",
251    use_fec: false,
252    file_contexts: ":microdroid_vendor_file_contexts.gen",
253    // For deterministic output, use fake_timestamp, hard-coded uuid
254    fake_timestamp: "1611569676",
255    // python -c "import uuid; print(uuid.uuid5(uuid.NAMESPACE_URL, 'www.android.com/avf/microdroid/vendor'))"
256    uuid: "156d40d7-8d8e-5c99-8913-ec82de549a70",
257}
258
259soong_config_module_type {
260    name: "flag_aware_microdroid_super_partition",
261    module_type: "logical_partition",
262    config_namespace: "ANDROID",
263    bool_variables: [
264        "release_avf_enable_vendor_modules",
265    ],
266    properties: [
267        "default_group",
268    ],
269}
270
271flag_aware_microdroid_super_partition {
272    name: "microdroid_super",
273    sparse: true,
274    size: "auto",
275    default_group: [
276        {
277            name: "system_a",
278            filesystem: ":microdroid",
279        },
280    ],
281    soong_config_variables: {
282        release_avf_enable_vendor_modules: {
283            conditions_default: {
284                default_group: [
285                    {
286                        name: "vendor_a",
287                        filesystem: ":microdroid_vendor",
288                    },
289                ],
290            },
291        },
292    },
293}
294
295android_filesystem {
296    name: "microdroid_ramdisk",
297    deps: [
298        "init_first_stage.microdroid",
299    ],
300    dirs: [
301        "dev",
302        "proc",
303        "sys",
304
305        "mnt",
306        "debug_ramdisk",
307        "second_stage_resources",
308    ] + select(release_flag("RELEASE_AVF_ENABLE_DICE_CHANGES"), {
309        true: ["microdroid_resources"],
310        default: [],
311    }),
312    type: "compressed_cpio",
313}
314
315android_filesystem {
316    name: "microdroid_first_stage_ramdisk",
317    deps: [
318        "microdroid_fstab",
319    ],
320    base_dir: "first_stage_ramdisk",
321    type: "compressed_cpio",
322    symlinks: [
323        {
324            target: "etc/fstab.microdroid",
325            name: "first_stage_ramdisk/fstab.microdroid",
326        },
327        {
328            target: "first_stage_ramdisk/lib",
329            name: "lib",
330        },
331    ],
332}
333
334genrule {
335    name: "microdroid_bootconfig_arm64_gen",
336    srcs: [
337        "bootconfig.common",
338        "bootconfig.arm64",
339    ],
340    out: ["bootconfig"],
341    cmd: "cat $(in) > $(out)",
342}
343
344genrule {
345    name: "microdroid_bootconfig_x86_64_gen",
346    srcs: [
347        "bootconfig.common",
348        "bootconfig.x86_64",
349    ],
350    out: ["bootconfig"],
351    cmd: "cat $(in) > $(out)",
352}
353
354filegroup {
355    name: "microdroid_16k_bootconfig_x86_64_gen",
356    srcs: ["bootconfig.x86_64_16k"],
357}
358
359prebuilt_etc {
360    name: "microdroid_fstab",
361    src: "fstab.microdroid",
362    filename: "fstab.microdroid",
363    no_full_install: true,
364}
365
366// python -c "import hashlib; print(hashlib.sha256(b'bootloader').hexdigest())"
367bootloader_salt = "3b4a12881d11f33cff968a24d7c53723a8232cde9a8d91e29fdbd6a95ae6adf0"
368
369filegroup {
370    name: "microdroid_sign_key",
371    srcs: [":pvmfw_embedded_key"],
372}
373
374vbmeta {
375    name: "microdroid_vbmeta",
376    partition_name: "vbmeta",
377    private_key: ":microdroid_sign_key",
378    partitions: [
379        "microdroid",
380    ] + select(release_flag("RELEASE_AVF_ENABLE_VENDOR_MODULES"), {
381        true: [],
382        default: ["microdroid_vendor"],
383    }),
384}
385
386prebuilt_etc {
387    name: "microdroid.json",
388    src: "microdroid.json",
389}
390
391prebuilt_etc {
392    name: "microdroid_16k.json",
393    src: "microdroid_16k.json",
394}
395
396prebuilt_etc {
397    name: "microdroid_manifest",
398    src: "microdroid_manifest.xml",
399    filename: "manifest.xml",
400    relative_install_path: "vintf",
401    no_full_install: true,
402}
403
404prebuilt_etc {
405    name: "microdroid_event-log-tags",
406    src: "microdroid_event-log-tags",
407    filename: "event-log-tags",
408    no_full_install: true,
409}
410
411filegroup {
412    name: "microdroid_bootconfig_debuggable_src",
413    srcs: ["bootconfig.debuggable"],
414}
415
416filegroup {
417    name: "microdroid_bootconfig_normal_src",
418    srcs: ["bootconfig.normal"],
419}
420
421// python -c "import hashlib; print(hashlib.sha256(b'initrd_normal').hexdigest())"
422initrd_normal_salt = "8041a07d54ac82290f6d90bac1fa8d7fdbc4db974d101d60faf294749d1ebaf8"
423
424avb_gen_vbmeta_image_defaults {
425    name: "microdroid_initrd_defaults",
426    enabled: false,
427    arch: {
428        // Microdroid kernel is only available in these architectures.
429        arm64: {
430            enabled: true,
431        },
432        x86_64: {
433            enabled: true,
434        },
435    },
436}
437
438avb_gen_vbmeta_image_defaults {
439    name: "microdroid_initrd_normal_defaults",
440    defaults: ["microdroid_initrd_defaults"],
441    partition_name: "initrd_normal",
442    salt: initrd_normal_salt,
443}
444
445avb_gen_vbmeta_image {
446    name: "microdroid_initrd_normal_hashdesc",
447    defaults: ["microdroid_initrd_normal_defaults"],
448    src: ":microdroid_initrd_normal",
449}
450
451avb_gen_vbmeta_image {
452    name: "microdroid_16k_initrd_normal_hashdesc",
453    defaults: ["microdroid_initrd_normal_defaults"],
454    src: ":microdroid_16k_initrd_normal",
455}
456
457// python -c "import hashlib; print(hashlib.sha256(b'initrd_debug').hexdigest())"
458initrd_debug_salt = "8ab9dc9cb7e6456700ff6ef18c6b4c3acc24c5fa5381b829563f8d7a415d869a"
459
460avb_gen_vbmeta_image_defaults {
461    name: "microdroid_initrd_debug_defaults",
462    defaults: ["microdroid_initrd_defaults"],
463    partition_name: "initrd_debug",
464    salt: initrd_debug_salt,
465}
466
467avb_gen_vbmeta_image {
468    name: "microdroid_initrd_debug_hashdesc",
469    defaults: ["microdroid_initrd_debug_defaults"],
470    src: ":microdroid_initrd_debuggable",
471}
472
473avb_gen_vbmeta_image {
474    name: "microdroid_16k_initrd_debug_hashdesc",
475    defaults: ["microdroid_initrd_debug_defaults"],
476    src: ":microdroid_16k_initrd_debuggable",
477}
478
479avb_add_hash_footer_defaults {
480    name: "microdroid_kernel_signed_defaults",
481    src: ":empty_file",
482    partition_name: "boot",
483    private_key: ":microdroid_sign_key",
484    salt: bootloader_salt,
485    enabled: false,
486    arch: {
487        arm64: {
488            enabled: true,
489        },
490        x86_64: {
491            enabled: true,
492        },
493    },
494}
495
496MICRODROID_GKI_ROLLBACK_INDEX = 2
497
498avb_add_hash_footer_defaults {
499    name: "microdroid_kernel_cap_defaults",
500    // Below are properties that are conditionally set depending on value of build flags.
501    props: [
502        {
503            name: "com.android.virt.cap",
504            value: "secretkeeper_protection",
505        },
506    ],
507    rollback_index: MICRODROID_GKI_ROLLBACK_INDEX,
508}
509
510avb_add_hash_footer_defaults {
511    name: "microdroid_kernel_cap_with_uefi_defaults",
512    rollback_index: MICRODROID_GKI_ROLLBACK_INDEX,
513    props: [
514        {
515            name: "com.android.virt.cap",
516            value: "secretkeeper_protection|supports_uefi_boot",
517        },
518    ],
519}
520
521avb_add_hash_footer {
522    name: "microdroid_kernel_signed",
523    defaults: [
524        "microdroid_kernel_signed_defaults",
525        "microdroid_kernel_cap_defaults",
526    ],
527    filename: "microdroid_kernel",
528    arch: {
529        arm64: {
530            src: ":microdroid_kernel_prebuilt-arm64",
531        },
532        x86_64: {
533            src: ":microdroid_kernel_prebuilt-x86_64",
534        },
535    },
536    include_descriptors_from_images: [
537        ":microdroid_initrd_normal_hashdesc",
538        ":microdroid_initrd_debug_hashdesc",
539    ],
540}
541
542prebuilt_etc {
543    name: "microdroid_kernel",
544    src: ":empty_file",
545    relative_install_path: "fs",
546    arch: {
547        arm64: {
548            src: ":microdroid_kernel_signed",
549        },
550        x86_64: {
551            src: ":microdroid_kernel_signed",
552        },
553    },
554}
555
556avb_add_hash_footer {
557    name: "microdroid_kernel_16k_signed",
558    defaults: [
559        "microdroid_kernel_signed_defaults",
560        "microdroid_kernel_cap_defaults",
561    ],
562    filename: "microdroid_kernel_16k",
563    arch: {
564        arm64: {
565            src: ":microdroid_kernel_16k_prebuilt-arm64",
566        },
567        // There is no 16k x86_64 kernel. Instead the 16k emulation is triggered by adding
568        // `page_shift=14` to the kernel cmdline or bootconfig.
569        x86_64: {
570            src: ":microdroid_kernel_prebuilt-x86_64",
571        },
572    },
573    props: [
574        {
575            name: "com.android.virt.page_size",
576            value: "16",
577        },
578    ],
579    include_descriptors_from_images: [
580        ":microdroid_16k_initrd_normal_hashdesc",
581        ":microdroid_16k_initrd_debug_hashdesc",
582    ],
583}
584
585prebuilt_etc {
586    name: "microdroid_kernel_16k",
587    src: ":empty_file",
588    relative_install_path: "fs",
589    arch: {
590        arm64: {
591            src: ":microdroid_kernel_16k_signed",
592        },
593        x86_64: {
594            src: ":microdroid_kernel_16k_signed",
595        },
596    },
597}
598
599///////////////////////////////////////
600// GKI-android15-6.6
601///////////////////////////////////////
602prebuilt_etc {
603    name: "microdroid_gki-android15-6.6.json",
604    src: "microdroid_gki-android15-6.6.json",
605}
606
607avb_add_hash_footer_defaults {
608    name: "microdroid_gki-android15-6.6_kernel_signed_defaults",
609    defaults: ["microdroid_kernel_signed_defaults"],
610    arch: {
611        arm64: {
612            src: ":microdroid_gki_kernel_prebuilts-android15-6.6-arm64",
613        },
614        x86_64: {
615            src: ":microdroid_gki_kernel_prebuilts-android15-6.6-x86_64",
616        },
617    },
618    include_descriptors_from_images: [
619        ":microdroid_gki-android15-6.6_initrd_normal_hashdesc",
620        ":microdroid_gki-android15-6.6_initrd_debug_hashdesc",
621    ],
622}
623
624avb_add_hash_footer {
625    name: "microdroid_gki-android15-6.6_kernel_signed",
626    defaults: [
627        "microdroid_gki-android15-6.6_kernel_signed_defaults",
628        "microdroid_kernel_cap_defaults",
629    ],
630    filename: "microdroid_gki-android15-6.6_kernel_signed",
631}
632
633avb_add_hash_footer {
634    name: "microdroid_gki-android15-6.6_kernel_signed_supports_uefi_boot",
635    defaults: [
636        "microdroid_gki-android15-6.6_kernel_signed_defaults",
637        "microdroid_kernel_cap_with_uefi_defaults",
638    ],
639    filename: "microdroid_gki-android15-6.6_kernel_signed_supports_uefi_boot",
640}
641
642// HACK: use cc_genrule for arch-specific properties
643cc_genrule {
644    name: "microdroid_gki-android15-6.6_kernel_signed-lz4",
645    out: ["microdroid_gki-android15-6.6_kernel_signed-lz4"],
646    srcs: [":empty_file"],
647    arch: {
648        arm64: {
649            srcs: [":microdroid_gki-android15-6.6_kernel_signed"],
650            exclude_srcs: [":empty_file"],
651        },
652    },
653    tools: ["lz4"],
654    cmd: "$(location lz4) -9 $(in) $(out)",
655}
656
657prebuilt_etc {
658    name: "microdroid_gki-android15-6.6_kernel",
659    filename: "microdroid_gki-android15-6.6_kernel",
660    src: ":empty_file",
661    relative_install_path: "fs",
662    arch: {
663        arm64: {
664            src: ":microdroid_gki-android15-6.6_kernel_signed",
665        },
666        x86_64: {
667            src: ":microdroid_gki-android15-6.6_kernel_signed",
668        },
669    },
670}
671
672avb_gen_vbmeta_image {
673    name: "microdroid_gki-android15-6.6_initrd_normal_hashdesc",
674    defaults: ["microdroid_initrd_normal_defaults"],
675    src: ":microdroid_gki-android15-6.6_initrd_normal",
676}
677
678avb_gen_vbmeta_image {
679    name: "microdroid_gki-android15-6.6_initrd_debug_hashdesc",
680    defaults: ["microdroid_initrd_debug_defaults"],
681    src: ":microdroid_gki-android15-6.6_initrd_debuggable",
682}
683
684///////////////////////////////////////
685// GKI-android16-6.12
686///////////////////////////////////////
687prebuilt_etc {
688    name: "microdroid_gki-android16-6.12.json",
689    src: "microdroid_gki-android16-6.12.json",
690}
691
692avb_add_hash_footer_defaults {
693    name: "microdroid_gki-android16-6.12_kernel_signed_defaults",
694    defaults: ["microdroid_kernel_signed_defaults"],
695    arch: {
696        arm64: {
697            src: ":microdroid_gki_kernel_prebuilts-android16-6.12-arm64",
698        },
699        x86_64: {
700            src: ":microdroid_gki_kernel_prebuilts-android16-6.12-x86_64",
701        },
702    },
703    include_descriptors_from_images: [
704        ":microdroid_gki-android16-6.12_initrd_normal_hashdesc",
705        ":microdroid_gki-android16-6.12_initrd_debug_hashdesc",
706    ],
707}
708
709avb_add_hash_footer {
710    name: "microdroid_gki-android16-6.12_kernel_signed",
711    defaults: [
712        "microdroid_gki-android16-6.12_kernel_signed_defaults",
713        "microdroid_kernel_cap_defaults",
714    ],
715    filename: "microdroid_gki-android16-6.12_kernel_signed",
716}
717
718avb_add_hash_footer {
719    name: "microdroid_gki-android16-6.12_kernel_signed_supports_uefi_boot",
720    defaults: [
721        "microdroid_gki-android16-6.12_kernel_signed_defaults",
722        "microdroid_kernel_cap_with_uefi_defaults",
723    ],
724    filename: "microdroid_gki-android16-6.12_kernel_signed_supports_uefi_boot",
725}
726
727// HACK: use cc_genrule for arch-specific properties
728cc_genrule {
729    name: "microdroid_gki-android16-6.12_kernel_signed-lz4",
730    out: ["microdroid_gki-android16-6.12_kernel_signed-lz4"],
731    srcs: [":empty_file"],
732    arch: {
733        arm64: {
734            srcs: [":microdroid_gki-android16-6.12_kernel_signed"],
735            exclude_srcs: [":empty_file"],
736        },
737    },
738    tools: ["lz4"],
739    cmd: "$(location lz4) -9 $(in) $(out)",
740}
741
742prebuilt_etc {
743    name: "microdroid_gki-android16-6.12_kernel",
744    filename: "microdroid_gki-android16-6.12_kernel",
745    src: ":empty_file",
746    relative_install_path: "fs",
747    arch: {
748        arm64: {
749            src: ":microdroid_gki-android16-6.12_kernel_signed",
750        },
751        x86_64: {
752            src: ":microdroid_gki-android16-6.12_kernel_signed",
753        },
754    },
755}
756
757avb_gen_vbmeta_image {
758    name: "microdroid_gki-android16-6.12_initrd_normal_hashdesc",
759    defaults: ["microdroid_initrd_normal_defaults"],
760    src: ":microdroid_gki-android16-6.12_initrd_normal",
761}
762
763avb_gen_vbmeta_image {
764    name: "microdroid_gki-android16-6.12_initrd_debug_hashdesc",
765    defaults: ["microdroid_initrd_debug_defaults"],
766    src: ":microdroid_gki-android16-6.12_initrd_debuggable",
767}
768
769python_binary_host {
770    name: "extract_microdroid_kernel_hashes",
771    srcs: ["extract_microdroid_kernel_hashes.py"],
772}
773
774// HACK: use cc_genrule for arch-specific properties
775cc_genrule {
776    name: "microdroid_kernel_hashes_rs",
777    compile_multilib: "first",
778    srcs: [":microdroid_kernel"],
779    arch: {
780        arm64: {
781            srcs: [
782                ":microdroid_gki-android15-6.6_kernel_signed",
783                ":microdroid_gki-android16-6.12_kernel_signed",
784            ],
785        },
786        x86_64: {
787            srcs: [
788                ":microdroid_gki-android15-6.6_kernel_signed",
789                ":microdroid_gki-android16-6.12_kernel_signed",
790            ],
791        },
792    },
793    out: ["lib.rs"],
794    tools: [
795        "extract_microdroid_kernel_hashes",
796        "avbtool",
797    ],
798    cmd: "$(location extract_microdroid_kernel_hashes) --avbtool $(location avbtool) " +
799        "--kernel $(in) > $(out)",
800}
801
802rust_library_rlib {
803    name: "libmicrodroid_kernel_hashes",
804    compile_multilib: "first",
805    srcs: [":microdroid_kernel_hashes_rs"],
806    crate_name: "microdroid_kernel_hashes",
807    prefer_rlib: true,
808    no_stdlibs: true,
809    stdlibs: [
810        "libcompiler_builtins.rust_sysroot",
811        "libcore.rust_sysroot",
812    ],
813}
814