Add support for the remote execution of Abi links.
Test: built crosshatch userdebug with RBE_ABI_LINKS=1
Bug: b/166742236
Change-Id: Idb4e15b59878af4a98d9a594127c21deff669e16
Merged-In: Idb4e15b59878af4a98d9a594127c21deff669e16
diff --git a/cc/builder.go b/cc/builder.go
index 37fbf4e..abf7a00 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -215,15 +215,23 @@
}, []string{"cFlags", "exportDirs"}, nil)
_ = pctx.SourcePathVariable("sAbiLinker", "prebuilts/clang-tools/${config.HostPrebuiltTag}/bin/header-abi-linker")
+ _ = pctx.SourcePathVariable("sAbiLinkerLibs", "prebuilts/clang-tools/${config.HostPrebuiltTag}/lib64")
- sAbiLink = pctx.AndroidStaticRule("sAbiLink",
+ sAbiLink, sAbiLinkRE = remoteexec.StaticRules(pctx, "sAbiLink",
blueprint.RuleParams{
- Command: "$sAbiLinker -o ${out} $symbolFilter -arch $arch $exportedHeaderFlags @${out}.rsp ",
+ Command: "$reTemplate$sAbiLinker -o ${out} $symbolFilter -arch $arch $exportedHeaderFlags @${out}.rsp ",
CommandDeps: []string{"$sAbiLinker"},
Rspfile: "${out}.rsp",
RspfileContent: "${in}",
- },
- "symbolFilter", "arch", "exportedHeaderFlags")
+ }, &remoteexec.REParams{
+ Labels: map[string]string{"type": "tool", "name": "abi-linker"},
+ ExecStrategy: "${config.REAbiLinkerExecStrategy}",
+ Inputs: []string{"$sAbiLinkerLibs", "${out}.rsp", "$implicits"},
+ RSPFile: "${out}.rsp",
+ OutputFiles: []string{"$out"},
+ ToolchainInputs: []string{"$sAbiLinker"},
+ Platform: map[string]string{remoteexec.PoolKey: "${config.RECXXPool}"},
+ }, []string{"symbolFilter", "arch", "exportedHeaderFlags"}, []string{"implicits"})
_ = pctx.SourcePathVariable("sAbiDiffer", "prebuilts/clang-tools/${config.HostPrebuiltTag}/bin/header-abi-diff")
@@ -729,17 +737,30 @@
for _, tag := range excludedSymbolTags {
symbolFilterStr += " --exclude-symbol-tag " + tag
}
+ rule := sAbiLink
+ args := map[string]string{
+ "symbolFilter": symbolFilterStr,
+ "arch": ctx.Arch().ArchType.Name,
+ "exportedHeaderFlags": exportedHeaderFlags,
+ }
+ if ctx.Config().IsEnvTrue("RBE_ABI_LINKER") {
+ rule = sAbiLinkRE
+ rbeImplicits := implicits.Strings()
+ for _, p := range strings.Split(exportedHeaderFlags, " ") {
+ if len(p) > 2 {
+ // Exclude the -I prefix.
+ rbeImplicits = append(rbeImplicits, p[2:])
+ }
+ }
+ args["implicits"] = strings.Join(rbeImplicits, ",")
+ }
ctx.Build(pctx, android.BuildParams{
- Rule: sAbiLink,
+ Rule: rule,
Description: "header-abi-linker " + outputFile.Base(),
Output: outputFile,
Inputs: sAbiDumps,
Implicits: implicits,
- Args: map[string]string{
- "symbolFilter": symbolFilterStr,
- "arch": ctx.Arch().ArchType.Name,
- "exportedHeaderFlags": exportedHeaderFlags,
- },
+ Args: args,
})
return android.OptionalPathForPath(outputFile)
}
diff --git a/cc/config/global.go b/cc/config/global.go
index fce0306..57d8db9 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -261,6 +261,7 @@
pctx.VariableFunc("RECXXLinksPool", remoteexec.EnvOverrideFunc("RBE_CXX_LINKS_POOL", remoteexec.DefaultPool))
pctx.VariableFunc("RECXXLinksExecStrategy", remoteexec.EnvOverrideFunc("RBE_CXX_LINKS_EXEC_STRATEGY", remoteexec.LocalExecStrategy))
pctx.VariableFunc("REAbiDumperExecStrategy", remoteexec.EnvOverrideFunc("RBE_ABI_DUMPER_EXEC_STRATEGY", remoteexec.LocalExecStrategy))
+ pctx.VariableFunc("REAbiLinkerExecStrategy", remoteexec.EnvOverrideFunc("RBE_ABI_LINKER_EXEC_STRATEGY", remoteexec.LocalExecStrategy))
}
var HostPrebuiltTag = pctx.VariableConfigMethod("HostPrebuiltTag", android.Config.PrebuiltOS)