Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d0c19c2 authored by Mathew Inwood's avatar Mathew Inwood
Browse files

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
parent 431b8a2f
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -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)