Merge "Fix duplicate variations when using the VSDK." am: 7e21d3cd04

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1720491

Change-Id: Idde0f28a746f25bd47b836de26178f761d82bda5
This commit is contained in:
Jose "Pepe" Galmes
2021-06-02 03:48:49 +00:00
committed by Automerger Merge Worker

View File

@@ -453,30 +453,49 @@ func (p *baseSnapshotDecorator) snapshotAndroidMkSuffix() string {
return p.baseProperties.Androidmk_suffix
}
func (p *baseSnapshotDecorator) setSnapshotAndroidMkSuffix(ctx android.ModuleContext) {
coreVariations := append(ctx.Target().Variations(), blueprint.Variation{
func (p *baseSnapshotDecorator) setSnapshotAndroidMkSuffix(ctx android.ModuleContext, variant string) {
// If there are any 2 or more variations among {core, product, vendor, recovery}
// we have to add the androidmk suffix to avoid duplicate modules with the same
// name.
variations := append(ctx.Target().Variations(), blueprint.Variation{
Mutator: "image",
Variation: android.CoreVariation})
if ctx.OtherModuleFarDependencyVariantExists(coreVariations, ctx.Module().(*Module).BaseModuleName()) {
if ctx.OtherModuleFarDependencyVariantExists(variations, ctx.Module().(*Module).BaseModuleName()) {
p.baseProperties.Androidmk_suffix = p.image.moduleNameSuffix()
return
}
// If there is no matching core variation, there could still be a
// product variation, for example if a module is product specific and
// vendor available. In that case, we also want to add the androidmk
// suffix.
productVariations := append(ctx.Target().Variations(), blueprint.Variation{
variations = append(ctx.Target().Variations(), blueprint.Variation{
Mutator: "image",
Variation: ProductVariationPrefix + ctx.DeviceConfig().PlatformVndkVersion()})
if ctx.OtherModuleFarDependencyVariantExists(productVariations, ctx.Module().(*Module).BaseModuleName()) {
if ctx.OtherModuleFarDependencyVariantExists(variations, ctx.Module().(*Module).BaseModuleName()) {
p.baseProperties.Androidmk_suffix = p.image.moduleNameSuffix()
return
}
images := []snapshotImage{vendorSnapshotImageSingleton, recoverySnapshotImageSingleton}
for _, image := range images {
if p.image == image {
continue
}
variations = append(ctx.Target().Variations(), blueprint.Variation{
Mutator: "image",
Variation: image.imageVariantName(ctx.DeviceConfig())})
if ctx.OtherModuleFarDependencyVariantExists(variations,
ctx.Module().(*Module).BaseModuleName()+
getSnapshotNameSuffix(
image.moduleNameSuffix()+variant,
p.version(),
ctx.DeviceConfig().Arches()[0].ArchType.String())) {
p.baseProperties.Androidmk_suffix = p.image.moduleNameSuffix()
return
}
}
p.baseProperties.Androidmk_suffix = ""
}
@@ -566,7 +585,16 @@ func (p *snapshotLibraryDecorator) matchesWithDevice(config android.DeviceConfig
// As snapshots are prebuilts, this just returns the prebuilt binary after doing things which are
// done by normal library decorator, e.g. exporting flags.
func (p *snapshotLibraryDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path {
p.setSnapshotAndroidMkSuffix(ctx)
var variant string
if p.shared() {
variant = snapshotSharedSuffix
} else if p.static() {
variant = snapshotStaticSuffix
} else {
variant = snapshotHeaderSuffix
}
p.setSnapshotAndroidMkSuffix(ctx, variant)
if p.header() {
return p.libraryDecorator.link(ctx, flags, deps, objs)
@@ -784,7 +812,7 @@ func (p *snapshotBinaryDecorator) matchesWithDevice(config android.DeviceConfig)
// cc modules' link functions are to link compiled objects into final binaries.
// As snapshots are prebuilts, this just returns the prebuilt binary
func (p *snapshotBinaryDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path {
p.setSnapshotAndroidMkSuffix(ctx)
p.setSnapshotAndroidMkSuffix(ctx, snapshotBinarySuffix)
if !p.matchesWithDevice(ctx.DeviceConfig()) {
return nil
@@ -879,7 +907,7 @@ func (p *snapshotObjectLinker) matchesWithDevice(config android.DeviceConfig) bo
// cc modules' link functions are to link compiled objects into final binaries.
// As snapshots are prebuilts, this just returns the prebuilt binary
func (p *snapshotObjectLinker) link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path {
p.setSnapshotAndroidMkSuffix(ctx)
p.setSnapshotAndroidMkSuffix(ctx, snapshotObjectSuffix)
if !p.matchesWithDevice(ctx.DeviceConfig()) {
return nil