From 31ec942ff7e2c5fca9c10eaa6c9c3c7bef2e1637 Mon Sep 17 00:00:00 2001 From: Ramy Medhat Date: Fri, 17 Apr 2020 15:03:58 -0400 Subject: [PATCH] Add support for remotely executing header-abi-dumper actions. Test: built with and without RBE_ABI_DUMPER set. Change-Id: Ie752c07325453076d191813eaa50da03e3a0c2d8 --- cc/builder.go | 32 ++++++++++++++++++++++---------- cc/config/global.go | 2 ++ remoteexec/remoteexec.go | 3 ++- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/cc/builder.go b/cc/builder.go index b583586f3..d8b6a587e 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -65,7 +65,7 @@ var ( ld, ldRE = remoteexec.StaticRules(pctx, "ld", blueprint.RuleParams{ - Command: "$ldCmd ${crtBegin} @${out}.rsp " + + Command: "$reTemplate$ldCmd ${crtBegin} @${out}.rsp " + "${libFlags} ${crtEnd} -o ${out} ${ldFlags} ${extraLibFlags}", CommandDeps: []string{"$ldCmd"}, Rspfile: "${out}.rsp", @@ -73,7 +73,8 @@ var ( // clang -Wl,--out-implib doesn't update its output file if it hasn't changed. Restat: true, }, - &remoteexec.REParams{Labels: map[string]string{"type": "link", "tool": "clang"}, + &remoteexec.REParams{ + Labels: map[string]string{"type": "link", "tool": "clang"}, ExecStrategy: "${config.RECXXLinksExecStrategy}", Inputs: []string{"${out}.rsp"}, RSPFile: "${out}.rsp", @@ -86,11 +87,12 @@ var ( blueprint.RuleParams{ // Without -no-pie, clang 7.0 adds -pie to link Android files, // but -r and -pie cannot be used together. - Command: "$ldCmd -fuse-ld=lld -nostdlib -no-pie -Wl,-r ${in} -o ${out} ${ldFlags}", + Command: "$reTemplate$ldCmd -fuse-ld=lld -nostdlib -no-pie -Wl,-r ${in} -o ${out} ${ldFlags}", CommandDeps: []string{"$ldCmd"}, }, &remoteexec.REParams{ - Labels: map[string]string{"type": "link", "tool": "clang"}, - ExecStrategy: "${config.RECXXLinksExecStrategy}", Inputs: []string{"$inCommaList"}, + Labels: map[string]string{"type": "link", "tool": "clang"}, + ExecStrategy: "${config.RECXXLinksExecStrategy}", + Inputs: []string{"$inCommaList"}, OutputFiles: []string{"${out}"}, ToolchainInputs: []string{"$ldCmd"}, Platform: map[string]string{remoteexec.PoolKey: "${config.RECXXLinksPool}"}, @@ -199,12 +201,18 @@ var ( _ = pctx.SourcePathVariable("sAbiDumper", "prebuilts/clang-tools/${config.HostPrebuiltTag}/bin/header-abi-dumper") // -w has been added since header-abi-dumper does not need to produce any sort of diagnostic information. - sAbiDump = pctx.AndroidStaticRule("sAbiDump", + sAbiDump, sAbiDumpRE = remoteexec.StaticRules(pctx, "sAbiDump", blueprint.RuleParams{ - Command: "rm -f $out && $sAbiDumper -o ${out} $in $exportDirs -- $cFlags -w -isystem prebuilts/clang-tools/${config.HostPrebuiltTag}/clang-headers", + Command: "rm -f $out && $reTemplate$sAbiDumper -o ${out} $in $exportDirs -- $cFlags -w -isystem prebuilts/clang-tools/${config.HostPrebuiltTag}/clang-headers", CommandDeps: []string{"$sAbiDumper"}, - }, - "cFlags", "exportDirs") + }, &remoteexec.REParams{ + Labels: map[string]string{"type": "abi-dump", "tool": "header-abi-dumper"}, + ExecStrategy: "${config.REAbiDumperExecStrategy}", + Platform: map[string]string{ + remoteexec.PoolKey: "${config.RECXXPool}", + "InputRootAbsolutePath": android.AbsSrcDirForExistingUseCases(), + }, + }, []string{"cFlags", "exportDirs"}, nil) _ = pctx.SourcePathVariable("sAbiLinker", "prebuilts/clang-tools/${config.HostPrebuiltTag}/bin/header-abi-linker") @@ -567,8 +575,12 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and sAbiDumpFile := android.ObjPathWithExt(ctx, subdir, srcFile, "sdump") sAbiDumpFiles = append(sAbiDumpFiles, sAbiDumpFile) + dumpRule := sAbiDump + if ctx.Config().IsEnvTrue("RBE_ABI_DUMPER") { + dumpRule = sAbiDumpRE + } ctx.Build(pctx, android.BuildParams{ - Rule: sAbiDump, + Rule: dumpRule, Description: "header-abi-dumper " + srcFile.Rel(), Output: sAbiDumpFile, Input: srcFile, diff --git a/cc/config/global.go b/cc/config/global.go index d85ac5f6a..39c4c3388 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -257,8 +257,10 @@ func init() { return "" }) + pctx.VariableFunc("RECXXPool", envOverrideFunc("RBE_CXX_POOL", remoteexec.DefaultPool)) pctx.VariableFunc("RECXXLinksPool", envOverrideFunc("RBE_CXX_LINKS_POOL", remoteexec.DefaultPool)) pctx.VariableFunc("RECXXLinksExecStrategy", envOverrideFunc("RBE_CXX_LINKS_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) + pctx.VariableFunc("REAbiDumperExecStrategy", envOverrideFunc("RBE_ABI_DUMPER_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) } var HostPrebuiltTag = pctx.VariableConfigMethod("HostPrebuiltTag", android.Config.PrebuiltOS) diff --git a/remoteexec/remoteexec.go b/remoteexec/remoteexec.go index d43dc6c01..f51192263 100644 --- a/remoteexec/remoteexec.go +++ b/remoteexec/remoteexec.go @@ -148,7 +148,8 @@ func (r *REParams) Template() string { // locally executable rule and the second rule is a remotely executable rule. func StaticRules(ctx android.PackageContext, name string, ruleParams blueprint.RuleParams, reParams *REParams, commonArgs []string, reArgs []string) (blueprint.Rule, blueprint.Rule) { ruleParamsRE := ruleParams - ruleParamsRE.Command = reParams.Template() + ruleParamsRE.Command + ruleParams.Command = strings.ReplaceAll(ruleParams.Command, "$reTemplate", "") + ruleParamsRE.Command = strings.ReplaceAll(ruleParamsRE.Command, "$reTemplate", reParams.Template()) return ctx.AndroidStaticRule(name, ruleParams, commonArgs...), ctx.AndroidRemoteStaticRule(name+"RE", android.RemoteRuleSupports{RBE: true}, ruleParamsRE, append(commonArgs, reArgs...)...)