Loading java/droiddoc.go +26 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import ( "android/soong/android" "android/soong/java/config" "android/soong/remoteexec" ) func init() { Loading Loading @@ -1375,7 +1376,31 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths) *android.RuleBuilderCommand { // Metalava uses lots of memory, restrict the number of metalava jobs that can run in parallel. rule.HighMem() cmd := rule.Command().BuiltTool(ctx, "metalava"). cmd := rule.Command() 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 } inputs := []string{android.PathForOutput(ctx, "host", ctx.Config().PrebuiltOS(), "framework", "metalava.jar").String()} if v := ctx.Config().Getenv("RBE_METALAVA_INPUTS"); v != "" { inputs = append(inputs, strings.Split(v, ",")...) } cmd.Text((&remoteexec.REParams{ Labels: map[string]string{"type": "compile", "lang": "java", "compiler": "metalava"}, ExecStrategy: execStrategy, Inputs: inputs, ToolchainInputs: []string{config.JavaCmd(ctx).String()}, Platform: map[string]string{remoteexec.PoolKey: pool}, }).NoVarTemplate(ctx.Config())) } cmd.BuiltTool(ctx, "metalava"). Flag(config.JavacVmFlags). FlagWithArg("-encoding ", "UTF-8"). FlagWithArg("-source ", javaVersion.String()). Loading remoteexec/remoteexec.go +28 −14 Original line number Diff line number Diff line Loading @@ -82,17 +82,31 @@ type REParams struct { func init() { pctx.VariableFunc("Wrapper", func(ctx android.PackageVarContext) string { if override := ctx.Config().Getenv("RBE_WRAPPER"); override != "" { return wrapper(ctx.Config()) }) } func wrapper(cfg android.Config) string { if override := cfg.Getenv("RBE_WRAPPER"); override != "" { return override } return DefaultWrapperPath }) } // Generate the remote execution wrapper template to be added as a prefix to the rule's command. // Template generates the remote execution wrapper template to be added as a prefix to the rule's // command. func (r *REParams) Template() string { template := "${remoteexec.Wrapper}" return "${remoteexec.Wrapper}" + r.wrapperArgs() } // NoVarTemplate generate the remote execution wrapper template without variables, to be used in // RuleBuilder. func (r *REParams) NoVarTemplate(cfg android.Config) string { return wrapper(cfg) + r.wrapperArgs() } func (r *REParams) wrapperArgs() string { args := "" var kvs []string labels := r.Labels if len(labels) == 0 { Loading @@ -102,7 +116,7 @@ func (r *REParams) Template() string { kvs = append(kvs, k+"="+v) } sort.Strings(kvs) template += " --labels=" + strings.Join(kvs, ",") args += " --labels=" + strings.Join(kvs, ",") var platform []string for k, v := range r.Platform { Loading @@ -116,32 +130,32 @@ func (r *REParams) Template() string { } if platform != nil { sort.Strings(platform) template += " --platform=\"" + strings.Join(platform, ",") + "\"" args += " --platform=\"" + strings.Join(platform, ",") + "\"" } strategy := r.ExecStrategy if strategy == "" { strategy = defaultExecStrategy } template += " --exec_strategy=" + strategy args += " --exec_strategy=" + strategy if len(r.Inputs) > 0 { template += " --inputs=" + strings.Join(r.Inputs, ",") args += " --inputs=" + strings.Join(r.Inputs, ",") } if r.RSPFile != "" { template += " --input_list_paths=" + r.RSPFile args += " --input_list_paths=" + r.RSPFile } if len(r.OutputFiles) > 0 { template += " --output_files=" + strings.Join(r.OutputFiles, ",") args += " --output_files=" + strings.Join(r.OutputFiles, ",") } if len(r.ToolchainInputs) > 0 { template += " --toolchain_inputs=" + strings.Join(r.ToolchainInputs, ",") args += " --toolchain_inputs=" + strings.Join(r.ToolchainInputs, ",") } return template + " -- " return args + " -- " } // StaticRules returns a pair of rules based on the given RuleParams, where the first rule is a Loading remoteexec/remoteexec_test.go +18 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package remoteexec import ( "fmt" "testing" "android/soong/android" ) func TestTemplate(t *testing.T) { Loading Loading @@ -64,6 +66,22 @@ func TestTemplate(t *testing.T) { } } func TestNoVarTemplate(t *testing.T) { params := &REParams{ Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, Inputs: []string{"$in"}, OutputFiles: []string{"$out"}, Platform: map[string]string{ ContainerImageKey: DefaultImage, PoolKey: "default", }, } want := fmt.Sprintf("prebuilts/remoteexecution-client/live/rewrapper --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out -- ", DefaultImage) if got := params.NoVarTemplate(android.NullConfig("")); got != want { t.Errorf("NoVarTemplate() returned\n%s\nwant\n%s", got, want) } } func TestTemplateDeterminism(t *testing.T) { r := &REParams{ Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, Loading Loading
java/droiddoc.go +26 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import ( "android/soong/android" "android/soong/java/config" "android/soong/remoteexec" ) func init() { Loading Loading @@ -1375,7 +1376,31 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths) *android.RuleBuilderCommand { // Metalava uses lots of memory, restrict the number of metalava jobs that can run in parallel. rule.HighMem() cmd := rule.Command().BuiltTool(ctx, "metalava"). cmd := rule.Command() 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 } inputs := []string{android.PathForOutput(ctx, "host", ctx.Config().PrebuiltOS(), "framework", "metalava.jar").String()} if v := ctx.Config().Getenv("RBE_METALAVA_INPUTS"); v != "" { inputs = append(inputs, strings.Split(v, ",")...) } cmd.Text((&remoteexec.REParams{ Labels: map[string]string{"type": "compile", "lang": "java", "compiler": "metalava"}, ExecStrategy: execStrategy, Inputs: inputs, ToolchainInputs: []string{config.JavaCmd(ctx).String()}, Platform: map[string]string{remoteexec.PoolKey: pool}, }).NoVarTemplate(ctx.Config())) } cmd.BuiltTool(ctx, "metalava"). Flag(config.JavacVmFlags). FlagWithArg("-encoding ", "UTF-8"). FlagWithArg("-source ", javaVersion.String()). Loading
remoteexec/remoteexec.go +28 −14 Original line number Diff line number Diff line Loading @@ -82,17 +82,31 @@ type REParams struct { func init() { pctx.VariableFunc("Wrapper", func(ctx android.PackageVarContext) string { if override := ctx.Config().Getenv("RBE_WRAPPER"); override != "" { return wrapper(ctx.Config()) }) } func wrapper(cfg android.Config) string { if override := cfg.Getenv("RBE_WRAPPER"); override != "" { return override } return DefaultWrapperPath }) } // Generate the remote execution wrapper template to be added as a prefix to the rule's command. // Template generates the remote execution wrapper template to be added as a prefix to the rule's // command. func (r *REParams) Template() string { template := "${remoteexec.Wrapper}" return "${remoteexec.Wrapper}" + r.wrapperArgs() } // NoVarTemplate generate the remote execution wrapper template without variables, to be used in // RuleBuilder. func (r *REParams) NoVarTemplate(cfg android.Config) string { return wrapper(cfg) + r.wrapperArgs() } func (r *REParams) wrapperArgs() string { args := "" var kvs []string labels := r.Labels if len(labels) == 0 { Loading @@ -102,7 +116,7 @@ func (r *REParams) Template() string { kvs = append(kvs, k+"="+v) } sort.Strings(kvs) template += " --labels=" + strings.Join(kvs, ",") args += " --labels=" + strings.Join(kvs, ",") var platform []string for k, v := range r.Platform { Loading @@ -116,32 +130,32 @@ func (r *REParams) Template() string { } if platform != nil { sort.Strings(platform) template += " --platform=\"" + strings.Join(platform, ",") + "\"" args += " --platform=\"" + strings.Join(platform, ",") + "\"" } strategy := r.ExecStrategy if strategy == "" { strategy = defaultExecStrategy } template += " --exec_strategy=" + strategy args += " --exec_strategy=" + strategy if len(r.Inputs) > 0 { template += " --inputs=" + strings.Join(r.Inputs, ",") args += " --inputs=" + strings.Join(r.Inputs, ",") } if r.RSPFile != "" { template += " --input_list_paths=" + r.RSPFile args += " --input_list_paths=" + r.RSPFile } if len(r.OutputFiles) > 0 { template += " --output_files=" + strings.Join(r.OutputFiles, ",") args += " --output_files=" + strings.Join(r.OutputFiles, ",") } if len(r.ToolchainInputs) > 0 { template += " --toolchain_inputs=" + strings.Join(r.ToolchainInputs, ",") args += " --toolchain_inputs=" + strings.Join(r.ToolchainInputs, ",") } return template + " -- " return args + " -- " } // StaticRules returns a pair of rules based on the given RuleParams, where the first rule is a Loading
remoteexec/remoteexec_test.go +18 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package remoteexec import ( "fmt" "testing" "android/soong/android" ) func TestTemplate(t *testing.T) { Loading Loading @@ -64,6 +66,22 @@ func TestTemplate(t *testing.T) { } } func TestNoVarTemplate(t *testing.T) { params := &REParams{ Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, Inputs: []string{"$in"}, OutputFiles: []string{"$out"}, Platform: map[string]string{ ContainerImageKey: DefaultImage, PoolKey: "default", }, } want := fmt.Sprintf("prebuilts/remoteexecution-client/live/rewrapper --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out -- ", DefaultImage) if got := params.NoVarTemplate(android.NullConfig("")); got != want { t.Errorf("NoVarTemplate() returned\n%s\nwant\n%s", got, want) } } func TestTemplateDeterminism(t *testing.T) { r := &REParams{ Labels: map[string]string{"type": "compile", "lang": "cpp", "compiler": "clang"}, Loading