Merge "Use ccCmd to generate clang-tidy dependent file"

This commit is contained in:
Chih-hung Hsieh
2021-09-17 01:59:23 +00:00
committed by Gerrit Code Review

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
}, },
}) })