Filter duplicate modules in platform_compat_config_singleton
Previously, unpacking a snapshot containing a prebuilt_platform_compat_config into a source build would cause build failure because of duplicate ids because the singleton would collate ids from both prebuilts (versioned and unversioned) and source. This change filters out versioned prebuilts and only uses prebuilts that are preferred and source modules that have not been replaced by a prebuilt. Bug: 182402754 Test: m nothing Change-Id: Idacbb34444e5156370df70bf88c6e8a7e2d67890
This commit is contained in:
parent
db462dd987
commit
bb9ff5108b
2 changed files with 28 additions and 4 deletions
|
@ -221,12 +221,40 @@ type platformCompatConfigSingleton struct {
|
|||
metadata android.Path
|
||||
}
|
||||
|
||||
// isModulePreferredByCompatConfig checks to see whether the module is preferred for use by
|
||||
// platform compat config.
|
||||
func isModulePreferredByCompatConfig(module android.Module) bool {
|
||||
// A versioned prebuilt_platform_compat_config, i.e. foo-platform-compat-config@current should be
|
||||
// ignored.
|
||||
if s, ok := module.(android.SdkAware); ok {
|
||||
if !s.ContainingSdk().Unversioned() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// A prebuilt module should only be used when it is preferred.
|
||||
if pi, ok := module.(android.PrebuiltInterface); ok {
|
||||
if p := pi.Prebuilt(); p != nil {
|
||||
return p.UsePrebuilt()
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise, a module should only be used if it has not been replaced by a prebuilt.
|
||||
return !module.IsReplacedByPrebuilt()
|
||||
}
|
||||
|
||||
func (p *platformCompatConfigSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
||||
|
||||
var compatConfigMetadata android.Paths
|
||||
|
||||
ctx.VisitAllModules(func(module android.Module) {
|
||||
if !module.Enabled() {
|
||||
return
|
||||
}
|
||||
if c, ok := module.(platformCompatConfigMetadataProvider); ok {
|
||||
if !isModulePreferredByCompatConfig(module) {
|
||||
return
|
||||
}
|
||||
metadata := c.compatConfigMetadata()
|
||||
compatConfigMetadata = append(compatConfigMetadata, metadata)
|
||||
}
|
||||
|
|
|
@ -77,8 +77,6 @@ prebuilt_platform_compat_config {
|
|||
// Make sure that the snapshot metadata is collated by the platform compat config singleton.
|
||||
java.CheckMergedCompatConfigInputs(t, result, "snapshot module",
|
||||
"out/soong/.intermediates/myconfig/android_common/myconfig_meta.xml",
|
||||
// TODO(b/182402754): Remove this as only the config file from the preferred module should be used.
|
||||
"snapshot/compat_configs/myconfig/myconfig_meta.xml",
|
||||
)
|
||||
}),
|
||||
|
||||
|
@ -86,8 +84,6 @@ prebuilt_platform_compat_config {
|
|||
func(t *testing.T, result *android.TestResult) {
|
||||
// Make sure that the snapshot metadata is collated by the platform compat config singleton.
|
||||
java.CheckMergedCompatConfigInputs(t, result, "snapshot module",
|
||||
"out/soong/.intermediates/myconfig/android_common/myconfig_meta.xml",
|
||||
// TODO(b/182402754): Remove this as only the config file from the preferred module should be used.
|
||||
"snapshot/compat_configs/myconfig/myconfig_meta.xml",
|
||||
)
|
||||
}),
|
||||
|
|
Loading…
Reference in a new issue