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