test_for is available for all cc_* module types

Sometimes, the ordinary cc_library_* modules need test_for property when
they are part of a bigger cc_test. Instead of propagating the test_for
property from cc_test to its dependencies, this change requires the very
dependency which needs access to the private part of an APEX to
explicitly have the test_for property.

Bug: 161575591
Test: m
Change-Id: Ie1ffe9a60cd2ab02d41bbe5a98225a40392470f6
This commit is contained in:
Jiyong Park 2020-12-04 18:02:13 +09:00
parent d348c41af5
commit 46a512f1f5
4 changed files with 43 additions and 17 deletions

View File

@ -5964,9 +5964,27 @@ func TestTestFor(t *testing.T) {
srcs: ["mylib.cpp"],
system_shared_libs: [],
stl: "none",
shared_libs: ["mylib", "myprivlib"],
shared_libs: ["mylib", "myprivlib", "mytestlib"],
test_for: ["myapex"]
}
cc_library {
name: "mytestlib",
srcs: ["mylib.cpp"],
system_shared_libs: [],
shared_libs: ["mylib", "myprivlib"],
stl: "none",
test_for: ["myapex"],
}
cc_benchmark {
name: "mybench",
srcs: ["mylib.cpp"],
system_shared_libs: [],
shared_libs: ["mylib", "myprivlib"],
stl: "none",
test_for: ["myapex"],
}
`)
// the test 'mytest' is a test for the apex, therefore is linked to the
@ -5974,6 +5992,16 @@ func TestTestFor(t *testing.T) {
ldFlags := ctx.ModuleForTests("mytest", "android_arm64_armv8-a").Rule("ld").Args["libFlags"]
ensureContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared/mylib.so")
ensureNotContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared_1/mylib.so")
// The same should be true for cc_library
ldFlags = ctx.ModuleForTests("mytestlib", "android_arm64_armv8-a_shared").Rule("ld").Args["libFlags"]
ensureContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared/mylib.so")
ensureNotContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared_1/mylib.so")
// ... and for cc_benchmark
ldFlags = ctx.ModuleForTests("mybench", "android_arm64_armv8-a").Rule("ld").Args["libFlags"]
ensureContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared/mylib.so")
ensureNotContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared_1/mylib.so")
}
// TODO(jungjw): Move this to proptools

View File

@ -332,6 +332,11 @@ type BaseProperties struct {
// framework module from a snapshot.
Exclude_from_vendor_snapshot *bool
Exclude_from_recovery_snapshot *bool
// List of APEXes that this module has private access to for testing purpose. The module
// can depend on libraries that are not exported by the APEXes and use private symbols
// from the exported libraries.
Test_for []string
}
type VendorProperties struct {
@ -2935,13 +2940,7 @@ func (c *Module) AvailableFor(what string) bool {
}
func (c *Module) TestFor() []string {
if test, ok := c.linker.(interface {
testFor() []string
}); ok {
return test.testFor()
} else {
return c.ApexModuleBase.TestFor()
}
return c.Properties.Test_for
}
func (c *Module) UniqueApexVariations() bool {

View File

@ -29,11 +29,6 @@ type TestProperties struct {
// if set, use the isolated gtest runner. Defaults to false.
Isolated *bool
// List of APEXes that this module tests. The module has access to
// the private part of the listed APEXes even when it is not included in the
// APEXes.
Test_for []string
}
// Test option struct.
@ -241,10 +236,6 @@ func (test *testDecorator) gtest() bool {
return BoolDefault(test.Properties.Gtest, true)
}
func (test *testDecorator) testFor() []string {
return test.Properties.Test_for
}
func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
if !test.gtest() {
return flags

View File

@ -29,6 +29,7 @@ func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory)
ctx.RegisterModuleType("cc_benchmark", BenchmarkFactory)
ctx.RegisterModuleType("cc_object", ObjectFactory)
ctx.RegisterModuleType("cc_genrule", genRuleFactory)
ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
@ -437,6 +438,13 @@ func GatherRequiredDepsForTest(oses ...android.OsType) string {
ndk_prebuilt_shared_stl {
name: "ndk_libc++_shared",
}
cc_library_static {
name: "libgoogle-benchmark",
sdk_version: "current",
stl: "none",
system_shared_libs: [],
}
`
supportLinuxBionic := false