Loading android/rule_builder.go +19 −3 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ func (r *RuleBuilder) Inputs() Paths { inputs := make(map[string]Path) for _, c := range r.commands { for _, input := range c.inputs { for _, input := range append(c.inputs, c.implicits...) { inputStr := input.String() if _, isOutput := outputs[inputStr]; !isOutput { if _, isDepFile := depFiles[inputStr]; !isDepFile { Loading Loading @@ -480,6 +480,7 @@ func (r *RuleBuilder) Build(pctx PackageContext, ctx BuilderContext, name string type RuleBuilderCommand struct { buf strings.Builder inputs Paths implicits Paths orderOnlys Paths outputs WritablePaths depFiles WritablePaths Loading @@ -503,6 +504,16 @@ func (c *RuleBuilderCommand) addInput(path Path) string { return path.String() } func (c *RuleBuilderCommand) addImplicit(path Path) string { if c.sbox { if rel, isRel, _ := maybeRelErr(c.sboxOutDir.String(), path.String()); isRel { return "__SBOX_OUT_DIR__/" + rel } } c.implicits = append(c.implicits, path) return path.String() } func (c *RuleBuilderCommand) addOrderOnly(path Path) { c.orderOnlys = append(c.orderOnlys, path) } Loading Loading @@ -623,7 +634,7 @@ func (c *RuleBuilderCommand) Inputs(paths Paths) *RuleBuilderCommand { // Implicit adds the specified input path to the dependencies returned by RuleBuilder.Inputs without modifying the // command line. func (c *RuleBuilderCommand) Implicit(path Path) *RuleBuilderCommand { c.addInput(path) c.addImplicit(path) return c } Loading @@ -631,11 +642,16 @@ func (c *RuleBuilderCommand) Implicit(path Path) *RuleBuilderCommand { // command line. func (c *RuleBuilderCommand) Implicits(paths Paths) *RuleBuilderCommand { for _, path := range paths { c.addInput(path) c.addImplicit(path) } return c } // GetImplicits returns the command's implicit inputs. func (c *RuleBuilderCommand) GetImplicits() Paths { return c.implicits } // OrderOnly adds the specified input path to the dependencies returned by RuleBuilder.OrderOnlys // without modifying the command line. func (c *RuleBuilderCommand) OrderOnly(path Path) *RuleBuilderCommand { Loading java/droiddoc.go +38 −27 Original line number Diff line number Diff line Loading @@ -121,6 +121,10 @@ type JavadocProperties struct { // names of the output files used in args that will be generated Out []string // If set, metalava is sandboxed to only read files explicitly specified on the command // line. Defaults to false. Sandbox *bool } type ApiToCheck struct { Loading Loading @@ -1434,34 +1438,18 @@ func (d *Droidstubs) apiToXmlFlags(ctx android.ModuleContext, cmd *android.RuleB } func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersion javaVersion, srcs android.Paths, srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths, implicits android.Paths) *android.RuleBuilderCommand { srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths, implicitsRsp android.WritablePath, sandbox bool) *android.RuleBuilderCommand { // Metalava uses lots of memory, restrict the number of metalava jobs that can run in parallel. rule.HighMem() cmd := rule.Command() var implicitsRsp android.WritablePath if len(implicits) > 0 { implicitsRsp = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"implicits.rsp") impRule := android.NewRuleBuilder() impCmd := impRule.Command() // A dummy action that copies the ninja generated rsp file to a new location. This allows us to // add a large number of inputs to a file without exceeding bash command length limits (which // would happen if we use the WriteFile rule). The cp is needed because RuleBuilder sets the // rsp file to be ${output}.rsp. impCmd.Text("cp").FlagWithRspFileInputList("", implicits).Output(implicitsRsp) impRule.Build(pctx, ctx, "implicitsGen", "implicits generation") cmd.Implicits(implicits) cmd.Implicit(implicitsRsp) } if ctx.Config().IsEnvTrue("RBE_METALAVA") { rule.Remoteable(android.RemoteRuleSupports{RBE: true}) execStrategy := remoteexec.LocalExecStrategy if v := ctx.Config().Getenv("RBE_METALAVA_EXEC_STRATEGY"); v != "" { execStrategy = v } pool := "metalava" if v := ctx.Config().Getenv("RBE_METALAVA_POOL"); v != "" { pool = v pool := ctx.Config().GetenvWithDefault("RBE_METALAVA_POOL", "metalava") execStrategy := ctx.Config().GetenvWithDefault("RBE_METALAVA_EXEC_STRATEGY", remoteexec.LocalExecStrategy) labels := map[string]string{"type": "compile", "lang": "java", "compiler": "metalava"} if !sandbox { execStrategy = remoteexec.LocalExecStrategy labels["shallow"] = "true" } inputs := []string{android.PathForOutput(ctx, "host", ctx.Config().PrebuiltOS(), "framework", "metalava.jar").String()} inputs = append(inputs, sourcepaths.Strings()...) Loading @@ -1469,7 +1457,7 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi inputs = append(inputs, strings.Split(v, ",")...) } cmd.Text((&remoteexec.REParams{ Labels: map[string]string{"type": "compile", "lang": "java", "compiler": "metalava", "shallow": "true"}, Labels: labels, ExecStrategy: execStrategy, Inputs: inputs, RSPFile: implicitsRsp.String(), Loading @@ -1483,8 +1471,17 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi FlagWithArg("-encoding ", "UTF-8"). FlagWithArg("-source ", javaVersion.String()). FlagWithRspFileInputList("@", srcs). FlagWithInput("@", srcJarList). FlagWithOutput("--strict-input-files:warn ", android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"violations.txt")) FlagWithInput("@", srcJarList) if javaHome := ctx.Config().Getenv("ANDROID_JAVA_HOME"); javaHome != "" { cmd.Implicit(android.PathForSource(ctx, javaHome)) } if sandbox { cmd.FlagWithOutput("--strict-input-files ", android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"violations.txt")) } else { cmd.FlagWithOutput("--strict-input-files:warn ", android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"violations.txt")) } if implicitsRsp != nil { cmd.FlagWithArg("--strict-input-files-exempt ", "@"+implicitsRsp.String()) Loading Loading @@ -1534,8 +1531,12 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { srcJarList := zipSyncCmd(ctx, rule, srcJarDir, d.Javadoc.srcJars) implicitsRsp := android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"implicits.rsp") cmd := metalavaCmd(ctx, rule, javaVersion, d.Javadoc.srcFiles, srcJarList, deps.bootClasspath, deps.classpath, d.Javadoc.sourcepaths, d.Javadoc.implicits) deps.bootClasspath, deps.classpath, d.Javadoc.sourcepaths, implicitsRsp, Bool(d.Javadoc.properties.Sandbox)) cmd.Implicits(d.Javadoc.implicits) d.stubsFlags(ctx, cmd, stubsDir) Loading Loading @@ -1663,6 +1664,16 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { cmd.FlagWithArg("--error-message:compatibility:released ", msg) } impRule := android.NewRuleBuilder() impCmd := impRule.Command() // A dummy action that copies the ninja generated rsp file to a new location. This allows us to // add a large number of inputs to a file without exceeding bash command length limits (which // would happen if we use the WriteFile rule). The cp is needed because RuleBuilder sets the // rsp file to be ${output}.rsp. impCmd.Text("cp").FlagWithRspFileInputList("", cmd.GetImplicits()).Output(implicitsRsp) impRule.Build(pctx, ctx, "implicitsGen", "implicits generation") cmd.Implicit(implicitsRsp) if generateStubs { rule.Command(). BuiltTool(ctx, "soong_zip"). Loading Loading
android/rule_builder.go +19 −3 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ func (r *RuleBuilder) Inputs() Paths { inputs := make(map[string]Path) for _, c := range r.commands { for _, input := range c.inputs { for _, input := range append(c.inputs, c.implicits...) { inputStr := input.String() if _, isOutput := outputs[inputStr]; !isOutput { if _, isDepFile := depFiles[inputStr]; !isDepFile { Loading Loading @@ -480,6 +480,7 @@ func (r *RuleBuilder) Build(pctx PackageContext, ctx BuilderContext, name string type RuleBuilderCommand struct { buf strings.Builder inputs Paths implicits Paths orderOnlys Paths outputs WritablePaths depFiles WritablePaths Loading @@ -503,6 +504,16 @@ func (c *RuleBuilderCommand) addInput(path Path) string { return path.String() } func (c *RuleBuilderCommand) addImplicit(path Path) string { if c.sbox { if rel, isRel, _ := maybeRelErr(c.sboxOutDir.String(), path.String()); isRel { return "__SBOX_OUT_DIR__/" + rel } } c.implicits = append(c.implicits, path) return path.String() } func (c *RuleBuilderCommand) addOrderOnly(path Path) { c.orderOnlys = append(c.orderOnlys, path) } Loading Loading @@ -623,7 +634,7 @@ func (c *RuleBuilderCommand) Inputs(paths Paths) *RuleBuilderCommand { // Implicit adds the specified input path to the dependencies returned by RuleBuilder.Inputs without modifying the // command line. func (c *RuleBuilderCommand) Implicit(path Path) *RuleBuilderCommand { c.addInput(path) c.addImplicit(path) return c } Loading @@ -631,11 +642,16 @@ func (c *RuleBuilderCommand) Implicit(path Path) *RuleBuilderCommand { // command line. func (c *RuleBuilderCommand) Implicits(paths Paths) *RuleBuilderCommand { for _, path := range paths { c.addInput(path) c.addImplicit(path) } return c } // GetImplicits returns the command's implicit inputs. func (c *RuleBuilderCommand) GetImplicits() Paths { return c.implicits } // OrderOnly adds the specified input path to the dependencies returned by RuleBuilder.OrderOnlys // without modifying the command line. func (c *RuleBuilderCommand) OrderOnly(path Path) *RuleBuilderCommand { Loading
java/droiddoc.go +38 −27 Original line number Diff line number Diff line Loading @@ -121,6 +121,10 @@ type JavadocProperties struct { // names of the output files used in args that will be generated Out []string // If set, metalava is sandboxed to only read files explicitly specified on the command // line. Defaults to false. Sandbox *bool } type ApiToCheck struct { Loading Loading @@ -1434,34 +1438,18 @@ func (d *Droidstubs) apiToXmlFlags(ctx android.ModuleContext, cmd *android.RuleB } func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersion javaVersion, srcs android.Paths, srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths, implicits android.Paths) *android.RuleBuilderCommand { srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths, implicitsRsp android.WritablePath, sandbox bool) *android.RuleBuilderCommand { // Metalava uses lots of memory, restrict the number of metalava jobs that can run in parallel. rule.HighMem() cmd := rule.Command() var implicitsRsp android.WritablePath if len(implicits) > 0 { implicitsRsp = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"implicits.rsp") impRule := android.NewRuleBuilder() impCmd := impRule.Command() // A dummy action that copies the ninja generated rsp file to a new location. This allows us to // add a large number of inputs to a file without exceeding bash command length limits (which // would happen if we use the WriteFile rule). The cp is needed because RuleBuilder sets the // rsp file to be ${output}.rsp. impCmd.Text("cp").FlagWithRspFileInputList("", implicits).Output(implicitsRsp) impRule.Build(pctx, ctx, "implicitsGen", "implicits generation") cmd.Implicits(implicits) cmd.Implicit(implicitsRsp) } if ctx.Config().IsEnvTrue("RBE_METALAVA") { rule.Remoteable(android.RemoteRuleSupports{RBE: true}) execStrategy := remoteexec.LocalExecStrategy if v := ctx.Config().Getenv("RBE_METALAVA_EXEC_STRATEGY"); v != "" { execStrategy = v } pool := "metalava" if v := ctx.Config().Getenv("RBE_METALAVA_POOL"); v != "" { pool = v pool := ctx.Config().GetenvWithDefault("RBE_METALAVA_POOL", "metalava") execStrategy := ctx.Config().GetenvWithDefault("RBE_METALAVA_EXEC_STRATEGY", remoteexec.LocalExecStrategy) labels := map[string]string{"type": "compile", "lang": "java", "compiler": "metalava"} if !sandbox { execStrategy = remoteexec.LocalExecStrategy labels["shallow"] = "true" } inputs := []string{android.PathForOutput(ctx, "host", ctx.Config().PrebuiltOS(), "framework", "metalava.jar").String()} inputs = append(inputs, sourcepaths.Strings()...) Loading @@ -1469,7 +1457,7 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi inputs = append(inputs, strings.Split(v, ",")...) } cmd.Text((&remoteexec.REParams{ Labels: map[string]string{"type": "compile", "lang": "java", "compiler": "metalava", "shallow": "true"}, Labels: labels, ExecStrategy: execStrategy, Inputs: inputs, RSPFile: implicitsRsp.String(), Loading @@ -1483,8 +1471,17 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi FlagWithArg("-encoding ", "UTF-8"). FlagWithArg("-source ", javaVersion.String()). FlagWithRspFileInputList("@", srcs). FlagWithInput("@", srcJarList). FlagWithOutput("--strict-input-files:warn ", android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"violations.txt")) FlagWithInput("@", srcJarList) if javaHome := ctx.Config().Getenv("ANDROID_JAVA_HOME"); javaHome != "" { cmd.Implicit(android.PathForSource(ctx, javaHome)) } if sandbox { cmd.FlagWithOutput("--strict-input-files ", android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"violations.txt")) } else { cmd.FlagWithOutput("--strict-input-files:warn ", android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"violations.txt")) } if implicitsRsp != nil { cmd.FlagWithArg("--strict-input-files-exempt ", "@"+implicitsRsp.String()) Loading Loading @@ -1534,8 +1531,12 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { srcJarList := zipSyncCmd(ctx, rule, srcJarDir, d.Javadoc.srcJars) implicitsRsp := android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"implicits.rsp") cmd := metalavaCmd(ctx, rule, javaVersion, d.Javadoc.srcFiles, srcJarList, deps.bootClasspath, deps.classpath, d.Javadoc.sourcepaths, d.Javadoc.implicits) deps.bootClasspath, deps.classpath, d.Javadoc.sourcepaths, implicitsRsp, Bool(d.Javadoc.properties.Sandbox)) cmd.Implicits(d.Javadoc.implicits) d.stubsFlags(ctx, cmd, stubsDir) Loading Loading @@ -1663,6 +1664,16 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { cmd.FlagWithArg("--error-message:compatibility:released ", msg) } impRule := android.NewRuleBuilder() impCmd := impRule.Command() // A dummy action that copies the ninja generated rsp file to a new location. This allows us to // add a large number of inputs to a file without exceeding bash command length limits (which // would happen if we use the WriteFile rule). The cp is needed because RuleBuilder sets the // rsp file to be ${output}.rsp. impCmd.Text("cp").FlagWithRspFileInputList("", cmd.GetImplicits()).Output(implicitsRsp) impRule.Build(pctx, ctx, "implicitsGen", "implicits generation") cmd.Implicit(implicitsRsp) if generateStubs { rule.Command(). BuiltTool(ctx, "soong_zip"). Loading