diff --git a/apex/apex_test.go b/apex/apex_test.go index 0b67ef577..9a5968c1c 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -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 diff --git a/cc/cc.go b/cc/cc.go index b1c126431..81f24ced9 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -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 { diff --git a/cc/test.go b/cc/test.go index 37726914b..a9be6f9e4 100644 --- a/cc/test.go +++ b/cc/test.go @@ -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 diff --git a/cc/testing.go b/cc/testing.go index 95a93a0ed..85f12b77c 100644 --- a/cc/testing.go +++ b/cc/testing.go @@ -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