Merge "Use WriteFileRule instead of custom echo commands"
This commit is contained in:
commit
da5e739628
4 changed files with 17 additions and 46 deletions
|
@ -36,11 +36,6 @@ import (
|
|||
)
|
||||
|
||||
var (
|
||||
writeBazelFile = pctx.AndroidStaticRule("bazelWriteFileRule", blueprint.RuleParams{
|
||||
Command: `sed "s/\\\\n/\n/g" ${out}.rsp >${out}`,
|
||||
Rspfile: "${out}.rsp",
|
||||
RspfileContent: "${content}",
|
||||
}, "content")
|
||||
_ = pctx.HostBinToolVariable("bazelBuildRunfilesTool", "build-runfiles")
|
||||
buildRunfilesRule = pctx.AndroidStaticRule("bazelBuildRunfiles", blueprint.RuleParams{
|
||||
Command: "${bazelBuildRunfilesTool} ${in} ${outDir}",
|
||||
|
@ -1089,19 +1084,8 @@ func (c *bazelSingleton) GenerateBuildActions(ctx SingletonContext) {
|
|||
// because this would cause circular dependency. So, until we move aquery processing
|
||||
// to the 'android' package, we need to handle special cases here.
|
||||
if buildStatement.Mnemonic == "FileWrite" || buildStatement.Mnemonic == "SourceSymlinkManifest" {
|
||||
// Pass file contents as the value of the rule's "content" argument.
|
||||
// Escape newlines and $ in the contents (the action "writeBazelFile" restores "\\n"
|
||||
// back to the newline, and Ninja reads $$ as $.
|
||||
escaped := strings.ReplaceAll(strings.ReplaceAll(buildStatement.FileContents, "\n", "\\n"),
|
||||
"$", "$$")
|
||||
ctx.Build(pctx, BuildParams{
|
||||
Rule: writeBazelFile,
|
||||
Output: PathForBazelOut(ctx, buildStatement.OutputPaths[0]),
|
||||
Description: fmt.Sprintf("%s %s", buildStatement.Mnemonic, buildStatement.OutputPaths[0]),
|
||||
Args: map[string]string{
|
||||
"content": escaped,
|
||||
},
|
||||
})
|
||||
out := PathForBazelOut(ctx, buildStatement.OutputPaths[0])
|
||||
WriteFileRuleVerbatim(ctx, out, buildStatement.FileContents)
|
||||
} else if buildStatement.Mnemonic == "SymlinkTree" {
|
||||
// build-runfiles arguments are the manifest file and the target directory
|
||||
// where it creates the symlink tree according to this manifest (and then
|
||||
|
|
|
@ -61,11 +61,10 @@ func (p *buildinfoPropModule) GenerateAndroidBuildActions(ctx ModuleContext) {
|
|||
return
|
||||
}
|
||||
|
||||
rule := NewRuleBuilder(pctx, ctx)
|
||||
cmd := rule.Command().Text("(")
|
||||
lines := make([]string, 0)
|
||||
|
||||
writeString := func(str string) {
|
||||
cmd.Text(`echo "` + str + `" && `)
|
||||
lines = append(lines, str)
|
||||
}
|
||||
|
||||
writeString("# begin build properties")
|
||||
|
@ -142,8 +141,7 @@ func (p *buildinfoPropModule) GenerateAndroidBuildActions(ctx ModuleContext) {
|
|||
|
||||
writeString("# end build properties")
|
||||
|
||||
cmd.Text("true) > ").Output(p.outputFilePath)
|
||||
rule.Build("build.prop", "generating build.prop")
|
||||
WriteFileRule(ctx, p.outputFilePath, strings.Join(lines, "\n"))
|
||||
|
||||
if !p.installable() {
|
||||
p.SkipInstall()
|
||||
|
|
|
@ -174,10 +174,15 @@ func buildWriteFileRule(ctx BuilderContext, outputFile WritablePath, content str
|
|||
// WriteFileRule creates a ninja rule to write contents to a file. The contents will be escaped
|
||||
// so that the file contains exactly the contents passed to the function, plus a trailing newline.
|
||||
func WriteFileRule(ctx BuilderContext, outputFile WritablePath, content string) {
|
||||
WriteFileRuleVerbatim(ctx, outputFile, content+"\n")
|
||||
}
|
||||
|
||||
// WriteFileRuleVerbatim creates a ninja rule to write contents to a file. The contents will be
|
||||
// escaped so that the file contains exactly the contents passed to the function.
|
||||
func WriteFileRuleVerbatim(ctx BuilderContext, outputFile WritablePath, content string) {
|
||||
// This is MAX_ARG_STRLEN subtracted with some safety to account for shell escapes
|
||||
const SHARD_SIZE = 131072 - 10000
|
||||
|
||||
content += "\n"
|
||||
if len(content) > SHARD_SIZE {
|
||||
var chunks WritablePaths
|
||||
for i, c := range ShardString(content, SHARD_SIZE) {
|
||||
|
|
|
@ -179,13 +179,6 @@ var (
|
|||
Description: "app bundle",
|
||||
}, "abi", "config")
|
||||
|
||||
emitApexContentRule = pctx.StaticRule("emitApexContentRule", blueprint.RuleParams{
|
||||
Command: `rm -f ${out} && touch ${out} && (. ${out}.emit_commands)`,
|
||||
Rspfile: "${out}.emit_commands",
|
||||
RspfileContent: "${emit_commands}",
|
||||
Description: "Emit APEX image content",
|
||||
}, "emit_commands")
|
||||
|
||||
diffApexContentRule = pctx.StaticRule("diffApexContentRule", blueprint.RuleParams{
|
||||
Command: `diff --unchanged-group-format='' \` +
|
||||
`--changed-group-format='%<' \` +
|
||||
|
@ -546,29 +539,20 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) {
|
|||
// to be using this at this moment. Furthermore, this looks very similar to what
|
||||
// buildInstalledFilesFile does. At least, move this to somewhere else so that this doesn't
|
||||
// hurt readability.
|
||||
// TODO(jiyong): use RuleBuilder
|
||||
if a.overridableProperties.Allowed_files != nil {
|
||||
// Build content.txt
|
||||
var emitCommands []string
|
||||
var contentLines []string
|
||||
imageContentFile := android.PathForModuleOut(ctx, "content.txt")
|
||||
emitCommands = append(emitCommands, "echo ./apex_manifest.pb >> "+imageContentFile.String())
|
||||
contentLines = append(contentLines, "./apex_manifest.pb")
|
||||
minSdkVersion := a.minSdkVersion(ctx)
|
||||
if minSdkVersion.EqualTo(android.SdkVersion_Android10) {
|
||||
emitCommands = append(emitCommands, "echo ./apex_manifest.json >> "+imageContentFile.String())
|
||||
contentLines = append(contentLines, "./apex_manifest.json")
|
||||
}
|
||||
for _, fi := range a.filesInfo {
|
||||
emitCommands = append(emitCommands, "echo './"+fi.path()+"' >> "+imageContentFile.String())
|
||||
contentLines = append(contentLines, "./"+fi.path())
|
||||
}
|
||||
emitCommands = append(emitCommands, "sort -o "+imageContentFile.String()+" "+imageContentFile.String())
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: emitApexContentRule,
|
||||
Implicits: implicitInputs,
|
||||
Output: imageContentFile,
|
||||
Description: "emit apex image content",
|
||||
Args: map[string]string{
|
||||
"emit_commands": strings.Join(emitCommands, " && "),
|
||||
},
|
||||
})
|
||||
sort.Strings(contentLines)
|
||||
android.WriteFileRule(ctx, imageContentFile, strings.Join(contentLines, "\n"))
|
||||
implicitInputs = append(implicitInputs, imageContentFile)
|
||||
|
||||
// Compare content.txt against allowed_files.
|
||||
|
|
Loading…
Reference in a new issue