// 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" "android/soong/genrule" ) func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) { RegisterPrebuiltBuildComponents(ctx) RegisterCCBuildComponents(ctx) RegisterBinaryBuildComponents(ctx) RegisterLibraryBuildComponents(ctx) RegisterLibraryHeadersBuildComponents(ctx) genrule.RegisterGenruleBuildComponents(ctx) ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory) ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory) ctx.RegisterModuleType("cc_object", ObjectFactory) ctx.RegisterModuleType("cc_genrule", genRuleFactory) ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory) ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory) ctx.RegisterModuleType("ndk_library", NdkLibraryFactory) } func GatherRequiredDepsForTest(oses ...android.OsType) string { ret := ` toolchain_library { name: "libatomic", defaults: ["linux_bionic_supported"], vendor_available: true, product_available: true, recovery_available: true, native_bridge_supported: true, src: "", } toolchain_library { name: "libcompiler_rt-extras", vendor_available: true, product_available: true, recovery_available: true, src: "", } toolchain_library { name: "libclang_rt.builtins-arm-android", vendor_available: true, product_available: true, recovery_available: true, native_bridge_supported: true, src: "", } toolchain_library { name: "libclang_rt.builtins-aarch64-android", vendor_available: true, product_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, product_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, product_available: true, recovery_available: true, native_bridge_supported: true, src: "", } toolchain_library { name: "libclang_rt.builtins-x86_64-android", defaults: ["linux_bionic_supported"], vendor_available: true, product_available: true, recovery_available: true, native_bridge_supported: true, src: "", } toolchain_library { name: "libclang_rt.fuzzer-arm-android", vendor_available: true, product_available: true, recovery_available: true, src: "", } toolchain_library { name: "libclang_rt.fuzzer-aarch64-android", vendor_available: true, product_available: true, recovery_available: true, src: "", } toolchain_library { name: "libclang_rt.fuzzer-i686-android", vendor_available: true, product_available: true, recovery_available: true, src: "", } toolchain_library { name: "libclang_rt.fuzzer-x86_64-android", defaults: ["linux_bionic_supported"], vendor_available: true, product_available: true, recovery_available: true, src: "", } toolchain_library { name: "libclang_rt.fuzzer-x86_64", vendor_available: true, product_available: true, recovery_available: true, src: "", } // Needed for sanitizer cc_prebuilt_library_shared { name: "libclang_rt.ubsan_standalone-aarch64-android", vendor_available: true, product_available: true, recovery_available: true, system_shared_libs: [], srcs: [""], } toolchain_library { name: "libgcc", defaults: ["linux_bionic_supported"], vendor_available: true, product_available: true, recovery_available: true, src: "", apex_available: [ "//apex_available:platform", "//apex_available:anyapex", ], } toolchain_library { name: "libgcc_stripped", defaults: ["linux_bionic_supported"], vendor_available: true, product_available: true, recovery_available: true, sdk_version: "current", src: "", } cc_library { name: "libc", defaults: ["linux_bionic_supported"], no_libcrt: true, nocrt: true, stl: "none", system_shared_libs: [], recovery_available: true, stubs: { versions: ["27", "28", "29"], }, llndk_stubs: "libc.llndk", } llndk_library { name: "libc.llndk", symbol_file: "", sdk_version: "current", } cc_library { name: "libm", defaults: ["linux_bionic_supported"], 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_stubs: "libm.llndk", } llndk_library { name: "libm.llndk", symbol_file: "", sdk_version: "current", } // Coverage libraries cc_library { name: "libprofile-extras", vendor_available: true, product_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, product_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, product_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, product_available: true, native_coverage: false, system_shared_libs: [], stl: "none", notice: "custom_notice", sdk_version: "current", } cc_library { name: "libdl", defaults: ["linux_bionic_supported"], 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_stubs: "libdl.llndk", } llndk_library { name: "libdl.llndk", symbol_file: "", sdk_version: "current", } cc_library { name: "libft2", no_libcrt: true, nocrt: true, system_shared_libs: [], recovery_available: true, llndk_stubs: "libft2.llndk", } llndk_library { name: "libft2.llndk", 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, product_available: true, recovery_available: true, host_supported: true, min_sdk_version: "29", 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, product_available: true, recovery_available: true, host_supported: true, min_sdk_version: "29", 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, product_available: true, recovery_available: true, min_sdk_version: "29", 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, product_available: true, recovery_available: true, } cc_defaults { name: "crt_defaults", defaults: ["linux_bionic_supported"], recovery_available: true, vendor_available: true, product_available: true, native_bridge_supported: true, stl: "none", min_sdk_version: "16", crt: true, apex_available: [ "//apex_available:platform", "//apex_available:anyapex", ], } cc_object { name: "crtbegin_so", defaults: ["crt_defaults"], } cc_object { name: "crtbegin_dynamic", defaults: ["crt_defaults"], } cc_object { name: "crtbegin_static", defaults: ["crt_defaults"], } cc_object { name: "crtend_so", defaults: ["crt_defaults"], } cc_object { name: "crtend_android", defaults: ["crt_defaults"], } cc_library { name: "libprotobuf-cpp-lite", } cc_library { name: "ndk_libunwind", sdk_version: "current", stl: "none", system_shared_libs: [], } ndk_library { name: "libc", first_version: "minimum", symbol_file: "libc.map.txt", } ndk_library { name: "libm", first_version: "minimum", symbol_file: "libm.map.txt", } ndk_library { name: "libdl", first_version: "minimum", symbol_file: "libdl.map.txt", } ndk_prebuilt_shared_stl { name: "ndk_libc++_shared", } ` supportLinuxBionic := false 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: "", } ` } if os == android.LinuxBionic { supportLinuxBionic = true ret += ` cc_binary { name: "linker", defaults: ["linux_bionic_supported"], recovery_available: true, stl: "none", nocrt: true, static_executable: true, native_coverage: false, system_shared_libs: [], } cc_genrule { name: "host_bionic_linker_flags", host_supported: true, device_supported: false, target: { host: { enabled: false, }, linux_bionic: { enabled: true, }, }, out: ["linker.flags"], } cc_defaults { name: "linux_bionic_supported", host_supported: true, target: { host: { enabled: false, }, linux_bionic: { enabled: true, }, }, } ` } } if !supportLinuxBionic { ret += ` cc_defaults { name: "linux_bionic_supported", } ` } return ret } func GatherRequiredFilesForTest(fs map[string][]byte) { } 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{} 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(config android.Config) *android.TestContext { ctx := android.NewTestArchContext(config) ctx.RegisterModuleType("cc_fuzz", FuzzFactory) ctx.RegisterModuleType("cc_test", TestFactory) ctx.RegisterModuleType("cc_test_library", TestLibraryFactory) ctx.RegisterModuleType("llndk_headers", llndkHeadersFactory) ctx.RegisterModuleType("vendor_public_library", vendorPublicLibraryFactory) ctx.RegisterModuleType("filegroup", android.FileGroupFactory) ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory) ctx.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory) ctx.RegisterModuleType("vendor_snapshot_shared", VendorSnapshotSharedFactory) ctx.RegisterModuleType("vendor_snapshot_static", VendorSnapshotStaticFactory) ctx.RegisterModuleType("vendor_snapshot_binary", VendorSnapshotBinaryFactory) ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators) android.RegisterPrebuiltMutators(ctx) RegisterRequiredBuildComponentsForTest(ctx) ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton) ctx.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton) ctx.RegisterSingletonType("recovery-snapshot", RecoverySnapshotSingleton) return ctx }