1package {
2    default_applicable_licenses: ["Android-Apache-2.0"],
3}
4
5rust_ffi_static {
6    name: "libvmbase_example",
7    defaults: ["vmbase_ffi_defaults"],
8    crate_name: "vmbase_example",
9    srcs: ["src/main.rs"],
10    rustlibs: [
11        "libaarch64_paging",
12        "libcstr",
13        "libdiced_open_dice_nostd",
14        "liblibfdt_nostd",
15        "liblog_rust_nostd",
16        "libvirtio_drivers",
17        "libvmbase",
18    ],
19}
20
21genrule {
22    name: "vmbase_image.ld.S.mm",
23    // Soong won't let us use cc_object to preprocess *.ld.S files because it
24    // can't resist feeding any and all *.S files to the assembler, which fails
25    // because linker scripts typically aren't valid assembly. Also, cc_object
26    // rejects inputs that don't end in one of .{s,S,c,cpp,cc,cxx,mm}. So keep
27    // the proper extension (.ld.S) for the file in VCS and use this convoluted
28    // extra step to please Soong by pretending that our linker script is in
29    // fact some Object C++ code, which fortunately it doesn't try to compile.
30    srcs: ["image.ld.S"],
31    out: ["image.ld.S.mm"],
32    cmd: "cp $(in) $(out)",
33    visibility: ["//visibility:private"],
34}
35
36cc_defaults {
37    name: "vmbase_example_ld_defaults",
38    defaults: ["vmbase_cc_defaults"],
39    cflags: [
40        "-E",
41        "-P",
42        "-xassembler-with-cpp", // allow C preprocessor directives
43    ],
44    srcs: [":vmbase_image.ld.S.mm"],
45    visibility: ["//visibility:private"],
46}
47
48cc_object {
49    name: "vmbase_example_bios.ld",
50    defaults: ["vmbase_example_ld_defaults"],
51    cflags: ["-DVMBASE_EXAMPLE_IS_BIOS"],
52}
53
54cc_object {
55    name: "vmbase_example_kernel.ld",
56    defaults: ["vmbase_example_ld_defaults"],
57    cflags: ["-DVMBASE_EXAMPLE_IS_KERNEL"],
58}
59
60cc_defaults {
61    name: "vmbase_example_elf_defaults",
62    defaults: ["vmbase_elf_defaults"],
63    srcs: [
64        "idmap.S",
65    ],
66    static_libs: [
67        "libvmbase_example",
68    ],
69}
70
71cc_binary {
72    name: "vmbase_example_bios",
73    defaults: ["vmbase_example_elf_defaults"],
74    asflags: ["-DVMBASE_EXAMPLE_IS_BIOS"],
75    linker_scripts: [
76        ":vmbase_example_bios.ld",
77        ":vmbase_sections",
78    ],
79}
80
81cc_binary {
82    name: "vmbase_example_kernel",
83    defaults: ["vmbase_example_elf_defaults"],
84    asflags: ["-DVMBASE_EXAMPLE_IS_KERNEL"],
85    linker_scripts: [
86        ":vmbase_example_kernel.ld",
87        ":vmbase_sections",
88    ],
89}
90
91raw_binary {
92    name: "vmbase_example_bios_bin",
93    stem: "vmbase_example_bios.bin",
94    src: ":vmbase_example_bios",
95    enabled: false,
96    target: {
97        android_arm64: {
98            enabled: true,
99        },
100    },
101}
102
103raw_binary {
104    name: "vmbase_example_kernel_bin",
105    stem: "vmbase_example_kernel.bin",
106    src: ":vmbase_example_kernel",
107    enabled: false,
108    target: {
109        android_arm64: {
110            enabled: true,
111        },
112    },
113}
114