Merge "Use ccCmd to generate clang-tidy dependent file" am: 935ae2c51d am: d19ed27801 am: f1dd6e7da1 am: f7a91b8167

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

Change-Id: I5b29be80eef1ed929f0306346468d7bac0507036
This commit is contained in:
Chih-hung Hsieh
2021-09-17 02:55:42 +00:00
committed by Automerger Merge Worker

View File

@@ -199,8 +199,18 @@ var (
// Rule for invoking clang-tidy (a clang-based linter). // Rule for invoking clang-tidy (a clang-based linter).
clangTidy, clangTidyRE = pctx.RemoteStaticRules("clangTidy", clangTidy, clangTidyRE = pctx.RemoteStaticRules("clangTidy",
blueprint.RuleParams{ blueprint.RuleParams{
Command: "rm -f $out && $tidyVars $reTemplate${config.ClangBin}/clang-tidy $tidyFlags $in -- $cFlags && touch $out", Depfile: "${out}.d",
CommandDeps: []string{"${config.ClangBin}/clang-tidy"}, Deps: blueprint.DepsGCC,
// Pick bash because some machines with old /bin/sh cannot handle arrays.
// All $cFlags and $tidyFlags should have single quotes escaped.
// Assume no single quotes in other parameters like $in, $out, $ccCmd.
Command: "/bin/bash -c 'SRCF=$in; TIDYF=$out; CLANGFLAGS=($cFlags); " +
"rm -f $$TIDYF $${TIDYF}.d && " +
"${config.CcWrapper}$ccCmd \"$${CLANGFLAGS[@]}\" -E -o /dev/null $$SRCF " +
"-MQ $$TIDYF -MD -MF $${TIDYF}.d && " +
"$tidyVars $reTemplate${config.ClangBin}/clang-tidy $tidyFlags $$SRCF " +
"-- \"$${CLANGFLAGS[@]}\" && touch $$TIDYF'",
CommandDeps: []string{"${config.ClangBin}/clang-tidy", "$ccCmd"},
}, },
&remoteexec.REParams{ &remoteexec.REParams{
Labels: map[string]string{"type": "lint", "tool": "clang-tidy", "lang": "cpp"}, Labels: map[string]string{"type": "lint", "tool": "clang-tidy", "lang": "cpp"},
@@ -214,7 +224,7 @@ var (
// (1) New timestamps trigger clang and clang-tidy compilations again. // (1) New timestamps trigger clang and clang-tidy compilations again.
// (2) Changing source files caused concurrent clang or clang-tidy jobs to crash. // (2) Changing source files caused concurrent clang or clang-tidy jobs to crash.
Platform: map[string]string{remoteexec.PoolKey: "${config.REClangTidyPool}"}, Platform: map[string]string{remoteexec.PoolKey: "${config.REClangTidyPool}"},
}, []string{"cFlags", "tidyFlags", "tidyVars"}, []string{}) }, []string{"ccCmd", "cFlags", "tidyFlags", "tidyVars"}, []string{})
_ = pctx.SourcePathVariable("yasmCmd", "prebuilts/misc/${config.HostPrebuiltTag}/yasm/yasm") _ = pctx.SourcePathVariable("yasmCmd", "prebuilts/misc/${config.HostPrebuiltTag}/yasm/yasm")
@@ -437,6 +447,12 @@ func (a Objects) Append(b Objects) Objects {
} }
} }
func escapeSingleQuotes(s string) string {
// Replace single quotes to work when embedded in a single quoted string for bash.
// Relying on string concatenation of bash to get A'B from quoted 'A'\''B'.
return strings.Replace(s, `'`, `'\''`, -1)
}
// Generate rules for compiling multiple .c, .cpp, or .S files to individual .o files // Generate rules for compiling multiple .c, .cpp, or .S files to individual .o files
func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles android.Paths, func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles android.Paths,
flags builderFlags, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { flags builderFlags, pathDeps android.Paths, cFlagsDeps android.Paths) Objects {
@@ -672,14 +688,12 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
Description: "clang-tidy " + srcFile.Rel(), Description: "clang-tidy " + srcFile.Rel(),
Output: tidyFile, Output: tidyFile,
Input: srcFile, Input: srcFile,
// We must depend on objFile, since clang-tidy doesn't Implicits: cFlagsDeps,
// support exporting dependencies. OrderOnly: pathDeps,
Implicit: objFile,
Implicits: cFlagsDeps,
OrderOnly: pathDeps,
Args: map[string]string{ Args: map[string]string{
"cFlags": shareFlags("cFlags", moduleToolingFlags), "ccCmd": ccCmd,
"tidyFlags": shareFlags("tidyFlags", config.TidyFlagsForSrcFile(srcFile, flags.tidyFlags)), "cFlags": shareFlags("cFlags", escapeSingleQuotes(moduleToolingFlags)),
"tidyFlags": shareFlags("tidyFlags", escapeSingleQuotes(config.TidyFlagsForSrcFile(srcFile, flags.tidyFlags))),
"tidyVars": tidyVars, // short and not shared "tidyVars": tidyVars, // short and not shared
}, },
}) })