Merge "Don't use module names with "prebuilt_" prefixes in make dependencies." am: d348c41af5 am: 00fd1c09d5

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1515504

Change-Id: If7dabf0da9a2158305ecfd38cda94dbe09707f7d
This commit is contained in:
Treehugger Robot 2020-12-04 07:55:36 +00:00 committed by Automerger Merge Worker
commit 83d5ddd5eb
3 changed files with 65 additions and 1 deletions

View file

@ -1666,7 +1666,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// system libraries.
if !am.DirectlyInAnyApex() {
// we need a module name for Make
name := cc.ImplementationModuleName(ctx)
name := cc.ImplementationModuleNameForMake(ctx)
if !proptools.Bool(a.properties.Use_vendor) {
// we don't use subName(.vendor) for a "use_vendor: true" apex

View file

@ -6186,6 +6186,57 @@ func TestNonPreferredPrebuiltDependency(t *testing.T) {
`)
}
func TestPreferredPrebuiltSharedLibDep(t *testing.T) {
ctx, config := testApex(t, `
apex {
name: "myapex",
key: "myapex.key",
native_shared_libs: ["mylib"],
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
apex_available: ["myapex"],
shared_libs: ["otherlib"],
system_shared_libs: [],
}
cc_library {
name: "otherlib",
srcs: ["mylib.cpp"],
stubs: {
versions: ["current"],
},
}
cc_prebuilt_library_shared {
name: "otherlib",
prefer: true,
srcs: ["prebuilt.so"],
stubs: {
versions: ["current"],
},
}
`)
ab := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle)
data := android.AndroidMkDataForTest(t, config, "", ab)
var builder strings.Builder
data.Custom(&builder, ab.BaseModuleName(), "TARGET_", "", data)
androidMk := builder.String()
// The make level dependency needs to be on otherlib - prebuilt_otherlib isn't
// a thing there.
ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += otherlib\n")
}
func TestMain(m *testing.M) {
run := func() int {
setUp()

View file

@ -1099,6 +1099,19 @@ func (c *Module) ImplementationModuleName(ctx android.BaseModuleContext) string
return name
}
// Similar to ImplementationModuleName, but uses the Make variant of the module
// name as base name, for use in AndroidMk output. E.g. for a prebuilt module
// where the Soong name is prebuilt_foo, this returns foo (which works in Make
// under the premise that the prebuilt module overrides its source counterpart
// if it is exposed to Make).
func (c *Module) ImplementationModuleNameForMake(ctx android.BaseModuleContext) string {
name := c.BaseModuleName()
if versioned, ok := c.linker.(versionedInterface); ok {
name = versioned.implementationModuleName(name)
}
return name
}
func (c *Module) bootstrap() bool {
return Bool(c.Properties.Bootstrap)
}