diff options
author | 2025-03-10 14:27:34 +0000 | |
---|---|---|
committer | 2025-03-10 14:27:34 +0000 | |
commit | a59e2641d73eb54da7d7f309a75be945f9505c4c (patch) | |
tree | acc3191cbe85aacd2894ad22a34926ac977306b5 /aconfig | |
parent | 8b09c4b7b6c98f09b789b0a4dda41afea08531bf (diff) |
check exported flags when building all_aconfig_declarations
This change adds extra step in the build of all_aconfig_declarations. It
will check whether all exported flags are valid. The exported flag is
valid if the flag is used for guarding API.
Test: m all_aconfig_declarations
Bug: 336800305
Change-Id: Ib1121e418f708b2ab290ed36aa3db7604cd04bdd
Diffstat (limited to 'aconfig')
-rw-r--r-- | aconfig/all_aconfig_declarations.go | 35 | ||||
-rw-r--r-- | aconfig/init.go | 8 |
2 files changed, 42 insertions, 1 deletions
diff --git a/aconfig/all_aconfig_declarations.go b/aconfig/all_aconfig_declarations.go index 3d07e16dc..31616d833 100644 --- a/aconfig/all_aconfig_declarations.go +++ b/aconfig/all_aconfig_declarations.go @@ -95,11 +95,44 @@ func GenerateFinalizedFlagsForApiSurface(ctx android.ModuleContext, outputPath a }) } +func GenerateExportedFlagCheck(ctx android.ModuleContext, outputPath android.WritablePath, + parsedFlagsFile android.Path, apiSurface ApiSurfaceContributorProperties) { + + apiSignatureFiles := android.Paths{} + for _, apiSignatureFile := range apiSurface.Api_signature_files.GetOrDefault(ctx, nil) { + if path := android.PathForModuleSrc(ctx, apiSignatureFile); path != nil { + apiSignatureFiles = append(apiSignatureFiles, path) + } + } + finalizedFlagsFile := android.PathForModuleSrc(ctx, apiSurface.Finalized_flags_file) + + ctx.Build(pctx, android.BuildParams{ + Rule: ExportedFlagCheckRule, + Inputs: append(apiSignatureFiles, finalizedFlagsFile, parsedFlagsFile), + Output: outputPath, + Args: map[string]string{ + "api_signature_files": android.JoinPathsWithPrefix(apiSignatureFiles, "--api-signature-file "), + "finalized_flags_file": "--finalized-flags-file " + finalizedFlagsFile.String(), + "parsed_flags_file": "--parsed-flags-file " + parsedFlagsFile.String(), + }, + }) +} + func (this *allAconfigDeclarationsSingleton) GenerateAndroidBuildActions(ctx android.ModuleContext) { parsedFlagsFile := android.PathForIntermediates(ctx, "all_aconfig_declarations.pb") this.finalizedFlags = android.PathForIntermediates(ctx, "finalized-flags.txt") GenerateFinalizedFlagsForApiSurface(ctx, this.finalizedFlags, parsedFlagsFile, this.properties) - ctx.Phony("all_aconfig_declarations", this.finalizedFlags) + + depsFiles := android.Paths{this.finalizedFlags} + if checkExportedFlag, ok := ctx.Config().GetBuildFlag("RELEASE_EXPORTED_FLAG_CHECK"); ok { + if checkExportedFlag == "true" { + invalidExportedFlags := android.PathForIntermediates(ctx, "invalid_exported_flags.txt") + GenerateExportedFlagCheck(ctx, invalidExportedFlags, parsedFlagsFile, this.properties) + depsFiles = append(depsFiles, invalidExportedFlags) + } + } + + ctx.Phony("all_aconfig_declarations", depsFiles...) android.SetProvider(ctx, allAconfigDeclarationsInfoProvider, allAconfigDeclarationsInfo{ parsedFlagsFile: parsedFlagsFile, diff --git a/aconfig/init.go b/aconfig/init.go index b2fe5a309..d8d547022 100644 --- a/aconfig/init.go +++ b/aconfig/init.go @@ -77,6 +77,13 @@ var ( "${record-finalized-flags}", }, }, "api_signature_files", "finalized_flags_file", "parsed_flags_file") + ExportedFlagCheckRule = pctx.AndroidStaticRule("ExportedFlagCheckRule", + blueprint.RuleParams{ + Command: `${exported-flag-check} ${parsed_flags_file} ${finalized_flags_file} ${api_signature_files} > ${out}`, + CommandDeps: []string{ + "${exported-flag-check}", + }, + }, "api_signature_files", "finalized_flags_file", "parsed_flags_file") CreateStorageRule = pctx.AndroidStaticRule("aconfig_create_storage", blueprint.RuleParams{ @@ -124,6 +131,7 @@ func init() { pctx.HostBinToolVariable("aconfig", "aconfig") pctx.HostBinToolVariable("soong_zip", "soong_zip") pctx.HostBinToolVariable("record-finalized-flags", "record-finalized-flags") + pctx.HostBinToolVariable("exported-flag-check", "exported-flag-check") } func RegisterBuildComponents(ctx android.RegistrationContext) { |