Create APEX variant for prebuilt_apex/apex_set
Previously, the prebuilt_apex/apex_set did not have an apex specific variant created which meant that they depended upon the platform variant of the modules it depended upon. This change creates an apex variant for them just as is done for the apex module type which causes it to depend upon the apex specific variant of the modules it depends upon. Test: m droid Bug: 179354495 Merged-In: I7d6f3609c267b3e90b90b9befe7d76f351a0c2bd Change-Id: I7d6f3609c267b3e90b90b9befe7d76f351a0c2bd (cherry picked from commit 6717d88f465a96537cf0c3e74c1d060d6a739752)
This commit is contained in:
parent
95a4bedc68
commit
5ec165d755
27
apex/apex.go
27
apex/apex.go
|
@ -1044,8 +1044,9 @@ func apexMutator(mctx android.BottomUpMutatorContext) {
|
|||
|
||||
// apexBundle itself is mutated so that it and its dependencies have the same apex variant.
|
||||
// TODO(jiyong): document the reason why the VNDK APEX is an exception here.
|
||||
if a, ok := mctx.Module().(*apexBundle); ok && !a.vndkApex {
|
||||
apexBundleName := mctx.ModuleName()
|
||||
unprefixedModuleName := android.RemoveOptionalPrebuiltPrefix(mctx.ModuleName())
|
||||
if apexModuleTypeRequiresVariant(mctx.Module()) {
|
||||
apexBundleName := unprefixedModuleName
|
||||
mctx.CreateVariations(apexBundleName)
|
||||
if strings.HasPrefix(apexBundleName, "com.android.art") {
|
||||
// Create an alias from the platform variant. This is done to make
|
||||
|
@ -1063,6 +1064,12 @@ func apexMutator(mctx android.BottomUpMutatorContext) {
|
|||
mctx.ModuleErrorf("base property is not set")
|
||||
return
|
||||
}
|
||||
// Workaround the issue reported in b/191269918 by using the unprefixed module name of this
|
||||
// module as the default variation to use if dependencies of this module do not have the correct
|
||||
// apex variant name. This name matches the name used to create the variations of modules for
|
||||
// which apexModuleTypeRequiresVariant return true.
|
||||
// TODO(b/191269918): Remove this workaround.
|
||||
mctx.SetDefaultDependencyVariation(&unprefixedModuleName)
|
||||
mctx.CreateVariations(apexBundleName)
|
||||
if strings.HasPrefix(apexBundleName, "com.android.art") {
|
||||
// TODO(b/183882457): See note for CreateAliasVariation above.
|
||||
|
@ -1071,6 +1078,22 @@ func apexMutator(mctx android.BottomUpMutatorContext) {
|
|||
}
|
||||
}
|
||||
|
||||
// apexModuleTypeRequiresVariant determines whether the module supplied requires an apex specific
|
||||
// variant.
|
||||
func apexModuleTypeRequiresVariant(module android.Module) bool {
|
||||
if a, ok := module.(*apexBundle); ok {
|
||||
return !a.vndkApex
|
||||
}
|
||||
|
||||
// Match apex_set and prebuilt_apex. Would also match apexBundle but that is handled specially
|
||||
// above.
|
||||
if _, ok := module.(ApexInfoMutator); ok {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// See android.UpdateDirectlyInAnyApex
|
||||
// TODO(jiyong): move this to android/apex.go?
|
||||
func apexDirectlyInAnyMutator(mctx android.BottomUpMutatorContext) {
|
||||
|
|
|
@ -4166,7 +4166,7 @@ func TestPrebuilt(t *testing.T) {
|
|||
}
|
||||
`)
|
||||
|
||||
prebuilt := ctx.ModuleForTests("myapex", "android_common").Module().(*Prebuilt)
|
||||
prebuilt := ctx.ModuleForTests("myapex", "android_common_myapex").Module().(*Prebuilt)
|
||||
|
||||
expectedInput := "myapex-arm64.apex"
|
||||
if prebuilt.inputApex.String() != expectedInput {
|
||||
|
@ -4175,7 +4175,7 @@ func TestPrebuilt(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPrebuiltMissingSrc(t *testing.T) {
|
||||
testApexError(t, `module "myapex" variant "android_common".*: prebuilt_apex does not support "arm64_armv8-a"`, `
|
||||
testApexError(t, `module "myapex" variant "android_common_myapex".*: prebuilt_apex does not support "arm64_armv8-a"`, `
|
||||
prebuilt_apex {
|
||||
name: "myapex",
|
||||
}
|
||||
|
@ -4191,7 +4191,7 @@ func TestPrebuiltFilenameOverride(t *testing.T) {
|
|||
}
|
||||
`)
|
||||
|
||||
p := ctx.ModuleForTests("myapex", "android_common").Module().(*Prebuilt)
|
||||
p := ctx.ModuleForTests("myapex", "android_common_myapex").Module().(*Prebuilt)
|
||||
|
||||
expected := "notmyapex.apex"
|
||||
if p.installFilename != expected {
|
||||
|
@ -4210,7 +4210,7 @@ func TestPrebuiltOverrides(t *testing.T) {
|
|||
}
|
||||
`)
|
||||
|
||||
p := ctx.ModuleForTests("myapex.prebuilt", "android_common").Module().(*Prebuilt)
|
||||
p := ctx.ModuleForTests("myapex.prebuilt", "android_common_myapex.prebuilt").Module().(*Prebuilt)
|
||||
|
||||
expected := []string{"myapex"}
|
||||
actual := android.AndroidMkEntriesForTest(t, ctx, p)[0].EntryMap["LOCAL_OVERRIDES_MODULES"]
|
||||
|
@ -4280,7 +4280,7 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
|
|||
}
|
||||
|
||||
// Make sure that the prebuilt_apex has the correct input APEX.
|
||||
prebuiltApex := ctx.ModuleForTests("myapex", "android_common")
|
||||
prebuiltApex := ctx.ModuleForTests("myapex", "android_common_myapex")
|
||||
rule = prebuiltApex.Rule("android/soong/android.Cp")
|
||||
if expected, actual := "myapex-arm64.apex", android.NormalizePathForTesting(rule.Input); !reflect.DeepEqual(expected, actual) {
|
||||
t.Errorf("expected: %q, found: %q", expected, actual)
|
||||
|
@ -6299,8 +6299,8 @@ func TestAppSetBundlePrebuilt(t *testing.T) {
|
|||
android.AssertArrayString(t, "extractor input", []string{"myapex.hwasan.apks"}, extractedApex.Inputs.Strings())
|
||||
|
||||
// Ditto for the apex.
|
||||
m = ctx.ModuleForTests("myapex", "android_common")
|
||||
copiedApex := m.Output("out/soong/.intermediates/myapex/android_common/foo_v2.apex")
|
||||
m = ctx.ModuleForTests("myapex", "android_common_myapex")
|
||||
copiedApex := m.Output("out/soong/.intermediates/myapex/android_common_myapex/foo_v2.apex")
|
||||
|
||||
android.AssertStringEquals(t, "myapex input", extractorOutput, copiedApex.Input.String())
|
||||
}
|
||||
|
@ -6960,7 +6960,7 @@ func TestApexSet(t *testing.T) {
|
|||
t.Errorf("Unexpected abis parameter - expected %q vs actual %q", expected, actual)
|
||||
}
|
||||
|
||||
m = ctx.ModuleForTests("myapex", "android_common")
|
||||
m = ctx.ModuleForTests("myapex", "android_common_myapex")
|
||||
a := m.Module().(*ApexSet)
|
||||
expectedOverrides := []string{"foo"}
|
||||
actualOverrides := android.AndroidMkEntriesForTest(t, ctx, a)[0].EntryMap["LOCAL_OVERRIDES_MODULES"]
|
||||
|
|
|
@ -519,7 +519,7 @@ func TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) {
|
|||
}
|
||||
`)
|
||||
|
||||
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common", []string{
|
||||
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{
|
||||
`com.android.art.apex.selector`,
|
||||
`prebuilt_bar`,
|
||||
`prebuilt_foo`,
|
||||
|
|
Loading…
Reference in New Issue