Merge "Create APEX variant for prebuilt_apex/apex_set" am: 2960e9bdf2
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1738034 Change-Id: I1003d7a860691c0d13a31f0b5ac0e6f384989fd5
This commit is contained in:
27
apex/apex.go
27
apex/apex.go
@@ -1057,8 +1057,9 @@ func apexMutator(mctx android.BottomUpMutatorContext) {
|
|||||||
|
|
||||||
// apexBundle itself is mutated so that it and its dependencies have the same apex variant.
|
// 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.
|
// TODO(jiyong): document the reason why the VNDK APEX is an exception here.
|
||||||
if a, ok := mctx.Module().(*apexBundle); ok && !a.vndkApex {
|
unprefixedModuleName := android.RemoveOptionalPrebuiltPrefix(mctx.ModuleName())
|
||||||
apexBundleName := mctx.ModuleName()
|
if apexModuleTypeRequiresVariant(mctx.Module()) {
|
||||||
|
apexBundleName := unprefixedModuleName
|
||||||
mctx.CreateVariations(apexBundleName)
|
mctx.CreateVariations(apexBundleName)
|
||||||
if strings.HasPrefix(apexBundleName, "com.android.art") {
|
if strings.HasPrefix(apexBundleName, "com.android.art") {
|
||||||
// Create an alias from the platform variant. This is done to make
|
// Create an alias from the platform variant. This is done to make
|
||||||
@@ -1076,6 +1077,12 @@ func apexMutator(mctx android.BottomUpMutatorContext) {
|
|||||||
mctx.ModuleErrorf("base property is not set")
|
mctx.ModuleErrorf("base property is not set")
|
||||||
return
|
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)
|
mctx.CreateVariations(apexBundleName)
|
||||||
if strings.HasPrefix(apexBundleName, "com.android.art") {
|
if strings.HasPrefix(apexBundleName, "com.android.art") {
|
||||||
// TODO(b/183882457): See note for CreateAliasVariation above.
|
// TODO(b/183882457): See note for CreateAliasVariation above.
|
||||||
@@ -1084,6 +1091,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
|
// See android.UpdateDirectlyInAnyApex
|
||||||
// TODO(jiyong): move this to android/apex.go?
|
// TODO(jiyong): move this to android/apex.go?
|
||||||
func apexDirectlyInAnyMutator(mctx android.BottomUpMutatorContext) {
|
func apexDirectlyInAnyMutator(mctx android.BottomUpMutatorContext) {
|
||||||
|
@@ -4389,7 +4389,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"
|
expectedInput := "myapex-arm64.apex"
|
||||||
if prebuilt.inputApex.String() != expectedInput {
|
if prebuilt.inputApex.String() != expectedInput {
|
||||||
@@ -4398,7 +4398,7 @@ func TestPrebuilt(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPrebuiltMissingSrc(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 {
|
prebuilt_apex {
|
||||||
name: "myapex",
|
name: "myapex",
|
||||||
}
|
}
|
||||||
@@ -4414,7 +4414,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"
|
expected := "notmyapex.apex"
|
||||||
if p.installFilename != expected {
|
if p.installFilename != expected {
|
||||||
@@ -4433,7 +4433,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"}
|
expected := []string{"myapex"}
|
||||||
actual := android.AndroidMkEntriesForTest(t, ctx, p)[0].EntryMap["LOCAL_OVERRIDES_MODULES"]
|
actual := android.AndroidMkEntriesForTest(t, ctx, p)[0].EntryMap["LOCAL_OVERRIDES_MODULES"]
|
||||||
@@ -4503,7 +4503,7 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make sure that the prebuilt_apex has the correct input APEX.
|
// 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")
|
rule = prebuiltApex.Rule("android/soong/android.Cp")
|
||||||
if expected, actual := "myapex-arm64.apex", android.NormalizePathForTesting(rule.Input); !reflect.DeepEqual(expected, actual) {
|
if expected, actual := "myapex-arm64.apex", android.NormalizePathForTesting(rule.Input); !reflect.DeepEqual(expected, actual) {
|
||||||
t.Errorf("expected: %q, found: %q", expected, actual)
|
t.Errorf("expected: %q, found: %q", expected, actual)
|
||||||
@@ -6522,8 +6522,8 @@ func TestAppSetBundlePrebuilt(t *testing.T) {
|
|||||||
android.AssertArrayString(t, "extractor input", []string{"myapex.hwasan.apks"}, extractedApex.Inputs.Strings())
|
android.AssertArrayString(t, "extractor input", []string{"myapex.hwasan.apks"}, extractedApex.Inputs.Strings())
|
||||||
|
|
||||||
// Ditto for the apex.
|
// Ditto for the apex.
|
||||||
m = ctx.ModuleForTests("myapex", "android_common")
|
m = ctx.ModuleForTests("myapex", "android_common_myapex")
|
||||||
copiedApex := m.Output("out/soong/.intermediates/myapex/android_common/foo_v2.apex")
|
copiedApex := m.Output("out/soong/.intermediates/myapex/android_common_myapex/foo_v2.apex")
|
||||||
|
|
||||||
android.AssertStringEquals(t, "myapex input", extractorOutput, copiedApex.Input.String())
|
android.AssertStringEquals(t, "myapex input", extractorOutput, copiedApex.Input.String())
|
||||||
}
|
}
|
||||||
@@ -7183,7 +7183,7 @@ func TestApexSet(t *testing.T) {
|
|||||||
t.Errorf("Unexpected abis parameter - expected %q vs actual %q", expected, actual)
|
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)
|
a := m.Module().(*ApexSet)
|
||||||
expectedOverrides := []string{"foo"}
|
expectedOverrides := []string{"foo"}
|
||||||
actualOverrides := android.AndroidMkEntriesForTest(t, ctx, a)[0].EntryMap["LOCAL_OVERRIDES_MODULES"]
|
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`,
|
`com.android.art.apex.selector`,
|
||||||
`prebuilt_bar`,
|
`prebuilt_bar`,
|
||||||
`prebuilt_foo`,
|
`prebuilt_foo`,
|
||||||
|
Reference in New Issue
Block a user