Support calling clang-tidy in the compiler wrapper.

BUG=chromium:773875
TEST=unit test

Change-Id: Iba2a8c38c5542b6289373e8c8e97e2e671008aef
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1691114
Reviewed-by: Tobias Bosch <tbosch@google.com>
Tested-by: Tobias Bosch <tbosch@google.com>
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go
index e5b7234..1eacb57 100644
--- a/compiler_wrapper/compiler_wrapper.go
+++ b/compiler_wrapper/compiler_wrapper.go
@@ -79,13 +79,20 @@
 	}
 	clangSyntax := processClangSyntaxFlag(mainBuilder)
 	if mainBuilder.target.compilerType == clangType {
-		compilerCmd, err = calcClangCommand(mainBuilder)
+		cSrcFile, useClangTidy := processClangTidyFlags(mainBuilder)
+		compilerCmd, err = calcClangCommand(useClangTidy, mainBuilder)
 		if err != nil {
 			return nil, exitCode, err
 		}
+		if useClangTidy {
+			if err := runClangTidy(env, compilerCmd, cSrcFile); err != nil {
+				return nil, exitCode, err
+			}
+		}
 	} else {
 		if clangSyntax {
-			clangCmd, err := calcClangCommand(mainBuilder.clone())
+			forceLocal := false
+			clangCmd, err := calcClangCommand(forceLocal, mainBuilder.clone())
 			if err != nil {
 				return nil, 0, err
 			}
@@ -100,14 +107,16 @@
 	return compilerCmd, exitCode, nil
 }
 
-func calcClangCommand(builder *commandBuilder) (*command, error) {
+func calcClangCommand(forceLocal bool, builder *commandBuilder) (*command, error) {
 	sysroot := processSysrootFlag(builder)
 	builder.addPreUserArgs(builder.cfg.clangFlags...)
 	calcCommonPreUserArgs(builder)
 	if err := processClangFlags(builder); err != nil {
 		return nil, err
 	}
-	processGomaCCacheFlags(sysroot, builder)
+	if !forceLocal {
+		processGomaCCacheFlags(sysroot, builder)
+	}
 	return builder.build(), nil
 }