Merge "Remove support for unsandboxed metalava" am: 7fef94f57b

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1660772

Change-Id: I0994f58d3e8e445b082d7192672ddf035041aefb
This commit is contained in:
Colin Cross 2021-04-06 00:00:28 +00:00 committed by Automerger Merge Worker
commit b60432e4c8
3 changed files with 21 additions and 84 deletions

View File

@ -98,10 +98,6 @@ type JavadocProperties struct {
// names of the output files used in args that will be generated // names of the output files used in args that will be generated
Out []string 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 { type ApiToCheck struct {

View File

@ -383,7 +383,7 @@ func (d *Droidstubs) apiLevelsAnnotationsFlags(ctx android.ModuleContext, cmd *a
func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersion javaVersion, srcs android.Paths, func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersion javaVersion, srcs android.Paths,
srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths, srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths,
implicitsRsp, homeDir android.WritablePath, sandbox bool) *android.RuleBuilderCommand { homeDir android.WritablePath) *android.RuleBuilderCommand {
rule.Command().Text("rm -rf").Flag(homeDir.String()) rule.Command().Text("rm -rf").Flag(homeDir.String())
rule.Command().Text("mkdir -p").Flag(homeDir.String()) rule.Command().Text("mkdir -p").Flag(homeDir.String())
@ -392,39 +392,16 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi
if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_METALAVA") { if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_METALAVA") {
rule.Remoteable(android.RemoteRuleSupports{RBE: true}) rule.Remoteable(android.RemoteRuleSupports{RBE: true})
if sandbox { execStrategy := ctx.Config().GetenvWithDefault("RBE_METALAVA_EXEC_STRATEGY", remoteexec.LocalExecStrategy)
execStrategy := ctx.Config().GetenvWithDefault("RBE_METALAVA_EXEC_STRATEGY", remoteexec.LocalExecStrategy) labels := map[string]string{"type": "tool", "name": "metalava"}
labels := map[string]string{"type": "tool", "name": "metalava"} // TODO: metalava pool rejects these jobs
// TODO: metalava pool rejects these jobs pool := ctx.Config().GetenvWithDefault("RBE_METALAVA_POOL", "java16")
pool := ctx.Config().GetenvWithDefault("RBE_METALAVA_POOL", "java16") rule.Rewrapper(&remoteexec.REParams{
rule.Rewrapper(&remoteexec.REParams{ Labels: labels,
Labels: labels, ExecStrategy: execStrategy,
ExecStrategy: execStrategy, ToolchainInputs: []string{config.JavaCmd(ctx).String()},
ToolchainInputs: []string{config.JavaCmd(ctx).String()}, Platform: map[string]string{remoteexec.PoolKey: pool},
Platform: map[string]string{remoteexec.PoolKey: pool}, })
})
} else {
execStrategy := remoteexec.LocalExecStrategy
labels := map[string]string{"type": "compile", "lang": "java", "compiler": "metalava", "shallow": "true"}
pool := ctx.Config().GetenvWithDefault("RBE_METALAVA_POOL", "metalava")
inputs := []string{
ctx.Config().HostJavaToolPath(ctx, "metalava").String(),
homeDir.String(),
}
if v := ctx.Config().Getenv("RBE_METALAVA_INPUTS"); v != "" {
inputs = append(inputs, strings.Split(v, ",")...)
}
cmd.Text((&remoteexec.REParams{
Labels: labels,
ExecStrategy: execStrategy,
Inputs: inputs,
RSPFiles: []string{implicitsRsp.String()},
ToolchainInputs: []string{config.JavaCmd(ctx).String()},
Platform: map[string]string{remoteexec.PoolKey: pool},
EnvironmentVariables: []string{"ANDROID_PREFS_ROOT"},
}).NoVarTemplate(ctx.Config().RBEWrapper()))
}
} }
cmd.BuiltTool("metalava").ImplicitTool(ctx.Config().HostJavaToolPath(ctx, "metalava.jar")). cmd.BuiltTool("metalava").ImplicitTool(ctx.Config().HostJavaToolPath(ctx, "metalava.jar")).
@ -435,18 +412,6 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersi
FlagWithRspFileInputList("@", android.PathForModuleOut(ctx, "metalava.rsp"), srcs). FlagWithRspFileInputList("@", android.PathForModuleOut(ctx, "metalava.rsp"), srcs).
FlagWithInput("@", srcJarList) FlagWithInput("@", srcJarList)
if !sandbox {
if javaHome := ctx.Config().Getenv("ANDROID_JAVA_HOME"); javaHome != "" {
cmd.Implicit(android.PathForSource(ctx, javaHome))
}
cmd.FlagWithOutput("--strict-input-files:warn ", android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"violations.txt"))
if implicitsRsp != nil {
cmd.FlagWithArg("--strict-input-files-exempt ", "@"+implicitsRsp.String())
}
}
if len(bootclasspath) > 0 { if len(bootclasspath) > 0 {
cmd.FlagWithInputList("-bootclasspath ", bootclasspath.Paths(), ":") cmd.FlagWithInputList("-bootclasspath ", bootclasspath.Paths(), ":")
} }
@ -482,12 +447,9 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
rule := android.NewRuleBuilder(pctx, ctx) rule := android.NewRuleBuilder(pctx, ctx)
sandbox := proptools.BoolDefault(d.Javadoc.properties.Sandbox, true) rule.Sbox(android.PathForModuleOut(ctx, "metalava"),
if sandbox { android.PathForModuleOut(ctx, "metalava.sbox.textproto")).
rule.Sbox(android.PathForModuleOut(ctx, "metalava"), SandboxInputs()
android.PathForModuleOut(ctx, "metalava.sbox.textproto")).
SandboxInputs()
}
if BoolDefault(d.properties.High_mem, false) { if BoolDefault(d.properties.High_mem, false) {
// This metalava run uses lots of memory, restrict the number of metalava jobs that can run in parallel. // This metalava run uses lots of memory, restrict the number of metalava jobs that can run in parallel.
@ -505,11 +467,9 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
srcJarList := zipSyncCmd(ctx, rule, srcJarDir, d.Javadoc.srcJars) srcJarList := zipSyncCmd(ctx, rule, srcJarDir, d.Javadoc.srcJars)
implicitsRsp := android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"implicits.rsp")
homeDir := android.PathForModuleOut(ctx, "metalava", "home") homeDir := android.PathForModuleOut(ctx, "metalava", "home")
cmd := metalavaCmd(ctx, rule, javaVersion, d.Javadoc.srcFiles, srcJarList, cmd := metalavaCmd(ctx, rule, javaVersion, d.Javadoc.srcFiles, srcJarList,
deps.bootClasspath, deps.classpath, d.Javadoc.sourcepaths, implicitsRsp, homeDir, deps.bootClasspath, deps.classpath, d.Javadoc.sourcepaths, homeDir)
sandbox)
cmd.Implicits(d.Javadoc.implicits) cmd.Implicits(d.Javadoc.implicits)
d.stubsFlags(ctx, cmd, stubsDir) d.stubsFlags(ctx, cmd, stubsDir)
@ -628,22 +588,6 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
cmd.FlagWithArg("--error-message:compatibility:released ", msg) cmd.FlagWithArg("--error-message:compatibility:released ", msg)
} }
if !sandbox {
// When sandboxing is enabled RuleBuilder tracks all the inputs needed for remote execution.
// Without it we have to do it manually.
impRule := android.NewRuleBuilder(pctx, ctx)
impCmd := impRule.Command()
// An 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("", android.PathForModuleOut(ctx, "metalava-implicits.rsp"), cmd.GetImplicits()).
Output(implicitsRsp)
impRule.Build("implicitsGen", "implicits generation")
cmd.Implicit(implicitsRsp)
}
if generateStubs { if generateStubs {
rule.Command(). rule.Command().
BuiltTool("soong_zip"). BuiltTool("soong_zip").
@ -675,9 +619,7 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
} }
// TODO(b/183630617): rewrapper doesn't support restat rules // TODO(b/183630617): rewrapper doesn't support restat rules
if !sandbox { // rule.Restat()
rule.Restat()
}
zipSyncCleanupCmd(rule, srcJarDir) zipSyncCleanupCmd(rule, srcJarDir)

