arch specific dependencies are supported for apex

The apex module type now supports arch specific native dependencies.

apex {
    name: "myapex",
    arch: {
        arm64: {
	    native_shared_libraries: ["arm64_only_lib"],
	},
    },
}

Bug: 174639241
Test: m nothing
Change-Id: I3f00aa87c480d4127b27d33e9620c4336824e937
This commit is contained in:
Jiyong Park 2020-12-14 18:44:04 +09:00
parent 9ae3c52b20
commit 59140307ec
2 changed files with 91 additions and 0 deletions

View file

@ -237,6 +237,23 @@ type apexTargetBundleProperties struct {
}
}
type apexArchBundleProperties struct {
Arch struct {
Arm struct {
ApexNativeDependencies
}
Arm64 struct {
ApexNativeDependencies
}
X86 struct {
ApexNativeDependencies
}
X86_64 struct {
ApexNativeDependencies
}
}
}
// These properties can be used in override_apex to override the corresponding properties in the
// base apex.
type overridableProperties struct {
@ -273,6 +290,7 @@ type apexBundle struct {
// Properties
properties apexBundleProperties
targetProperties apexTargetBundleProperties
archProperties apexArchBundleProperties
overridableProperties overridableProperties
vndkProperties apexVndkProperties // only for apex_vndk modules
@ -653,6 +671,20 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) {
}
}
// Add native modules targeting a specific arch variant
switch target.Arch.ArchType {
case android.Arm:
depsList = append(depsList, a.archProperties.Arch.Arm.ApexNativeDependencies)
case android.Arm64:
depsList = append(depsList, a.archProperties.Arch.Arm64.ApexNativeDependencies)
case android.X86:
depsList = append(depsList, a.archProperties.Arch.X86.ApexNativeDependencies)
case android.X86_64:
depsList = append(depsList, a.archProperties.Arch.X86_64.ApexNativeDependencies)
default:
panic(fmt.Errorf("unsupported arch %v\n", ctx.Arch().ArchType))
}
for _, d := range depsList {
addDependenciesForNativeModules(ctx, d, target, imageVariation)
}
@ -1910,6 +1942,7 @@ func newApexBundle() *apexBundle {
module.AddProperties(&module.properties)
module.AddProperties(&module.targetProperties)
module.AddProperties(&module.archProperties)
module.AddProperties(&module.overridableProperties)
android.InitAndroidMultiTargetsArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)

View file

@ -3890,6 +3890,64 @@ func TestApexWithTarget(t *testing.T) {
ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_shared")
}
func TestApexWithArch(t *testing.T) {
ctx, _ := testApex(t, `
apex {
name: "myapex",
key: "myapex.key",
arch: {
arm64: {
native_shared_libs: ["mylib.arm64"],
},
x86_64: {
native_shared_libs: ["mylib.x64"],
},
}
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
cc_library {
name: "mylib.arm64",
srcs: ["mylib.cpp"],
system_shared_libs: [],
stl: "none",
// TODO: remove //apex_available:platform
apex_available: [
"//apex_available:platform",
"myapex",
],
}
cc_library {
name: "mylib.x64",
srcs: ["mylib.cpp"],
system_shared_libs: [],
stl: "none",
// TODO: remove //apex_available:platform
apex_available: [
"//apex_available:platform",
"myapex",
],
}
`)
apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule")
copyCmds := apexRule.Args["copy_commands"]
// Ensure that apex variant is created for the direct dep
ensureListContains(t, ctx.ModuleVariantsForTests("mylib.arm64"), "android_arm64_armv8-a_shared_apex10000")
ensureListNotContains(t, ctx.ModuleVariantsForTests("mylib.x64"), "android_arm64_armv8-a_shared_apex10000")
// Ensure that both direct and indirect deps are copied into apex
ensureContains(t, copyCmds, "image.apex/lib64/mylib.arm64.so")
ensureNotContains(t, copyCmds, "image.apex/lib64/mylib.x64.so")
}
func TestApexWithShBinary(t *testing.T) {
ctx, _ := testApex(t, `
apex {