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

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

Change-Id: I612dc3c428808aac89586b6e077e1f419bc4f08f
This commit is contained in:
Chih-hung Hsieh
2021-09-17 02:25:16 +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
}, },
}) })