|  | // 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 cc | 
|  |  | 
|  | import ( | 
|  | "android/soong/android" | 
|  | ) | 
|  |  | 
|  | func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) { | 
|  | RegisterPrebuiltBuildComponents(ctx) | 
|  | android.RegisterPrebuiltMutators(ctx) | 
|  |  | 
|  | RegisterCCBuildComponents(ctx) | 
|  | RegisterBinaryBuildComponents(ctx) | 
|  | RegisterLibraryBuildComponents(ctx) | 
|  | RegisterLibraryHeadersBuildComponents(ctx) | 
|  |  | 
|  | ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory) | 
|  | ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory) | 
|  | ctx.RegisterModuleType("cc_object", ObjectFactory) | 
|  | ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory) | 
|  | ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory) | 
|  | } | 
|  |  | 
|  | func GatherRequiredDepsForTest(oses ...android.OsType) string { | 
|  | ret := ` | 
|  | toolchain_library { | 
|  | name: "libatomic", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | native_bridge_supported: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libcompiler_rt-extras", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.builtins-arm-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | native_bridge_supported: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.builtins-aarch64-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | native_bridge_supported: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | cc_prebuilt_library_shared { | 
|  | name: "libclang_rt.hwasan-aarch64-android", | 
|  | nocrt: true, | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | srcs: [""], | 
|  | check_elf_files: false, | 
|  | sanitize: { | 
|  | never: true, | 
|  | }, | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.builtins-i686-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | native_bridge_supported: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.builtins-x86_64-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | native_bridge_supported: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.fuzzer-arm-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.fuzzer-aarch64-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.fuzzer-i686-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.fuzzer-x86_64-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libclang_rt.fuzzer-x86_64", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | // Needed for sanitizer | 
|  | cc_prebuilt_library_shared { | 
|  | name: "libclang_rt.ubsan_standalone-aarch64-android", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | system_shared_libs: [], | 
|  | srcs: [""], | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libgcc", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | toolchain_library { | 
|  | name: "libgcc_stripped", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | sdk_version: "current", | 
|  | src: "", | 
|  | } | 
|  |  | 
|  | cc_library { | 
|  | name: "libc", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | stl: "none", | 
|  | system_shared_libs: [], | 
|  | recovery_available: true, | 
|  | stubs: { | 
|  | versions: ["27", "28", "29"], | 
|  | }, | 
|  | } | 
|  | llndk_library { | 
|  | name: "libc", | 
|  | symbol_file: "", | 
|  | sdk_version: "current", | 
|  | } | 
|  | cc_library { | 
|  | name: "libm", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | stl: "none", | 
|  | system_shared_libs: [], | 
|  | recovery_available: true, | 
|  | stubs: { | 
|  | versions: ["27", "28", "29"], | 
|  | }, | 
|  | apex_available: [ | 
|  | "//apex_available:platform", | 
|  | "myapex" | 
|  | ], | 
|  | } | 
|  | llndk_library { | 
|  | name: "libm", | 
|  | symbol_file: "", | 
|  | sdk_version: "current", | 
|  | } | 
|  |  | 
|  | // Coverage libraries | 
|  | cc_library { | 
|  | name: "libprofile-extras", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | native_coverage: false, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | notice: "custom_notice", | 
|  | } | 
|  | cc_library { | 
|  | name: "libprofile-clang-extras", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | native_coverage: false, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | notice: "custom_notice", | 
|  | } | 
|  | cc_library { | 
|  | name: "libprofile-extras_ndk", | 
|  | vendor_available: true, | 
|  | native_coverage: false, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | notice: "custom_notice", | 
|  | sdk_version: "current", | 
|  | } | 
|  | cc_library { | 
|  | name: "libprofile-clang-extras_ndk", | 
|  | vendor_available: true, | 
|  | native_coverage: false, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | notice: "custom_notice", | 
|  | sdk_version: "current", | 
|  | } | 
|  |  | 
|  | cc_library { | 
|  | name: "libdl", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | stl: "none", | 
|  | system_shared_libs: [], | 
|  | recovery_available: true, | 
|  | stubs: { | 
|  | versions: ["27", "28", "29"], | 
|  | }, | 
|  | apex_available: [ | 
|  | "//apex_available:platform", | 
|  | "myapex" | 
|  | ], | 
|  | } | 
|  | llndk_library { | 
|  | name: "libdl", | 
|  | symbol_file: "", | 
|  | sdk_version: "current", | 
|  | } | 
|  | cc_library { | 
|  | name: "libft2", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | system_shared_libs: [], | 
|  | recovery_available: true, | 
|  | } | 
|  | llndk_library { | 
|  | name: "libft2", | 
|  | symbol_file: "", | 
|  | vendor_available: false, | 
|  | sdk_version: "current", | 
|  | } | 
|  | cc_library { | 
|  | name: "libc++_static", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | host_supported: true, | 
|  | apex_available: [ | 
|  | "//apex_available:platform", | 
|  | "//apex_available:anyapex", | 
|  | ], | 
|  | } | 
|  | cc_library { | 
|  | name: "libc++", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | host_supported: true, | 
|  | vndk: { | 
|  | enabled: true, | 
|  | support_system_process: true, | 
|  | }, | 
|  | apex_available: [ | 
|  | "//apex_available:platform", | 
|  | "myapex" | 
|  | ], | 
|  | } | 
|  | cc_library { | 
|  | name: "libc++demangle", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | host_supported: false, | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | apex_available: [ | 
|  | "//apex_available:platform", | 
|  | "//apex_available:anyapex", | 
|  | ], | 
|  | } | 
|  | cc_library { | 
|  | name: "libunwind_llvm", | 
|  | no_libcrt: true, | 
|  | nocrt: true, | 
|  | system_shared_libs: [], | 
|  | stl: "none", | 
|  | vendor_available: true, | 
|  | recovery_available: true, | 
|  | } | 
|  |  | 
|  | cc_defaults { | 
|  | name: "crt_defaults", | 
|  | recovery_available: true, | 
|  | vendor_available: true, | 
|  | native_bridge_supported: true, | 
|  | stl: "none", | 
|  | apex_available: [ | 
|  | "//apex_available:platform", | 
|  | "//apex_available:anyapex", | 
|  | ], | 
|  | } | 
|  |  | 
|  | cc_object { | 
|  | name: "crtbegin_so", | 
|  | defaults: ["crt_defaults"], | 
|  | recovery_available: true, | 
|  | vendor_available: true, | 
|  | native_bridge_supported: true, | 
|  | stl: "none", | 
|  | } | 
|  |  | 
|  | cc_object { | 
|  | name: "crtbegin_dynamic", | 
|  | defaults: ["crt_defaults"], | 
|  | recovery_available: true, | 
|  | vendor_available: true, | 
|  | native_bridge_supported: true, | 
|  | stl: "none", | 
|  | } | 
|  |  | 
|  | cc_object { | 
|  | name: "crtbegin_static", | 
|  | defaults: ["crt_defaults"], | 
|  | recovery_available: true, | 
|  | vendor_available: true, | 
|  | native_bridge_supported: true, | 
|  | stl: "none", | 
|  | } | 
|  |  | 
|  | cc_object { | 
|  | name: "crtend_so", | 
|  | defaults: ["crt_defaults"], | 
|  | recovery_available: true, | 
|  | vendor_available: true, | 
|  | native_bridge_supported: true, | 
|  | stl: "none", | 
|  | } | 
|  |  | 
|  | cc_object { | 
|  | name: "crtend_android", | 
|  | defaults: ["crt_defaults"], | 
|  | recovery_available: true, | 
|  | vendor_available: true, | 
|  | native_bridge_supported: true, | 
|  | stl: "none", | 
|  | } | 
|  |  | 
|  | cc_library { | 
|  | name: "libprotobuf-cpp-lite", | 
|  | } | 
|  |  | 
|  | cc_library { | 
|  | name: "ndk_libunwind", | 
|  | sdk_version: "current", | 
|  | stl: "none", | 
|  | system_shared_libs: [], | 
|  | } | 
|  |  | 
|  | cc_library { | 
|  | name: "libc.ndk.current", | 
|  | sdk_version: "current", | 
|  | stl: "none", | 
|  | system_shared_libs: [], | 
|  | } | 
|  |  | 
|  | cc_library { | 
|  | name: "libm.ndk.current", | 
|  | sdk_version: "current", | 
|  | stl: "none", | 
|  | system_shared_libs: [], | 
|  | } | 
|  |  | 
|  | cc_library { | 
|  | name: "libdl.ndk.current", | 
|  | sdk_version: "current", | 
|  | stl: "none", | 
|  | system_shared_libs: [], | 
|  | } | 
|  |  | 
|  | ndk_prebuilt_object { | 
|  | name: "ndk_crtbegin_so.27", | 
|  | sdk_version: "27", | 
|  | } | 
|  |  | 
|  | ndk_prebuilt_object { | 
|  | name: "ndk_crtend_so.27", | 
|  | sdk_version: "27", | 
|  | } | 
|  |  | 
|  | ndk_prebuilt_object { | 
|  | name: "ndk_crtbegin_dynamic.27", | 
|  | sdk_version: "27", | 
|  | } | 
|  |  | 
|  | ndk_prebuilt_object { | 
|  | name: "ndk_crtend_android.27", | 
|  | sdk_version: "27", | 
|  | } | 
|  |  | 
|  | ndk_prebuilt_shared_stl { | 
|  | name: "ndk_libc++_shared", | 
|  | } | 
|  | ` | 
|  |  | 
|  | for _, os := range oses { | 
|  | if os == android.Fuchsia { | 
|  | ret += ` | 
|  | cc_library { | 
|  | name: "libbioniccompat", | 
|  | stl: "none", | 
|  | } | 
|  | cc_library { | 
|  | name: "libcompiler_rt", | 
|  | stl: "none", | 
|  | } | 
|  | ` | 
|  | } | 
|  | if os == android.Windows { | 
|  | ret += ` | 
|  | toolchain_library { | 
|  | name: "libwinpthread", | 
|  | host_supported: true, | 
|  | enabled: false, | 
|  | target: { | 
|  | windows: { | 
|  | enabled: true, | 
|  | }, | 
|  | }, | 
|  | src: "", | 
|  | } | 
|  | ` | 
|  | } | 
|  | } | 
|  | return ret | 
|  | } | 
|  |  | 
|  | func GatherRequiredFilesForTest(fs map[string][]byte) { | 
|  | fs["prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-arm/usr/lib/crtbegin_so.o"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-arm/usr/lib/crtend_so.o"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-arm64/usr/lib/crtbegin_so.o"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-arm64/usr/lib/crtend_so.o"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-x86/usr/lib/crtbegin_so.o"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-x86/usr/lib/crtend_so.o"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_so.o"] = nil | 
|  | fs["prebuilts/ndk/current/platforms/android-27/arch-x86_64/usr/lib64/crtend_so.o"] = nil | 
|  | } | 
|  |  | 
|  | func TestConfig(buildDir string, os android.OsType, env map[string]string, | 
|  | bp string, fs map[string][]byte) android.Config { | 
|  |  | 
|  | // add some modules that are required by the compiler and/or linker | 
|  | bp = bp + GatherRequiredDepsForTest(os) | 
|  |  | 
|  | mockFS := map[string][]byte{ | 
|  | "foo.c":       nil, | 
|  | "foo.lds":     nil, | 
|  | "bar.c":       nil, | 
|  | "baz.c":       nil, | 
|  | "baz.o":       nil, | 
|  | "a.proto":     nil, | 
|  | "b.aidl":      nil, | 
|  | "sub/c.aidl":  nil, | 
|  | "my_include":  nil, | 
|  | "foo.map.txt": nil, | 
|  | "liba.so":     nil, | 
|  | } | 
|  |  | 
|  | GatherRequiredFilesForTest(mockFS) | 
|  |  | 
|  | for k, v := range fs { | 
|  | mockFS[k] = v | 
|  | } | 
|  |  | 
|  | var config android.Config | 
|  | if os == android.Fuchsia { | 
|  | config = android.TestArchConfigFuchsia(buildDir, env, bp, mockFS) | 
|  | } else { | 
|  | config = android.TestArchConfig(buildDir, env, bp, mockFS) | 
|  | } | 
|  |  | 
|  | return config | 
|  | } | 
|  |  | 
|  | func CreateTestContext() *android.TestContext { | 
|  | ctx := android.NewTestArchContext() | 
|  | ctx.RegisterModuleType("cc_fuzz", FuzzFactory) | 
|  | ctx.RegisterModuleType("cc_test", TestFactory) | 
|  | ctx.RegisterModuleType("llndk_headers", llndkHeadersFactory) | 
|  | ctx.RegisterModuleType("ndk_library", NdkLibraryFactory) | 
|  | ctx.RegisterModuleType("vendor_public_library", vendorPublicLibraryFactory) | 
|  | ctx.RegisterModuleType("filegroup", android.FileGroupFactory) | 
|  | ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory) | 
|  | ctx.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory) | 
|  | ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators) | 
|  | RegisterRequiredBuildComponentsForTest(ctx) | 
|  | ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton) | 
|  | ctx.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton) | 
|  |  | 
|  | return ctx | 
|  | } |