compiler_wrapper: add -clang-tidy-flag support

This CL adds support for specifying compiler flags that're meant to be
passed only to clang-tidy. This allows for easier local experimentation
with clang-tidy by users.

BUG=chromium:982944
TEST=`WITH_TIDY=1 emerge-amd64-generic biod` with custom cflags; cq+1
     on crrev.com/c/2308774

Change-Id: I654559d14a78ade4920fe37757fb5b249a997290
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2309152
Reviewed-by: Caroline Tice <cmtice@chromium.org>
Tested-by: George Burgess <gbiv@chromium.org>
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go
index 14de210..a5d35a2 100644
--- a/compiler_wrapper/compiler_wrapper.go
+++ b/compiler_wrapper/compiler_wrapper.go
@@ -89,53 +89,55 @@
 		default:
 			return 0, newErrorwithSourceLocf("unsupported compiler: %s", mainBuilder.target.compiler)
 		}
-	} else if mainBuilder.target.compilerType == clangType {
-		cSrcFile, tidyMode := processClangTidyFlags(mainBuilder)
-		err := prepareClangCommand(mainBuilder)
-		if err != nil {
-			return 0, err
-		}
-		allowCCache := true
-		if tidyMode != tidyModeNone {
-			allowCCache = false
-			clangCmdWithoutGomaAndCCache := mainBuilder.build()
-			var err error
-			switch tidyMode {
-			case tidyModeTricium:
-				if cfg.triciumNitsDir == "" {
-					return 0, newErrorwithSourceLocf("tricium linting was requested, but no nits directory is configured")
-				}
-				err = runClangTidyForTricium(env, clangCmdWithoutGomaAndCCache, cSrcFile, cfg.triciumNitsDir)
-			case tidyModeAll:
-				err = runClangTidy(env, clangCmdWithoutGomaAndCCache, cSrcFile)
-			default:
-				panic(fmt.Sprintf("Unknown tidy mode: %v", tidyMode))
-			}
-
-			if err != nil {
-				return 0, err
-			}
-		}
-		if err := processGomaCCacheFlags(allowCCache, mainBuilder); err != nil {
-			return 0, err
-		}
-		compilerCmd = mainBuilder.build()
 	} else {
-		if clangSyntax {
-			allowCCache := false
-			clangCmd, err := calcClangCommand(allowCCache, mainBuilder.clone())
+		cSrcFile, tidyFlags, tidyMode := processClangTidyFlags(mainBuilder)
+		if mainBuilder.target.compilerType == clangType {
+			err := prepareClangCommand(mainBuilder)
 			if err != nil {
 				return 0, err
 			}
-			gccCmd, err := calcGccCommand(mainBuilder)
+			allowCCache := true
+			if tidyMode != tidyModeNone {
+				allowCCache = false
+				clangCmdWithoutGomaAndCCache := mainBuilder.build()
+				var err error
+				switch tidyMode {
+				case tidyModeTricium:
+					if cfg.triciumNitsDir == "" {
+						return 0, newErrorwithSourceLocf("tricium linting was requested, but no nits directory is configured")
+					}
+					err = runClangTidyForTricium(env, clangCmdWithoutGomaAndCCache, cSrcFile, cfg.triciumNitsDir, tidyFlags)
+				case tidyModeAll:
+					err = runClangTidy(env, clangCmdWithoutGomaAndCCache, cSrcFile, tidyFlags)
+				default:
+					panic(fmt.Sprintf("Unknown tidy mode: %v", tidyMode))
+				}
+
+				if err != nil {
+					return 0, err
+				}
+			}
+			if err := processGomaCCacheFlags(allowCCache, mainBuilder); err != nil {
+				return 0, err
+			}
+			compilerCmd = mainBuilder.build()
+		} else {
+			if clangSyntax {
+				allowCCache := false
+				clangCmd, err := calcClangCommand(allowCCache, mainBuilder.clone())
+				if err != nil {
+					return 0, err
+				}
+				gccCmd, err := calcGccCommand(mainBuilder)
+				if err != nil {
+					return 0, err
+				}
+				return checkClangSyntax(env, clangCmd, gccCmd)
+			}
+			compilerCmd, err = calcGccCommand(mainBuilder)
 			if err != nil {
 				return 0, err
 			}
-			return checkClangSyntax(env, clangCmd, gccCmd)
-		}
-		compilerCmd, err = calcGccCommand(mainBuilder)
-		if err != nil {
-			return 0, err
 		}
 	}
 	rusageLogfileName := getRusageLogFilename(env)