From 309b1c0da30459224a4ce757dd0b292cc498bcac Mon Sep 17 00:00:00 2001 From: Kousik Kumar Date: Thu, 28 May 2020 06:13:33 -0700 Subject: [PATCH] Add support for remote-execution / caching of signapk actions Test: "RBE_SIGNAPK=true RBE_SIGNAPK_EXEC_STRATEGY=remote ... use_rbe m" on crosshatch-userdebug and signapk targets worked Bug: b/156765091 Change-Id: I4b8c21320c2f38914ef39d3d8f036d885fab4e72 --- Android.bp | 1 + apex/builder.go | 26 +++++++++++++++++--------- java/app_builder.go | 33 ++++++++++++++++++++++++--------- java/config/config.go | 1 + 4 files changed, 43 insertions(+), 18 deletions(-) diff --git a/Android.bp b/Android.bp index ec7d13a48..73fad2500 100644 --- a/Android.bp +++ b/Android.bp @@ -289,6 +289,7 @@ bootstrap_go_package { "soong-dexpreopt", "soong-genrule", "soong-java-config", + "soong-remoteexec", "soong-tradefed", ], srcs: [ diff --git a/apex/builder.go b/apex/builder.go index 11652bc67..a6a347b5f 100644 --- a/apex/builder.go +++ b/apex/builder.go @@ -582,19 +582,27 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { } a.outputFile = android.PathForModuleOut(ctx, a.Name()+suffix) + rule := java.Signapk + args := map[string]string{ + "certificates": a.container_certificate_file.String() + " " + a.container_private_key_file.String(), + "flags": "-a 4096", //alignment + } + implicits := android.Paths{ + a.container_certificate_file, + a.container_private_key_file, + } + if ctx.Config().IsEnvTrue("RBE_SIGNAPK") { + rule = java.SignapkRE + args["implicits"] = strings.Join(implicits.Strings(), ",") + args["outCommaList"] = a.outputFile.String() + } ctx.Build(pctx, android.BuildParams{ - Rule: java.Signapk, + Rule: rule, Description: "signapk", Output: a.outputFile, Input: unsignedOutputFile, - Implicits: []android.Path{ - a.container_certificate_file, - a.container_private_key_file, - }, - Args: map[string]string{ - "certificates": a.container_certificate_file.String() + " " + a.container_private_key_file.String(), - "flags": "-a 4096", //alignment - }, + Implicits: implicits, + Args: args, }) // Install to $OUT/soong/{target,host}/.../apex diff --git a/java/app_builder.go b/java/app_builder.go index fb9ab4295..c3918d8e8 100644 --- a/java/app_builder.go +++ b/java/app_builder.go @@ -26,16 +26,23 @@ import ( "github.com/google/blueprint/proptools" "android/soong/android" + "android/soong/remoteexec" ) var ( - Signapk = pctx.AndroidStaticRule("signapk", + Signapk, SignapkRE = remoteexec.StaticRules(pctx, "signapk", blueprint.RuleParams{ - Command: `${config.JavaCmd} ${config.JavaVmFlags} -Djava.library.path=$$(dirname ${config.SignapkJniLibrary}) ` + + Command: `$reTemplate${config.JavaCmd} ${config.JavaVmFlags} -Djava.library.path=$$(dirname ${config.SignapkJniLibrary}) ` + `-jar ${config.SignapkCmd} $flags $certificates $in $out`, CommandDeps: []string{"${config.SignapkCmd}", "${config.SignapkJniLibrary}"}, }, - "flags", "certificates") + &remoteexec.REParams{Labels: map[string]string{"type": "tool", "name": "signapk"}, + ExecStrategy: "${config.RESignApkExecStrategy}", + Inputs: []string{"${config.SignapkCmd}", "$in", "$$(dirname ${config.SignapkJniLibrary})", "$implicits"}, + OutputFiles: []string{"$outCommaList"}, + ToolchainInputs: []string{"${config.JavaCmd}"}, + Platform: map[string]string{remoteexec.PoolKey: "${config.REJavaPool}"}, + }, []string{"flags", "certificates"}, []string{"implicits", "outCommaList"}) ) var combineApk = pctx.AndroidStaticRule("combineApk", @@ -78,22 +85,30 @@ func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, u deps = append(deps, c.Pem, c.Key) } + outputFiles := android.WritablePaths{signedApk} var flags []string if lineageFile != nil { flags = append(flags, "--lineage", lineageFile.String()) deps = append(deps, lineageFile) } + rule := Signapk + args := map[string]string{ + "certificates": strings.Join(certificateArgs, " "), + "flags": strings.Join(flags, " "), + } + if ctx.Config().IsEnvTrue("RBE_SIGNAPK") { + rule = SignapkRE + args["implicits"] = strings.Join(deps.Strings(), ",") + args["outCommaList"] = strings.Join(outputFiles.Strings(), ",") + } ctx.Build(pctx, android.BuildParams{ - Rule: Signapk, + Rule: rule, Description: "signapk", - Output: signedApk, + Outputs: outputFiles, Input: unsignedApk, Implicits: deps, - Args: map[string]string{ - "certificates": strings.Join(certificateArgs, " "), - "flags": strings.Join(flags, " "), - }, + Args: args, }) } diff --git a/java/config/config.go b/java/config/config.go index fa19afbf5..4173659a4 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -149,6 +149,7 @@ func init() { pctx.VariableFunc("RED8ExecStrategy", remoteexec.EnvOverrideFunc("RBE_D8_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) pctx.VariableFunc("RER8ExecStrategy", remoteexec.EnvOverrideFunc("RBE_R8_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) pctx.VariableFunc("RETurbineExecStrategy", remoteexec.EnvOverrideFunc("RBE_TURBINE_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) + pctx.VariableFunc("RESignApkExecStrategy", remoteexec.EnvOverrideFunc("RBE_SIGNAPK_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) pctx.HostJavaToolVariable("JacocoCLIJar", "jacoco-cli.jar")