Support multiple outputs for genrule
The underlying code to expose outputs to other modules has suppported
this already for gensrcs (which runs the command multiple times to
create multiple outputs). This allows a genrule to run a command once,
and output multiple files.
Bug: 31742855
Test: Add multi-output genrule; Inspect build.ninja
Change-Id: I72054cc39c0d0e3e44feebba72005e5af1a1709a
diff --git a/genrule/genrule.go b/genrule/genrule.go
index a49a5dd..4a9b336 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -85,7 +85,7 @@
type generateTask struct {
in android.Paths
- out android.ModuleGenPath
+ out android.WritablePaths
}
func (g *generator) GeneratedSourceFiles() android.Paths {
@@ -167,7 +167,7 @@
func (g *generator) generateSourceFile(ctx android.ModuleContext, task generateTask, tool string) {
ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Rule: g.rule,
- Output: task.out,
+ Outputs: task.out,
Inputs: task.in,
Implicits: g.deps,
Args: map[string]string{
@@ -175,7 +175,9 @@
},
})
- g.outputFiles = append(g.outputFiles, task.out)
+ for _, outputFile := range task.out {
+ g.outputFiles = append(g.outputFiles, outputFile)
+ }
}
func generatorFactory(tasks taskFunc, props ...interface{}) (blueprint.Module, []interface{}) {
@@ -197,7 +199,7 @@
for _, in := range srcFiles {
tasks = append(tasks, generateTask{
in: android.Paths{in},
- out: android.GenPathWithExt(ctx, in, properties.Output_extension),
+ out: android.WritablePaths{android.GenPathWithExt(ctx, in, properties.Output_extension)},
})
}
return tasks
@@ -218,10 +220,14 @@
properties := &genRuleProperties{}
tasks := func(ctx android.ModuleContext) []generateTask {
+ outs := make(android.WritablePaths, len(properties.Out))
+ for i, out := range properties.Out {
+ outs[i] = android.PathForModuleGen(ctx, out)
+ }
return []generateTask{
{
in: ctx.ExpandSources(properties.Srcs, nil),
- out: android.PathForModuleGen(ctx, properties.Out),
+ out: outs,
},
}
}
@@ -233,6 +239,6 @@
// list of input files
Srcs []string
- // name of the output file that will be generated
- Out string
+ // names of the output files that will be generated
+ Out []string
}