blob: c02466efd0f887d0f5f7cf411ff588026cdcc9fd [file] [log] [blame]
Bob Badour47dac8e2022-05-05 07:11:36 -07001package {
2 default_applicable_licenses: ["Android-Apache-2.0"],
3}
4
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +00005// The hierarchy of Soong modules to produce a vmbase-based binary is
6//
7// 0. rlibs may be used to provide high-level code (see "vmbase_rlib_defaults");
8// 1. rust_ffi_static packages low-level Rust code and any rlib into a static
9// library (see "vmbase_ffi_defaults") that cc_binary supports;
10// 2. cc_library_static may be used for extra C code (see "vmbase_cc_defaults");
11// 3. cc_binary produces an ELF from the (single) Rust-wrapping static library,
12// optional extra C libraries, and linker script (see "vmbase_elf_defaults");
13// 4. raw_binary strips the ELF into an image that can be loaded to memory;
14
15// Used by intermediate rust_library_rlib for vmbase-based binaries.
David Brazdil30a7f082022-07-07 15:30:14 +010016rust_defaults {
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000017 name: "vmbase_rlib_defaults",
Nikita Ioffeda1b2732023-09-04 13:46:56 +010018 defaults: ["avf_build_flags_rust"],
Alan Stokes6472ccd2022-08-31 13:41:28 +010019 edition: "2021",
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000020 prefer_rlib: true,
David Brazdil30a7f082022-07-07 15:30:14 +010021 host_supported: false,
22 enabled: false,
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000023 no_stdlibs: true,
24 stdlibs: [
25 "libcompiler_builtins.rust_sysroot",
26 "libcore.rust_sysroot",
27 ],
David Brazdil30a7f082022-07-07 15:30:14 +010028 target: {
29 android_arm64: {
30 enabled: true,
31 },
32 },
33}
34
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000035// Used by the "top-level" rust_ffi_static of vmbase-based binaries.
David Brazdil30a7f082022-07-07 15:30:14 +010036rust_defaults {
37 name: "vmbase_ffi_defaults",
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000038 defaults: ["vmbase_rlib_defaults"],
David Brazdil30a7f082022-07-07 15:30:14 +010039}
40
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000041// Used by extra cc_library_static linked into the final ELF.
David Brazdil30a7f082022-07-07 15:30:14 +010042cc_defaults {
43 name: "vmbase_cc_defaults",
Nikita Ioffe38b9e712024-02-08 15:55:07 +000044 defaults: ["avf_build_flags_cc"],
David Brazdil30a7f082022-07-07 15:30:14 +010045 nocrt: true,
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000046 no_libcrt: true,
David Brazdil30a7f082022-07-07 15:30:14 +010047 system_shared_libs: [],
48 stl: "none",
49 installable: false,
50 enabled: false,
51 target: {
52 android_arm64: {
53 enabled: true,
54 },
55 },
56 sanitize: {
57 hwaddress: false,
58 },
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000059 native_coverage: false,
Alice Wangd1d63e42024-06-13 13:26:32 +000060 // TODO(b/346974429): Workaround pvmfw failure when enabling full LTO
61 lto_O0: true,
David Brazdil30a7f082022-07-07 15:30:14 +010062}
63
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000064// Used by cc_binary when producing the ELF of a vmbase-based binary.
David Brazdil30a7f082022-07-07 15:30:14 +010065cc_defaults {
66 name: "vmbase_elf_defaults",
67 defaults: ["vmbase_cc_defaults"],
David Brazdil30a7f082022-07-07 15:30:14 +010068 static_executable: true,
69 static_libs: [
70 "libvmbase_entry",
71 ],
72}
73
Andrew Walbrandd74b902022-04-14 16:12:50 +000074rust_library_rlib {
75 name: "libvmbase",
Pierre-Clément Tosi4894b432023-06-27 14:02:26 +000076 defaults: ["vmbase_rlib_defaults"],
Andrew Walbrandd74b902022-04-14 16:12:50 +000077 crate_name: "vmbase",
78 srcs: ["src/lib.rs"],
Andrew Walbrandd74b902022-04-14 16:12:50 +000079 rustlibs: [
Alice Wangf47b2342023-06-02 11:51:57 +000080 "libbuddy_system_allocator",
Pierre-Clément Tosi043dfb72024-10-30 21:17:10 +000081 "libcfg_if",
Per Larsen7ec45d32024-11-02 00:56:46 +000082 "libhypervisor_backends",
Pierre-Clément Tosi992c2bb2024-10-02 10:37:42 +010083 "liblibfdt_nostd",
David Brazdil8b557772022-07-05 12:22:20 +010084 "liblog_rust_nostd",
Alice Wang93ee98a2023-06-08 08:20:39 +000085 "libonce_cell_nostd",
Andrew Walbranda0e34b2025-03-24 16:19:50 +000086 "libsafe_mmio",
Andrew Walbrandd74b902022-04-14 16:12:50 +000087 "libspin_nostd",
Pierre-Clément Tosi6b867532024-04-29 02:29:42 +010088 "libstatic_assertions",
Andrew Walbran387f2fc2024-12-17 14:59:21 +000089 "libthiserror_nostd",
Alice Wang93ee98a2023-06-08 08:20:39 +000090 "libtinyvec_nostd",
Pierre-Clément Tosia9b345f2024-04-27 01:01:42 +010091 "libuuid_nostd",
Alice Wangeade1672023-06-08 14:56:20 +000092 "libvirtio_drivers",
Andrew Walbran47d316e2024-11-28 18:41:09 +000093 "libzerocopy_nostd",
Alice Wang3fa9b802023-06-06 07:52:31 +000094 "libzeroize_nostd",
Andrew Walbrandd74b902022-04-14 16:12:50 +000095 ],
Pierre-Clément Tosi50939ad2022-12-09 17:57:37 +000096 whole_static_libs: [
Pierre-Clément Tosi9f2f4462022-12-09 19:13:29 +000097 "librust_baremetal",
Pierre-Clément Tosi50939ad2022-12-09 17:57:37 +000098 ],
Michał Mazurek5867ba02024-11-28 13:07:25 +010099 target: {
100 android_arm64: {
101 rustlibs: [
102 "libaarch64_paging",
103 "libsmccc",
104 ],
105 // TODO(b/277859415, b/277860860): Drop "compat_android_13".
106 features: [
107 "compat_android_13",
108 "cpu_feat_hafdbs",
109 ],
110 },
111 },
Andrew Walbrandd74b902022-04-14 16:12:50 +0000112}
Andrew Walbranf71e6ee2022-04-22 14:04:27 +0000113
114cc_library_static {
115 name: "libvmbase_entry",
David Brazdil30a7f082022-07-07 15:30:14 +0100116 defaults: ["vmbase_cc_defaults"],
Michał Mazurek86d61612024-11-28 13:18:52 +0100117 srcs: [],
118 target: {
119 android_arm64: {
120 srcs: [
121 "asm/aarch64/entry.S",
122 "asm/aarch64/exceptions.S",
123 "asm/aarch64/exceptions_panic.S",
124 ],
125 },
126 },
Andrew Walbranf71e6ee2022-04-22 14:04:27 +0000127}
Andrew Walbrana5b7af52022-07-06 15:06:20 +0000128
129filegroup {
130 name: "vmbase_sections",
131 srcs: ["sections.ld"],
132}