Files
build_soong/cc/testing.go
Colin Cross e9fe2949b8 Annotate dependency tags for dependencies of installed files
Relands Ic22603a5c0718b5a21686672a7471f952b4d1017 with a minor
change to track libc++ dependencies for python hosts and after
a fix to an internal genrule that depended on transitively
installed java libraries (ag/13068670).

Soong currently assumes that installed files should depend on
installed files of all transitive dependencies, which results
in extra installed file dependencies through genrules, static
libs, etc.

Annotate dependency tags for dependencies for which the
installed files are necessary such as shared libraries
and JNI libraries.

This avoids extra installed files, and is also a first step
towards genrules using their own copy of tools instead of
the installed copy.

Bug: 124313442
Test: m checkbuild
Test: java.TestBinary
Test: cc.TestInstallSharedLibs
Test: deptag_test.go
Change-Id: I725871249d561428e6f67bba6a7c65b580012b72
2020-11-23 18:06:08 -08:00

572 lines
13 KiB
Go

// 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: "",
}
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
}