Support long commands in RuleBuilder
If a command exceeds the linux max command line length, it will be put
into a script instead.
Fixes: 380945706
Test: Presubmits
Change-Id: I9bc4b293d6d638b38e7fb11e6c2bc35196306d9f
diff --git a/filesystem/aconfig_files.go b/filesystem/aconfig_files.go
index 7de404f..c80ae03 100644
--- a/filesystem/aconfig_files.go
+++ b/filesystem/aconfig_files.go
@@ -16,7 +16,6 @@
import (
"android/soong/android"
- "strings"
"github.com/google/blueprint/proptools"
)
@@ -26,57 +25,34 @@
return
}
- aconfigFlagsBuilderPath := android.PathForModuleOut(ctx, "aconfig_flags_builder.sh")
- aconfigToolPath := ctx.Config().HostToolPath(ctx, "aconfig")
- cmd := builder.Command().Tool(aconfigFlagsBuilderPath).Implicit(aconfigToolPath)
-
- var caches []string
+ var caches []android.Path
for _, ps := range specs {
- cmd.Implicits(ps.GetAconfigPaths())
- caches = append(caches, ps.GetAconfigPaths().Strings()...)
+ caches = append(caches, ps.GetAconfigPaths()...)
}
- caches = android.SortedUniqueStrings(caches)
-
- var sbCaches strings.Builder
- for _, cache := range caches {
- sbCaches.WriteString(" --cache ")
- sbCaches.WriteString(cache)
- sbCaches.WriteString(" \\\n")
- }
- sbCaches.WriteRune('\n')
-
- var sb strings.Builder
- sb.WriteString("set -e\n")
+ caches = android.SortedUniquePaths(caches)
installAconfigFlagsPath := dir.Join(ctx, "etc", "aconfig_flags.pb")
- sb.WriteString(aconfigToolPath.String())
- sb.WriteString(" dump-cache --dedup --format protobuf --out ")
- sb.WriteString(installAconfigFlagsPath.String())
- sb.WriteString(" --filter container:")
- sb.WriteString(f.PartitionType())
- sb.WriteString(" \\\n")
- sb.WriteString(sbCaches.String())
- cmd.ImplicitOutput(installAconfigFlagsPath)
+ cmd := builder.Command().
+ BuiltTool("aconfig").
+ Text(" dump-cache --dedup --format protobuf --out").
+ Output(installAconfigFlagsPath).
+ Textf("--filter container:%s", f.PartitionType())
+ for _, cache := range caches {
+ cmd.FlagWithInput("--cache ", cache)
+ }
f.appendToEntry(ctx, installAconfigFlagsPath)
installAconfigStorageDir := dir.Join(ctx, "etc", "aconfig")
- sb.WriteString("mkdir -p ")
- sb.WriteString(installAconfigStorageDir.String())
- sb.WriteRune('\n')
+ builder.Command().Text("mkdir -p").Text(installAconfigStorageDir.String())
generatePartitionAconfigStorageFile := func(fileType, fileName string) {
outputPath := installAconfigStorageDir.Join(ctx, fileName)
- sb.WriteString(aconfigToolPath.String())
- sb.WriteString(" create-storage --container ")
- sb.WriteString(f.PartitionType())
- sb.WriteString(" --file ")
- sb.WriteString(fileType)
- sb.WriteString(" --out ")
- sb.WriteString(outputPath.String())
- sb.WriteString(" --cache ")
- sb.WriteString(installAconfigFlagsPath.String())
- sb.WriteRune('\n')
- cmd.ImplicitOutput(outputPath)
+ builder.Command().
+ BuiltTool("aconfig").
+ FlagWithArg("create-storage --container ", f.PartitionType()).
+ FlagWithArg("--file ", fileType).
+ FlagWithOutput("--out ", outputPath).
+ FlagWithArg("--cache ", installAconfigFlagsPath.String())
f.appendToEntry(ctx, outputPath)
}
@@ -86,6 +62,4 @@
generatePartitionAconfigStorageFile("flag_val", "flag.val")
generatePartitionAconfigStorageFile("flag_info", "flag.info")
}
-
- android.WriteExecutableFileRuleVerbatim(ctx, aconfigFlagsBuilderPath, sb.String())
}