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:
Paul Duffin 2021-06-15 19:09:41 +01:00
parent 95a4bedc68
commit 5ec165d755
3 changed files with 34 additions and 11 deletions

View File

@ -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) {

View File

@ -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"]

View File

@ -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`,