| // Copyright (C) 2019 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package rust |
| |
| import ( |
| "android/soong/android" |
| "android/soong/bloaty" |
| "android/soong/cc" |
| ) |
| |
| // Preparer that will define all cc module types and a limited set of mutators and singletons that |
| // make those module types usable. |
| var PrepareForTestWithRustBuildComponents = android.GroupFixturePreparers( |
| android.FixtureRegisterWithContext(registerRequiredBuildComponentsForTest), |
| ) |
| |
| // The directory in which rust test default modules will be defined. |
| // |
| // Placing them here ensures that their location does not conflict with default test modules |
| // defined by other packages. |
| const rustDefaultsDir = "defaults/rust/" |
| |
| // Preparer that will define default rust modules, e.g. standard prebuilt modules. |
| var PrepareForTestWithRustDefaultModules = android.GroupFixturePreparers( |
| cc.PrepareForTestWithCcDefaultModules, |
| bloaty.PrepareForTestWithBloatyDefaultModules, |
| PrepareForTestWithRustBuildComponents, |
| android.FixtureAddTextFile(rustDefaultsDir+"Android.bp", GatherRequiredDepsForTest()), |
| ) |
| |
| // Preparer that will allow use of all rust modules fully. |
| var PrepareForIntegrationTestWithRust = android.GroupFixturePreparers( |
| PrepareForTestWithRustDefaultModules, |
| cc.PrepareForIntegrationTestWithCc, |
| ) |
| |
| func GatherRequiredDepsForTest() string { |
| bp := ` |
| rust_prebuilt_library { |
| name: "libstd", |
| crate_name: "std", |
| rlib: { |
| srcs: ["libstd/libstd.rlib"], |
| }, |
| dylib: { |
| srcs: ["libstd/libstd.so"], |
| }, |
| host_supported: true, |
| sysroot: true, |
| } |
| rust_prebuilt_library { |
| name: "libcore.sysroot", |
| crate_name: "core", |
| rlib: { |
| srcs: ["libcore/libcore.rlib"], |
| }, |
| dylib: { |
| srcs: ["libcore/libcore.so"], |
| }, |
| host_supported: true, |
| sysroot: true, |
| } |
| ////////////////////////////// |
| // Device module requirements |
| |
| cc_library { |
| name: "liblog", |
| no_libcrt: true, |
| nocrt: true, |
| system_shared_libs: [], |
| apex_available: ["//apex_available:platform", "//apex_available:anyapex"], |
| min_sdk_version: "29", |
| vendor_available: true, |
| host_supported: true, |
| recovery_available: true, |
| llndk: { |
| symbol_file: "liblog.map.txt", |
| }, |
| } |
| cc_library { |
| name: "libprotobuf-cpp-full", |
| no_libcrt: true, |
| nocrt: true, |
| system_shared_libs: [], |
| export_include_dirs: ["libprotobuf-cpp-full-includes"], |
| } |
| cc_library { |
| name: "libclang_rt.asan", |
| no_libcrt: true, |
| nocrt: true, |
| system_shared_libs: [], |
| } |
| cc_library { |
| name: "libclang_rt.hwasan_static", |
| no_libcrt: true, |
| nocrt: true, |
| system_shared_libs: [], |
| } |
| rust_library { |
| name: "libstd", |
| crate_name: "std", |
| srcs: ["foo.rs"], |
| no_stdlibs: true, |
| product_available: true, |
| host_supported: true, |
| vendor_available: true, |
| vendor_ramdisk_available: true, |
| recovery_available: true, |
| native_coverage: false, |
| sysroot: true, |
| apex_available: ["//apex_available:platform", "//apex_available:anyapex"], |
| min_sdk_version: "29", |
| } |
| rust_library { |
| name: "libtest", |
| crate_name: "test", |
| srcs: ["foo.rs"], |
| host_supported: true, |
| vendor_available: true, |
| vendor_ramdisk_available: true, |
| recovery_available: true, |
| native_coverage: false, |
| apex_available: ["//apex_available:platform", "//apex_available:anyapex"], |
| min_sdk_version: "29", |
| } |
| rust_library { |
| name: "libprotobuf", |
| crate_name: "protobuf", |
| srcs: ["foo.rs"], |
| host_supported: true, |
| } |
| rust_library { |
| name: "libgrpcio", |
| crate_name: "grpcio", |
| srcs: ["foo.rs"], |
| host_supported: true, |
| } |
| rust_library { |
| name: "libfutures", |
| crate_name: "futures", |
| srcs: ["foo.rs"], |
| host_supported: true, |
| } |
| rust_library { |
| name: "liblibfuzzer_sys", |
| crate_name: "libfuzzer_sys", |
| srcs:["foo.rs"], |
| host_supported: true, |
| } |
| rust_library { |
| name: "libcriterion", |
| crate_name: "criterion", |
| srcs:["foo.rs"], |
| host_supported: true, |
| } |
| ` |
| return bp |
| } |
| |
| func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) { |
| ctx.RegisterModuleType("rust_benchmark", RustBenchmarkFactory) |
| ctx.RegisterModuleType("rust_benchmark_host", RustBenchmarkHostFactory) |
| ctx.RegisterModuleType("rust_binary", RustBinaryFactory) |
| ctx.RegisterModuleType("rust_binary_host", RustBinaryHostFactory) |
| ctx.RegisterModuleType("rust_bindgen", RustBindgenFactory) |
| ctx.RegisterModuleType("rust_bindgen_host", RustBindgenHostFactory) |
| ctx.RegisterModuleType("rust_test", RustTestFactory) |
| ctx.RegisterModuleType("rust_test_host", RustTestHostFactory) |
| ctx.RegisterModuleType("rust_library", RustLibraryFactory) |
| ctx.RegisterModuleType("rust_library_dylib", RustLibraryDylibFactory) |
| ctx.RegisterModuleType("rust_library_rlib", RustLibraryRlibFactory) |
| ctx.RegisterModuleType("rust_library_host", RustLibraryHostFactory) |
| ctx.RegisterModuleType("rust_library_host_dylib", RustLibraryDylibHostFactory) |
| ctx.RegisterModuleType("rust_library_host_rlib", RustLibraryRlibHostFactory) |
| ctx.RegisterModuleType("rust_fuzz", RustFuzzFactory) |
| ctx.RegisterModuleType("rust_fuzz_host", RustFuzzHostFactory) |
| ctx.RegisterModuleType("rust_ffi", RustFFIFactory) |
| ctx.RegisterModuleType("rust_ffi_shared", RustFFISharedFactory) |
| ctx.RegisterModuleType("rust_ffi_rlib", RustFFIRlibFactory) |
| ctx.RegisterModuleType("rust_ffi_static", RustFFIStaticRlibFactory) |
| ctx.RegisterModuleType("rust_ffi_host", RustFFIHostFactory) |
| ctx.RegisterModuleType("rust_ffi_host_shared", RustFFISharedHostFactory) |
| ctx.RegisterModuleType("rust_ffi_host_rlib", RustFFIRlibHostFactory) |
| ctx.RegisterModuleType("rust_ffi_host_static", RustFFIStaticRlibHostFactory) |
| ctx.RegisterModuleType("rust_proc_macro", ProcMacroFactory) |
| ctx.RegisterModuleType("rust_protobuf", RustProtobufFactory) |
| ctx.RegisterModuleType("rust_protobuf_host", RustProtobufHostFactory) |
| ctx.RegisterModuleType("rust_prebuilt_library", PrebuiltLibraryFactory) |
| ctx.RegisterModuleType("rust_prebuilt_dylib", PrebuiltDylibFactory) |
| ctx.RegisterModuleType("rust_prebuilt_rlib", PrebuiltRlibFactory) |
| ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { |
| // rust mutators |
| ctx.BottomUp("rust_libraries", LibraryMutator).Parallel() |
| ctx.BottomUp("rust_stdlinkage", LibstdMutator).Parallel() |
| ctx.BottomUp("rust_begin", BeginMutator).Parallel() |
| }) |
| ctx.RegisterParallelSingletonType("rust_project_generator", rustProjectGeneratorSingleton) |
| ctx.RegisterParallelSingletonType("kythe_rust_extract", kytheExtractRustFactory) |
| ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) { |
| ctx.BottomUp("rust_sanitizers", rustSanitizerRuntimeMutator).Parallel() |
| }) |
| } |