Add aconfig flag value text file in aconfig_declarations provider
Alongside with the generated proto file, the aconfig_declaration now
also outputs a text file that lists aconfig flags and values of its
corresponding proto file, in the format as shown below:
```
my.flag1=true
my.flag2=false
...
```
To prevent confusion between the preexisting proto file and the newly
introduced text file, the change also renames the variables of the proto
file from `intermediatePath` to `intermediateCacheOutputPath` and
likewise.
The utilization of the generated text file will be done in the child
changes.
Test: m out/soong/.intermediates/build/make/tools/aconfig/aconfig.test.flags/intermediate.txt && inspect output
Bug: 306024510
Change-Id: Iee16ad57bb87e992a477fc96502f79e971d01233
diff --git a/aconfig/aconfig_declarations.go b/aconfig/aconfig_declarations.go
index 05a6371..9bf7564 100644
--- a/aconfig/aconfig_declarations.go
+++ b/aconfig/aconfig_declarations.go
@@ -20,6 +20,7 @@
"android/soong/android"
"android/soong/bazel"
+
"github.com/google/blueprint"
)
@@ -116,9 +117,10 @@
// Provider published by aconfig_value_set
type DeclarationsProviderData struct {
- Package string
- Container string
- IntermediatePath android.WritablePath
+ Package string
+ Container string
+ IntermediateCacheOutputPath android.WritablePath
+ IntermediateDumpOutputPath android.WritablePath
}
var DeclarationsProviderKey = blueprint.NewProvider(DeclarationsProviderData{})
@@ -151,14 +153,14 @@
// Intermediate format
declarationFiles := android.PathsForModuleSrc(ctx, module.properties.Srcs)
- intermediatePath := android.PathForModuleOut(ctx, "intermediate.pb")
+ intermediateCacheFilePath := android.PathForModuleOut(ctx, "intermediate.pb")
defaultPermission := ctx.Config().ReleaseAconfigFlagDefaultPermission()
inputFiles := make([]android.Path, len(declarationFiles))
copy(inputFiles, declarationFiles)
inputFiles = append(inputFiles, valuesFiles...)
ctx.Build(pctx, android.BuildParams{
Rule: aconfigRule,
- Output: intermediatePath,
+ Output: intermediateCacheFilePath,
Inputs: inputFiles,
Description: "aconfig_declarations",
Args: map[string]string{
@@ -170,10 +172,19 @@
},
})
+ intermediateDumpFilePath := android.PathForModuleOut(ctx, "intermediate.txt")
+ ctx.Build(pctx, android.BuildParams{
+ Rule: aconfigTextRule,
+ Output: intermediateDumpFilePath,
+ Inputs: android.Paths{intermediateCacheFilePath},
+ Description: "aconfig_text",
+ })
+
ctx.SetProvider(DeclarationsProviderKey, DeclarationsProviderData{
- Package: module.properties.Package,
- Container: module.properties.Container,
- IntermediatePath: intermediatePath,
+ Package: module.properties.Package,
+ Container: module.properties.Container,
+ IntermediateCacheOutputPath: intermediateCacheFilePath,
+ IntermediateDumpOutputPath: intermediateDumpFilePath,
})
}
@@ -182,8 +193,8 @@
*mergedAconfigFiles = make(map[string]android.Paths)
}
ctx.VisitDirectDeps(func(module android.Module) {
- if dep := ctx.OtherModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData); dep.IntermediatePath != nil {
- (*mergedAconfigFiles)[dep.Container] = append((*mergedAconfigFiles)[dep.Container], dep.IntermediatePath)
+ if dep := ctx.OtherModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData); dep.IntermediateCacheOutputPath != nil {
+ (*mergedAconfigFiles)[dep.Container] = append((*mergedAconfigFiles)[dep.Container], dep.IntermediateCacheOutputPath)
return
}
if dep := ctx.OtherModuleProvider(module, TransitiveDeclarationsInfoProvider).(TransitiveDeclarationsInfo); len(dep.AconfigFiles) > 0 {
diff --git a/aconfig/aconfig_declarations_test.go b/aconfig/aconfig_declarations_test.go
index e6bd87c..9035c71 100644
--- a/aconfig/aconfig_declarations_test.go
+++ b/aconfig/aconfig_declarations_test.go
@@ -41,7 +41,10 @@
depData := result.ModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData)
android.AssertStringEquals(t, "package", depData.Package, "com.example.package")
android.AssertStringEquals(t, "container", depData.Container, "com.android.foo")
- if !strings.HasSuffix(depData.IntermediatePath.String(), "/intermediate.pb") {
- t.Errorf("Missing intermediates path in provider: %s", depData.IntermediatePath.String())
+ if !strings.HasSuffix(depData.IntermediateCacheOutputPath.String(), "/intermediate.pb") {
+ t.Errorf("Missing intermediates proto path in provider: %s", depData.IntermediateCacheOutputPath.String())
+ }
+ if !strings.HasSuffix(depData.IntermediateDumpOutputPath.String(), "/intermediate.txt") {
+ t.Errorf("Missing intermediates text path in provider: %s", depData.IntermediateDumpOutputPath.String())
}
}
diff --git a/aconfig/all_aconfig_declarations.go b/aconfig/all_aconfig_declarations.go
index 7ccb81a..2686e76 100644
--- a/aconfig/all_aconfig_declarations.go
+++ b/aconfig/all_aconfig_declarations.go
@@ -41,7 +41,7 @@
return
}
decl := ctx.ModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData)
- cacheFiles = append(cacheFiles, decl.IntermediatePath)
+ cacheFiles = append(cacheFiles, decl.IntermediateCacheOutputPath)
})
// Generate build action for aconfig
diff --git a/aconfig/codegen/cc_aconfig_library.go b/aconfig/codegen/cc_aconfig_library.go
index 7b68844..6855118 100644
--- a/aconfig/codegen/cc_aconfig_library.go
+++ b/aconfig/codegen/cc_aconfig_library.go
@@ -132,7 +132,7 @@
ctx.Build(pctx, android.BuildParams{
Rule: cppRule,
- Input: declarations.IntermediatePath,
+ Input: declarations.IntermediateCacheOutputPath,
Outputs: []android.WritablePath{
this.generatedCpp,
this.generatedH,
diff --git a/aconfig/codegen/java_aconfig_library.go b/aconfig/codegen/java_aconfig_library.go
index e2fb15b..211bdce 100644
--- a/aconfig/codegen/java_aconfig_library.go
+++ b/aconfig/codegen/java_aconfig_library.go
@@ -21,6 +21,7 @@
"android/soong/android"
"android/soong/bazel"
"android/soong/java"
+
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
)
@@ -86,7 +87,7 @@
ctx.Build(pctx, android.BuildParams{
Rule: javaRule,
- Input: declarations.IntermediatePath,
+ Input: declarations.IntermediateCacheOutputPath,
Output: srcJarPath,
Description: "aconfig.srcjar",
Args: map[string]string{
diff --git a/aconfig/codegen/rust_aconfig_library.go b/aconfig/codegen/rust_aconfig_library.go
index 3525de1..e587056 100644
--- a/aconfig/codegen/rust_aconfig_library.go
+++ b/aconfig/codegen/rust_aconfig_library.go
@@ -74,7 +74,7 @@
ctx.Build(pctx, android.BuildParams{
Rule: rustRule,
- Input: declarations.IntermediatePath,
+ Input: declarations.IntermediateCacheOutputPath,
Outputs: []android.WritablePath{
generatedSource,
},
diff --git a/aconfig/init.go b/aconfig/init.go
index 2e24db9..72f6bb6 100644
--- a/aconfig/init.go
+++ b/aconfig/init.go
@@ -40,6 +40,19 @@
Restat: true,
}, "release_version", "package", "declarations", "values", "default-permission")
+ // For create-device-config-sysprops: Generate aconfig flag value map text file
+ aconfigTextRule = pctx.AndroidStaticRule("aconfig_text",
+ blueprint.RuleParams{
+ Command: `${aconfig} dump --format bool` +
+ ` --cache ${in}` +
+ ` --out ${out}.tmp` +
+ ` && ( if cmp -s ${out}.tmp ${out} ; then rm ${out}.tmp ; else mv ${out}.tmp ${out} ; fi )`,
+ CommandDeps: []string{
+ "${aconfig}",
+ },
+ Restat: true,
+ })
+
// For all_aconfig_declarations: Combine all parsed_flags proto files
AllDeclarationsRule = pctx.AndroidStaticRule("All_aconfig_declarations_dump",
blueprint.RuleParams{