apex: use SubName for requiredDeps
apexBundle keeps the required dependencies for native modules which are external dependencies and then records it in .mk file as LOCAL_REQUIRED_MODULES key. LOCAL_REQUIRED_MODULES should list module name which are made of cc.BaseModuleName() + SubName. By the way, because a use_vendor:true apex is supposed to be installed in /system/apex, we don't append SubName(.vendor) suffix. Bug: 159211312 Bug: 155841765 Test: m Change-Id: Ifd2858dda0b373110a0cd18a0c55db41f0fc2a99
This commit is contained in:
15
apex/apex.go
15
apex/apex.go
@@ -2124,7 +2124,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
}
|
||||
af := apexFileForNativeLibrary(ctx, cc, handleSpecialLibs)
|
||||
af.transitiveDep = true
|
||||
if !a.Host() && !android.DirectlyInApex(ctx.ModuleName(), ctx.OtherModuleName(cc)) && (cc.IsStubs() || cc.HasStubsVariants()) {
|
||||
if !a.Host() && !android.DirectlyInApex(ctx.ModuleName(), depName) && (cc.IsStubs() || cc.HasStubsVariants()) {
|
||||
// If the dependency is a stubs lib, don't include it in this APEX,
|
||||
// but make sure that the lib is installed on the device.
|
||||
// In case no APEX is having the lib, the lib is installed to the system
|
||||
@@ -2132,8 +2132,17 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
//
|
||||
// Always include if we are a host-apex however since those won't have any
|
||||
// system libraries.
|
||||
if !android.DirectlyInAnyApex(ctx, cc.Name()) && !android.InList(cc.BaseModuleName(), a.requiredDeps) {
|
||||
a.requiredDeps = append(a.requiredDeps, cc.BaseModuleName())
|
||||
if !android.DirectlyInAnyApex(ctx, depName) {
|
||||
// we need a module name for Make
|
||||
name := cc.BaseModuleName() + cc.Properties.SubName
|
||||
if proptools.Bool(a.properties.Use_vendor) {
|
||||
// we don't use subName(.vendor) for a "use_vendor: true" apex
|
||||
// which is supposed to be installed in /system
|
||||
name = cc.BaseModuleName()
|
||||
}
|
||||
if !android.InList(name, a.requiredDeps) {
|
||||
a.requiredDeps = append(a.requiredDeps, name)
|
||||
}
|
||||
}
|
||||
requireNativeLibs = append(requireNativeLibs, af.Stem())
|
||||
// Don't track further
|
||||
|
@@ -2202,6 +2202,71 @@ func TestVendorApex(t *testing.T) {
|
||||
ensureContains(t, androidMk, `LOCAL_MODULE_PATH := /tmp/target/product/test_device/vendor/apex`)
|
||||
}
|
||||
|
||||
func TestAndroidMk_UseVendorRequired(t *testing.T) {
|
||||
ctx, config := testApex(t, `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
use_vendor: true,
|
||||
native_shared_libs: ["mylib"],
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "mylib",
|
||||
vendor_available: true,
|
||||
apex_available: ["myapex"],
|
||||
}
|
||||
`, func(fs map[string][]byte, config android.Config) {
|
||||
setUseVendorAllowListForTest(config, []string{"myapex"})
|
||||
})
|
||||
|
||||
apexBundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle)
|
||||
data := android.AndroidMkDataForTest(t, config, "", apexBundle)
|
||||
name := apexBundle.BaseModuleName()
|
||||
prefix := "TARGET_"
|
||||
var builder strings.Builder
|
||||
data.Custom(&builder, name, prefix, "", data)
|
||||
androidMk := builder.String()
|
||||
ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += libc libm libdl\n")
|
||||
}
|
||||
|
||||
func TestAndroidMk_VendorApexRequired(t *testing.T) {
|
||||
ctx, config := testApex(t, `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
vendor: true,
|
||||
native_shared_libs: ["mylib"],
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "mylib",
|
||||
vendor_available: true,
|
||||
}
|
||||
`)
|
||||
|
||||
apexBundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle)
|
||||
data := android.AndroidMkDataForTest(t, config, "", apexBundle)
|
||||
name := apexBundle.BaseModuleName()
|
||||
prefix := "TARGET_"
|
||||
var builder strings.Builder
|
||||
data.Custom(&builder, name, prefix, "", data)
|
||||
androidMk := builder.String()
|
||||
ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += libc.vendor libm.vendor libdl.vendor\n")
|
||||
}
|
||||
|
||||
func TestAndroidMkWritesCommonProperties(t *testing.T) {
|
||||
ctx, config := testApex(t, `
|
||||
apex {
|
||||
|
Reference in New Issue
Block a user