| // 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", RustFFIRlibFactory) | |
| 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", RustFFIRlibHostFactory) | |
| 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(registerPreDepsMutators) | |
| ctx.RegisterParallelSingletonType("rust_project_generator", rustProjectGeneratorSingleton) | |
| ctx.RegisterParallelSingletonType("kythe_rust_extract", kytheExtractRustFactory) | |
| ctx.PostDepsMutators(registerPostDepsMutators) | |
| } |