From 15e86d938bea0cf95f2694714fbc4dc35ee2a30e Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 20 Oct 2017 15:07:08 -0700 Subject: Support multiple outputs in genrules with depfile: true Ninja doesn't support depfiles on a rule with multiple outputs. Use a single output and put all the rest as implicit outputs. Bug: 68057449 Test: java_test.go Change-Id: Ia544493b1b3b51b185c865149d8f3e0eb3c57ee2 --- genrule/genrule.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'genrule') diff --git a/genrule/genrule.go b/genrule/genrule.go index 4a734dad..e4703531 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -260,13 +260,13 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) { // recall that Sprintf replaces percent sign expressions, whereas dollar signs expressions remain as written, // to be replaced later by ninja_strings.go - sandboxCommand := fmt.Sprintf("$sboxCmd --sandbox-path %s --output-root %s -c %q $out", sandboxPath, buildDir, rawCommand) + sandboxCommand := fmt.Sprintf("$sboxCmd --sandbox-path %s --output-root %s -c %q $allouts", sandboxPath, buildDir, rawCommand) ruleParams := blueprint.RuleParams{ Command: sandboxCommand, CommandDeps: []string{"$sboxCmd"}, } - var args []string + args := []string{"allouts"} if g.properties.Depfile { ruleParams.Deps = blueprint.DepsGCC args = append(args, "depfile") @@ -281,16 +281,24 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (g *Module) generateSourceFile(ctx android.ModuleContext, task generateTask) { desc := "generate" + if len(task.out) == 0 { + ctx.ModuleErrorf("must have at least one output file") + return + } if len(task.out) == 1 { desc += " " + task.out[0].Base() } params := android.ModuleBuildParams{ - Rule: g.rule, - Description: "generate", - Outputs: task.out, - Inputs: task.in, - Implicits: g.deps, + Rule: g.rule, + Description: "generate", + Output: task.out[0], + ImplicitOutputs: task.out[1:], + Inputs: task.in, + Implicits: g.deps, + Args: map[string]string{ + "allouts": strings.Join(task.out.Strings(), " "), + }, } if g.properties.Depfile { depfile := android.GenPathWithExt(ctx, "", task.out[0], task.out[0].Ext()+".d") -- cgit v1.2.3