summaryrefslogtreecommitdiff
path: root/cc/builder.go
diff options
context:
space:
mode:
Diffstat (limited to 'cc/builder.go')
-rw-r--r--cc/builder.go30
1 files changed, 20 insertions, 10 deletions
diff --git a/cc/builder.go b/cc/builder.go
index d0527cb44..6a4d94040 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -198,19 +198,22 @@ var (
// Rule for invoking clang-tidy (a clang-based linter).
clangTidy, clangTidyRE = pctx.RemoteStaticRules("clangTidy",
blueprint.RuleParams{
- Command: "rm -f $out && $reTemplate${config.ClangBin}/clang-tidy $tidyFlags $in -- $cFlags && touch $out",
+ Command: "rm -f $out && $tidyVars $reTemplate${config.ClangBin}/clang-tidy $tidyFlags $in -- $cFlags && touch $out",
CommandDeps: []string{"${config.ClangBin}/clang-tidy"},
},
&remoteexec.REParams{
- Labels: map[string]string{"type": "lint", "tool": "clang-tidy", "lang": "cpp"},
- ExecStrategy: "${config.REClangTidyExecStrategy}",
- Inputs: []string{"$in"},
- // OutputFile here is $in for remote-execution since its possible that
- // clang-tidy modifies the given input file itself and $out refers to the
- // ".tidy" file generated for ninja-dependency reasons.
- OutputFiles: []string{"$in"},
- Platform: map[string]string{remoteexec.PoolKey: "${config.REClangTidyPool}"},
- }, []string{"cFlags", "tidyFlags"}, []string{})
+ Labels: map[string]string{"type": "lint", "tool": "clang-tidy", "lang": "cpp"},
+ ExecStrategy: "${config.REClangTidyExecStrategy}",
+ Inputs: []string{"$in"},
+ EnvironmentVariables: []string{"TIDY_TIMEOUT"},
+ // Although clang-tidy has an option to "fix" source files, that feature is hardly useable
+ // under parallel compilation and RBE. So we assume no OutputFiles here.
+ // The clang-tidy fix option is best run locally in single thread.
+ // Copying source file back to local caused two problems:
+ // (1) New timestamps trigger clang and clang-tidy compilations again.
+ // (2) Changing source files caused concurrent clang or clang-tidy jobs to crash.
+ Platform: map[string]string{remoteexec.PoolKey: "${config.REClangTidyPool}"},
+ }, []string{"cFlags", "tidyFlags", "tidyVars"}, []string{})
_ = pctx.SourcePathVariable("yasmCmd", "prebuilts/misc/${config.HostPrebuiltTag}/yasm/yasm")
@@ -440,8 +443,13 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
// Source files are one-to-one with tidy, coverage, or kythe files, if enabled.
objFiles := make(android.Paths, len(srcFiles))
var tidyFiles android.Paths
+ var tidyVars string
if flags.tidy {
tidyFiles = make(android.Paths, 0, len(srcFiles))
+ tidyTimeout := ctx.Config().Getenv("TIDY_TIMEOUT")
+ if len(tidyTimeout) > 0 {
+ tidyVars += "TIDY_TIMEOUT=" + tidyTimeout
+ }
}
var coverageFiles android.Paths
if flags.gcovCoverage {
@@ -631,6 +639,7 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
rule = clangTidyRE
}
+ ctx.TidyFile(tidyFile)
ctx.Build(pctx, android.BuildParams{
Rule: rule,
Description: "clang-tidy " + srcFile.Rel(),
@@ -644,6 +653,7 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
Args: map[string]string{
"cFlags": moduleToolingFlags,
"tidyFlags": config.TidyFlagsForSrcFile(srcFile, flags.tidyFlags),
+ "tidyVars": tidyVars,
},
})
}