diff options
Diffstat (limited to 'aconfig/build_flags/build_flags_singleton.go')
| -rw-r--r-- | aconfig/build_flags/build_flags_singleton.go | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/aconfig/build_flags/build_flags_singleton.go b/aconfig/build_flags/build_flags_singleton.go index 3a06e72d6..68d8cda88 100644 --- a/aconfig/build_flags/build_flags_singleton.go +++ b/aconfig/build_flags/build_flags_singleton.go @@ -38,6 +38,10 @@ type allBuildFlagDeclarationsSingleton struct { configsTextProtoPath android.OutputPath } +var buildFlagArtifactsDistGoals = []string{ + "docs", "droid", "sdk", "release_config_metadata", "gms", +} + func (this *allBuildFlagDeclarationsSingleton) GenerateBuildActions(ctx android.SingletonContext) { // Find all of the build_flag_declarations modules var flagsFiles android.Paths @@ -55,8 +59,10 @@ func (this *allBuildFlagDeclarationsSingleton) GenerateBuildActions(ctx android. } }) + basePath := android.PathForIntermediates(ctx, "release_configs") + // Generate build action for build_flag (binary proto output) - this.flagsBinaryProtoPath = android.PathForIntermediates(ctx, "all_build_flag_declarations.pb") + this.flagsBinaryProtoPath = basePath.Join(ctx, "all_build_flag_declarations.pb") ctx.Build(pctx, android.BuildParams{ Rule: allDeclarationsRule, Inputs: flagsFiles, @@ -69,7 +75,7 @@ func (this *allBuildFlagDeclarationsSingleton) GenerateBuildActions(ctx android. ctx.Phony("all_build_flag_declarations", this.flagsBinaryProtoPath) // Generate build action for build_flag (text proto output) - this.flagsTextProtoPath = android.PathForIntermediates(ctx, "all_build_flag_declarations.textproto") + this.flagsTextProtoPath = basePath.Join(ctx, "all_build_flag_declarations.textproto") ctx.Build(pctx, android.BuildParams{ Rule: allDeclarationsRuleTextProto, Input: this.flagsBinaryProtoPath, @@ -79,7 +85,7 @@ func (this *allBuildFlagDeclarationsSingleton) GenerateBuildActions(ctx android. ctx.Phony("all_build_flag_declarations_textproto", this.flagsTextProtoPath) // Generate build action for release_configs (binary proto output) - this.configsBinaryProtoPath = android.PathForIntermediates(ctx, "all_release_config_contributions.pb") + this.configsBinaryProtoPath = basePath.Join(ctx, "all_release_config_contributions.pb") ctx.Build(pctx, android.BuildParams{ Rule: allReleaseConfigContributionsRule, Inputs: contributionDirs, @@ -92,7 +98,7 @@ func (this *allBuildFlagDeclarationsSingleton) GenerateBuildActions(ctx android. }) ctx.Phony("all_release_config_contributions", this.configsBinaryProtoPath) - this.configsTextProtoPath = android.PathForIntermediates(ctx, "all_release_config_contributions.textproto") + this.configsTextProtoPath = basePath.Join(ctx, "all_release_config_contributions.textproto") ctx.Build(pctx, android.BuildParams{ Rule: allReleaseConfigContributionsRule, Inputs: contributionDirs, @@ -105,29 +111,57 @@ func (this *allBuildFlagDeclarationsSingleton) GenerateBuildActions(ctx android. }) ctx.Phony("all_release_config_contributions_textproto", this.configsTextProtoPath) + // Validator to ensure that there are no duplicate flag declarations. + // The Validator timestamp file. + mapsListPath := basePath.Join(ctx, "release_config_map.list") + duplicatesPath := basePath.Join(ctx, "duplicate_allowlist.list") + validatorPath := basePath.Join(ctx, "release_config_map.timestamp") + + // The file containing the list of all `release_config_map.textproto` files in the source tree. + ctx.Build(pctx, android.BuildParams{ + Rule: android.CpIfChanged, + Input: android.PathForArbitraryOutput(ctx, ".module_paths", "release_config_map.list"), + Output: mapsListPath, + Validation: validatorPath, + }) + ctx.Build(pctx, android.BuildParams{ + Rule: android.CpIfChanged, + Input: android.PathForArbitraryOutput(ctx, ".module_paths", "duplicate_allowlist.list"), + Output: duplicatesPath, + Validation: validatorPath, + }) + ctx.Build(pctx, android.BuildParams{ + Rule: flagDeclarationsValidationRule, + Input: mapsListPath, + Implicits: append(android.Paths{duplicatesPath}, flagsFiles...), + Output: validatorPath, + }) + // Make sure that this is at least built on CI machines. + ctx.Phony("droid", mapsListPath) + // Add a simple target for ci/build_metadata to use. ctx.Phony("release_config_metadata", this.flagsBinaryProtoPath, this.flagsTextProtoPath, this.configsBinaryProtoPath, this.configsTextProtoPath, + mapsListPath, ) ctx.DistForGoal("droid", this.flagsBinaryProtoPath) - for _, goal := range []string{"docs", "droid", "sdk", "release_config_metadata"} { - ctx.DistForGoalWithFilename(goal, this.flagsBinaryProtoPath, "build_flags/all_flags.pb") - ctx.DistForGoalWithFilename(goal, this.flagsTextProtoPath, "build_flags/all_flags.textproto") - ctx.DistForGoalWithFilename(goal, this.configsBinaryProtoPath, "build_flags/all_release_config_contributions.pb") - ctx.DistForGoalWithFilename(goal, this.configsTextProtoPath, "build_flags/all_release_config_contributions.textproto") - } + + ctx.DistForGoalsWithFilename(buildFlagArtifactsDistGoals, this.flagsBinaryProtoPath, "build_flags/all_flags.pb") + ctx.DistForGoalsWithFilename(buildFlagArtifactsDistGoals, this.flagsTextProtoPath, "build_flags/all_flags.textproto") + ctx.DistForGoalsWithFilename(buildFlagArtifactsDistGoals, this.configsBinaryProtoPath, "build_flags/all_release_config_contributions.pb") + ctx.DistForGoalsWithFilename(buildFlagArtifactsDistGoals, this.configsTextProtoPath, "build_flags/all_release_config_contributions.textproto") if ctx.Config().HasDeviceProduct() { flagsDir := android.PathForOutput(ctx, "release-config") baseAllRelease := fmt.Sprintf("all_release_configs-%s", ctx.Config().DeviceProduct()) distAllReleaseConfigsArtifact := func(ext string) { - ctx.DistForGoalWithFilename( - "droid", + ctx.DistForGoalsWithFilename( + buildFlagArtifactsDistGoals, flagsDir.Join(ctx, fmt.Sprintf("%s.%s", baseAllRelease, ext)), fmt.Sprintf("build_flags/all_release_configs.%s", ext), ) |