View File

@ -34,7 +34,6 @@ func TestDroidstubs(t *testing.T) {
srcs: ["bar-doc/a.java"], srcs: ["bar-doc/a.java"],
api_levels_annotations_dirs: ["droiddoc-templates-sdk"], api_levels_annotations_dirs: ["droiddoc-templates-sdk"],
api_levels_annotations_enabled: true, api_levels_annotations_enabled: true,
sandbox: false,
} }
droidstubs { droidstubs {
@ -44,7 +43,6 @@ func TestDroidstubs(t *testing.T) {
api_levels_annotations_dirs: ["droiddoc-templates-sdk"], api_levels_annotations_dirs: ["droiddoc-templates-sdk"],
api_levels_annotations_enabled: true, api_levels_annotations_enabled: true,
api_levels_jar_filename: "android.other.jar", api_levels_jar_filename: "android.other.jar",
sandbox: false,
} }
`, `,
map[string][]byte{ map[string][]byte{
@ -68,13 +66,15 @@ func TestDroidstubs(t *testing.T) {
} }
for _, c := range testcases { for _, c := range testcases {
m := ctx.ModuleForTests(c.moduleName, "android_common") m := ctx.ModuleForTests(c.moduleName, "android_common")
metalava := m.Rule("metalava") manifest := m.Output("metalava.sbox.textproto")
rp := metalava.RuleParams sboxProto := android.RuleBuilderSboxProtoForTests(t, manifest)
expected := "--android-jar-pattern ./%/public/" + c.expectedJarFilename expected := "--android-jar-pattern ./%/public/" + c.expectedJarFilename
if actual := rp.Command; !strings.Contains(actual, expected) { if actual := String(sboxProto.Commands[0].Command); !strings.Contains(actual, expected) {
t.Errorf("For %q, expected metalava argument %q, but was not found %q", c.moduleName, expected, actual) t.Errorf("For %q, expected metalava argument %q, but was not found %q", c.moduleName, expected, actual)
} }
metalava := m.Rule("metalava")
rp := metalava.RuleParams
if actual := rp.Pool != nil && strings.Contains(rp.Pool.String(), "highmem"); actual != c.high_mem { if actual := rp.Pool != nil && strings.Contains(rp.Pool.String(), "highmem"); actual != c.high_mem {
t.Errorf("Expected %q high_mem to be %v, was %v", c.moduleName, c.high_mem, actual) t.Errorf("Expected %q high_mem to be %v, was %v", c.moduleName, c.high_mem, actual)
} }
@ -92,7 +92,6 @@ func TestDroidstubsSandbox(t *testing.T) {
droidstubs { droidstubs {
name: "bar-stubs", name: "bar-stubs",
srcs: ["bar-doc/a.java"], srcs: ["bar-doc/a.java"],
sandbox: true,
args: "--reference $(location :foo)", args: "--reference $(location :foo)",
arg_files: [":foo"], arg_files: [":foo"],