Use target dependent module to update the name suffix
The module names for vendor and product variants have the image variant suffix to avoid conflict with the core modules. It requires updating the module names in the dependency tree with the suffixes. We had a hidden bug that used the original module properties to update the names of its dependent modules. Also, it must cover the product variants modules. Test: updated cc_test.go and build Change-Id: I6b4ea062d13c8fac1e699138d44376e52e0d7852
This commit is contained in:
parent
e1f9b35d92
commit
cbca373efa
4 changed files with 33 additions and 14 deletions
16
cc/cc.go
16
cc/cc.go
|
@ -2891,12 +2891,12 @@ func (c *Module) makeLibName(ctx android.ModuleContext, ccDep LinkableInterface,
|
|||
ccDepModule, _ := ccDep.(*Module)
|
||||
isLLndk := ccDepModule != nil && ccDepModule.IsLlndk()
|
||||
isVendorPublicLib := inList(libName, *vendorPublicLibraries)
|
||||
bothVendorAndCoreVariantsExist := ccDep.HasVendorVariant() || isLLndk
|
||||
nonSystemVariantsExist := ccDep.HasNonSystemVariants() || isLLndk
|
||||
|
||||
if c, ok := ccDep.(*Module); ok {
|
||||
if ccDepModule != nil {
|
||||
// Use base module name for snapshots when exporting to Makefile.
|
||||
if snapshotPrebuilt, ok := c.linker.(snapshotInterface); ok {
|
||||
baseName := c.BaseModuleName()
|
||||
if snapshotPrebuilt, ok := ccDepModule.linker.(snapshotInterface); ok {
|
||||
baseName := ccDepModule.BaseModuleName()
|
||||
|
||||
return baseName + snapshotPrebuilt.snapshotAndroidMkSuffix()
|
||||
}
|
||||
|
@ -2907,10 +2907,10 @@ func (c *Module) makeLibName(ctx android.ModuleContext, ccDep LinkableInterface,
|
|||
// The vendor module is a no-vendor-variant VNDK library. Depend on the
|
||||
// core module instead.
|
||||
return libName
|
||||
} else if c.UseVndk() && bothVendorAndCoreVariantsExist {
|
||||
// The vendor module in Make will have been renamed to not conflict with the core
|
||||
// module, so update the dependency name here accordingly.
|
||||
return libName + c.getNameSuffixWithVndkVersion(ctx)
|
||||
} else if ccDep.UseVndk() && nonSystemVariantsExist && ccDepModule != nil {
|
||||
// The vendor and product modules in Make will have been renamed to not conflict with the
|
||||
// core module, so update the dependency name here accordingly.
|
||||
return libName + ccDepModule.Properties.SubName
|
||||
} else if (ctx.Platform() || ctx.ProductSpecific()) && isVendorPublicLib {
|
||||
return libName + vendorPublicLibrarySuffix
|
||||
} else if ccDep.InRamdisk() && !ccDep.OnlyInRamdisk() {
|
||||
|
|
|
@ -2711,6 +2711,14 @@ const runtimeLibAndroidBp = `
|
|||
nocrt : true,
|
||||
system_shared_libs : [],
|
||||
}
|
||||
cc_library {
|
||||
name: "libproduct_vendor",
|
||||
product_specific: true,
|
||||
vendor_available: true,
|
||||
no_libcrt : true,
|
||||
nocrt : true,
|
||||
system_shared_libs : [],
|
||||
}
|
||||
cc_library {
|
||||
name: "libcore",
|
||||
runtime_libs: ["liball_available"],
|
||||
|
@ -2728,7 +2736,7 @@ const runtimeLibAndroidBp = `
|
|||
cc_library {
|
||||
name: "libvendor2",
|
||||
vendor: true,
|
||||
runtime_libs: ["liball_available", "libvendor1"],
|
||||
runtime_libs: ["liball_available", "libvendor1", "libproduct_vendor"],
|
||||
no_libcrt : true,
|
||||
nocrt : true,
|
||||
system_shared_libs : [],
|
||||
|
@ -2751,7 +2759,7 @@ const runtimeLibAndroidBp = `
|
|||
cc_library {
|
||||
name: "libproduct2",
|
||||
product_specific: true,
|
||||
runtime_libs: ["liball_available", "libproduct1"],
|
||||
runtime_libs: ["liball_available", "libproduct1", "libproduct_vendor"],
|
||||
no_libcrt : true,
|
||||
nocrt : true,
|
||||
system_shared_libs : [],
|
||||
|
@ -2781,7 +2789,7 @@ func TestRuntimeLibs(t *testing.T) {
|
|||
checkRuntimeLibs(t, []string{"liball_available.vendor"}, module)
|
||||
|
||||
module = ctx.ModuleForTests("libvendor2", variant).Module().(*Module)
|
||||
checkRuntimeLibs(t, []string{"liball_available.vendor", "libvendor1"}, module)
|
||||
checkRuntimeLibs(t, []string{"liball_available.vendor", "libvendor1", "libproduct_vendor.vendor"}, module)
|
||||
|
||||
// runtime_libs for product variants have '.product' suffixes if the modules have both core
|
||||
// and product variants.
|
||||
|
@ -2791,7 +2799,7 @@ func TestRuntimeLibs(t *testing.T) {
|
|||
checkRuntimeLibs(t, []string{"liball_available.product"}, module)
|
||||
|
||||
module = ctx.ModuleForTests("libproduct2", variant).Module().(*Module)
|
||||
checkRuntimeLibs(t, []string{"liball_available.product", "libproduct1"}, module)
|
||||
checkRuntimeLibs(t, []string{"liball_available.product", "libproduct1", "libproduct_vendor.product"}, module)
|
||||
}
|
||||
|
||||
func TestExcludeRuntimeLibs(t *testing.T) {
|
||||
|
@ -2817,10 +2825,10 @@ func TestRuntimeLibsNoVndk(t *testing.T) {
|
|||
checkRuntimeLibs(t, []string{"liball_available"}, module)
|
||||
|
||||
module = ctx.ModuleForTests("libvendor2", variant).Module().(*Module)
|
||||
checkRuntimeLibs(t, []string{"liball_available", "libvendor1"}, module)
|
||||
checkRuntimeLibs(t, []string{"liball_available", "libvendor1", "libproduct_vendor"}, module)
|
||||
|
||||
module = ctx.ModuleForTests("libproduct2", variant).Module().(*Module)
|
||||
checkRuntimeLibs(t, []string{"liball_available", "libproduct1"}, module)
|
||||
checkRuntimeLibs(t, []string{"liball_available", "libproduct1", "libproduct_vendor"}, module)
|
||||
}
|
||||
|
||||
func checkStaticLibs(t *testing.T, expected []string, module *Module) {
|
||||
|
|
|
@ -106,6 +106,8 @@ type LinkableInterface interface {
|
|||
IsVndkExt() bool
|
||||
IsVndkPrivate() bool
|
||||
HasVendorVariant() bool
|
||||
HasProductVariant() bool
|
||||
HasNonSystemVariants() bool
|
||||
InProduct() bool
|
||||
|
||||
SdkVersion() string
|
||||
|
|
|
@ -71,6 +71,15 @@ func (mod *Module) HasVendorVariant() bool {
|
|||
return Bool(mod.VendorProperties.Vendor_available) || Bool(mod.VendorProperties.Odm_available)
|
||||
}
|
||||
|
||||
// Always returns false because rust modules do not support product variant.
|
||||
func (mod *Module) HasProductVariant() bool {
|
||||
return Bool(mod.VendorProperties.Product_available)
|
||||
}
|
||||
|
||||
func (mod *Module) HasNonSystemVariants() bool {
|
||||
return mod.HasVendorVariant() || mod.HasProductVariant()
|
||||
}
|
||||
|
||||
func (c *Module) InProduct() bool {
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue