summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Cole Faust <colefaust@google.com> 2025-02-14 14:21:57 -0800
committer Cole Faust <colefaust@google.com> 2025-02-14 15:03:33 -0800
commit781eff3b8baaca5a0917ac6e9ca23bd637c05ad6 (patch)
treea503e7a71b02838cf898ed272edaa0ba880a25bd
parent83cc13dc2ffdb2e1b77cb56e9d7dfb7b251a27ac (diff)
Build aconfig files independently of staging dir
This is partially to improve incremental builds by doing less work every time the partition is rebuilt, and partially to standardize how files are installed for further refactors. Bug: 394404628 Test: m aosp_shared_system_image, verified it didn't change before/after Change-Id: If3ba83a7e4cee432fada70cccbf68dcc467e2e8b
-rw-r--r--filesystem/aconfig_files.go55
1 files changed, 39 insertions, 16 deletions
diff --git a/filesystem/aconfig_files.go b/filesystem/aconfig_files.go
index 6d034027d..b4173d784 100644
--- a/filesystem/aconfig_files.go
+++ b/filesystem/aconfig_files.go
@@ -22,6 +22,17 @@ import (
"github.com/google/blueprint/proptools"
)
+func init() {
+ pctx.HostBinToolVariable("aconfig", "aconfig")
+}
+
+var (
+ aconfigCreateStorage = pctx.AndroidStaticRule("aconfig_create_storage", blueprint.RuleParams{
+ Command: `$aconfig create-storage --container $container --file $fileType --out $out --cache $in --version $version`,
+ CommandDeps: []string{"$aconfig"},
+ }, "container", "fileType", "version")
+)
+
type installedAconfigFlagsInfo struct {
aconfigFiles android.Paths
}
@@ -66,45 +77,57 @@ func (f *filesystem) buildAconfigFlagsFiles(
container := f.PartitionType()
- installAconfigFlagsPath := dir.Join(ctx, "etc", "aconfig_flags.pb")
- cmd := builder.Command().
+ aconfigFlagsPb := android.PathForModuleOut(ctx, "aconfig", "aconfig_flags.pb")
+ aconfigFlagsPbBuilder := android.NewRuleBuilder(pctx, ctx)
+ cmd := aconfigFlagsPbBuilder.Command().
BuiltTool("aconfig").
Text(" dump-cache --dedup --format protobuf --out").
- Output(installAconfigFlagsPath).
+ Output(aconfigFlagsPb).
Textf("--filter container:%s+state:ENABLED", container).
Textf("--filter container:%s+permission:READ_WRITE", container)
for _, cache := range caches {
cmd.FlagWithInput("--cache ", cache)
}
+ aconfigFlagsPbBuilder.Build("aconfig_flags_pb", "build aconfig_flags.pb")
+
+ installAconfigFlagsPath := dir.Join(ctx, "etc", "aconfig_flags.pb")
+ builder.Command().Text("mkdir -p ").Text(dir.Join(ctx, "etc").String())
+ builder.Command().Text("cp").Input(aconfigFlagsPb).Text(installAconfigFlagsPath.String())
*fullInstallPaths = append(*fullInstallPaths, FullInstallPathInfo{
FullInstallPath: android.PathForModuleInPartitionInstall(ctx, f.PartitionType(), "etc/aconfig_flags.pb"),
- SourcePath: installAconfigFlagsPath,
+ SourcePath: aconfigFlagsPb,
})
f.appendToEntry(ctx, installAconfigFlagsPath)
- installAconfigStorageDir := dir.Join(ctx, "etc", "aconfig")
- builder.Command().Text("mkdir -p").Text(installAconfigStorageDir.String())
-
// To enable fingerprint, we need to have v2 storage files. The default version is 1.
storageFilesVersion := 1
if ctx.Config().ReleaseFingerprintAconfigPackages() {
storageFilesVersion = 2
}
+ installAconfigStorageDir := dir.Join(ctx, "etc", "aconfig")
+ builder.Command().Text("mkdir -p").Text(installAconfigStorageDir.String())
+
generatePartitionAconfigStorageFile := func(fileType, fileName string) {
- outputPath := installAconfigStorageDir.Join(ctx, fileName)
+ outPath := android.PathForModuleOut(ctx, "aconfig", fileName)
+ installPath := installAconfigStorageDir.Join(ctx, fileName)
+ ctx.Build(pctx, android.BuildParams{
+ Rule: aconfigCreateStorage,
+ Input: aconfigFlagsPb,
+ Output: outPath,
+ Args: map[string]string{
+ "container": container,
+ "fileType": fileType,
+ "version": strconv.Itoa(storageFilesVersion),
+ },
+ })
builder.Command().
- BuiltTool("aconfig").
- FlagWithArg("create-storage --container ", container).
- FlagWithArg("--file ", fileType).
- FlagWithOutput("--out ", outputPath).
- FlagWithArg("--cache ", installAconfigFlagsPath.String()).
- FlagWithArg("--version ", strconv.Itoa(storageFilesVersion))
+ Text("cp").Input(outPath).Text(installPath.String())
*fullInstallPaths = append(*fullInstallPaths, FullInstallPathInfo{
+ SourcePath: outPath,
FullInstallPath: android.PathForModuleInPartitionInstall(ctx, f.PartitionType(), "etc/aconfig", fileName),
- SourcePath: outputPath,
})
- f.appendToEntry(ctx, outputPath)
+ f.appendToEntry(ctx, installPath)
}
if ctx.Config().ReleaseCreateAconfigStorageFile() {