Singleton build rule for merged compat config.

This creates a single build artifact with all compat config from the build.

Test: m out/soong/compat_config/merged_compat_config.xml
Bug: 144927670

Change-Id: Ie60575469c22c201cf1f4d4c187c03c7212dd26b
This commit is contained in:
Mathew Inwood 2019-12-09 11:32:29 +00:00
parent 431b8a2fdd
commit 4d0c19c271
1 changed files with 49 additions and 0 deletions

View File

@ -19,9 +19,14 @@ import (
)
func init() {
android.RegisterSingletonType("platform_compat_config_singleton", platformCompatConfigSingletonFactory)
android.RegisterModuleType("platform_compat_config", platformCompatConfigFactory)
}
type platformCompatConfigSingleton struct {
metadata android.Path
}
type platformCompatConfigProperties struct {
Src *string `android:"path"`
}
@ -35,6 +40,46 @@ type platformCompatConfig struct {
metadataFile android.OutputPath
}
func (p *platformCompatConfig) compatConfigMetadata() android.OutputPath {
return p.metadataFile
}
type platformCompatConfigIntf interface {
compatConfigMetadata() android.OutputPath
}
var _ platformCompatConfigIntf = (*platformCompatConfig)(nil)
// compat singleton rules
func (p *platformCompatConfigSingleton) GenerateBuildActions(ctx android.SingletonContext) {
var compatConfigMetadata android.Paths
ctx.VisitAllModules(func(module android.Module) {
if c, ok := module.(platformCompatConfigIntf); ok {
metadata := c.compatConfigMetadata()
compatConfigMetadata = append(compatConfigMetadata, metadata)
}
})
if compatConfigMetadata == nil {
// nothing to do.
return
}
rule := android.NewRuleBuilder()
outputPath := android.PathForOutput(ctx, "compat_config", "merged_compat_config.xml")
rule.Command().
BuiltTool(ctx, "process-compat-config").
FlagForEachInput("--xml ", compatConfigMetadata).
FlagWithOutput("--merged-config ", outputPath)
rule.Build(pctx, ctx, "merged-compat-config", "Merge compat config")
p.metadata = outputPath
}
func (p *platformCompatConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) {
rule := android.NewRuleBuilder()
@ -69,6 +114,10 @@ func (p *platformCompatConfig) AndroidMkEntries() []android.AndroidMkEntries {
}}
}
func platformCompatConfigSingletonFactory() android.Singleton {
return &platformCompatConfigSingleton{}
}
func platformCompatConfigFactory() android.Module {
module := &platformCompatConfig{}
module.AddProperties(&module.properties)