Merge "Make Metalava checkapi a seperate run."
diff --git a/OWNERS b/OWNERS
index 121a441..edd2557 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,11 +1,3 @@
-ccross@android.com
-dwillemsen@google.com
-nanzhang@google.com
-
-per-file * = ccross@android.com
-per-file * = dwillemsen@google.com
-per-file * = nanzhang@google.com
-per-file *gen_stub_libs.py = danalbert@google.com
-per-file ndk_*.go = danalbert@google.com
-per-file clang.go = srhines@google.com
-per-file global.go = srhines@google.com
+per-file * = ccross@android.com,dwillemsen@google.com,nanzhang@google.com
+per-file ndk_*.go, *gen_stub_libs.py = danalbert@google.com
+per-file clang.go,global.go,tidy.go = srhines@google.com, chh@google.com
diff --git a/cc/builder.go b/cc/builder.go
index 51d3195..5a77d3e 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -150,10 +150,12 @@
 		},
 		"crossCompile")
 
+	_ = pctx.SourcePathVariable("tidyPath", "build/soong/scripts/clang-tidy.sh")
+
 	clangTidy = pctx.AndroidStaticRule("clangTidy",
 		blueprint.RuleParams{
-			Command:     "rm -f $out && ${config.ClangBin}/clang-tidy $tidyFlags $in -- $cFlags && touch $out",
-			CommandDeps: []string{"${config.ClangBin}/clang-tidy"},
+			Command:     "rm -f $out && CLANG_TIDY=${config.ClangBin}/clang-tidy $tidyPath $tidyFlags $in -- $cFlags && touch $out",
+			CommandDeps: []string{"${config.ClangBin}/clang-tidy", "$tidyPath"},
 		},
 		"cFlags", "tidyFlags")
 
diff --git a/cc/config/tidy.go b/cc/config/tidy.go
index 3d1a0a0..67f92a2 100644
--- a/cc/config/tidy.go
+++ b/cc/config/tidy.go
@@ -19,18 +19,6 @@
 	"strings"
 )
 
-// clang-tidy doesn't recognize every flag that clang does. This is unlikely to
-// be a complete list, but we can populate this with the ones we know to avoid
-// issues with clang-diagnostic-unused-command-line-argument.
-// b/111885396: -flto affected header include directory;
-// -fsanitize and -fwhole-program-vtables need -flto.
-var ClangTidyUnknownCflags = sorted([]string{
-	"-Wa,%",
-	"-flto",
-	"-fsanitize=%",
-	"-fwhole-program-vtables",
-})
-
 func init() {
 	// Most Android source files are not clang-tidy clean yet.
 	// Global tidy checks include only google*, performance*,
@@ -42,6 +30,7 @@
 		}
 		return strings.Join([]string{
 			"-*",
+			"clang-diagnostic-unused-command-line-argument",
 			"google*",
 			"misc-macro-parentheses",
 			"performance*",
@@ -58,6 +47,7 @@
 		}
 		return strings.Join([]string{
 			"-*",
+			"clang-diagnostic-unused-command-line-argument",
 			"google*",
 			"-google-build-using-namespace",
 			"-google-default-arguments",
diff --git a/cc/makevars.go b/cc/makevars.go
index 072821c..c3ff4ce 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -75,7 +75,6 @@
 	ctx.Strict("LLVM_OBJCOPY", "${config.ClangBin}/llvm-objcopy")
 	ctx.Strict("LLVM_STRIP", "${config.ClangBin}/llvm-strip")
 	ctx.Strict("PATH_TO_CLANG_TIDY", "${config.ClangBin}/clang-tidy")
-	ctx.Strict("CLANG_TIDY_UNKNOWN_CFLAGS", strings.Join(config.ClangTidyUnknownCflags, " "))
 	ctx.StrictSorted("CLANG_CONFIG_UNKNOWN_CFLAGS", strings.Join(config.ClangUnknownCflags, " "))
 
 	ctx.Strict("RS_LLVM_PREBUILTS_VERSION", "${config.RSClangVersion}")
diff --git a/scripts/clang-tidy.sh b/scripts/clang-tidy.sh
new file mode 100755
index 0000000..04d0bdd
--- /dev/null
+++ b/scripts/clang-tidy.sh
@@ -0,0 +1,37 @@
+#!/bin/bash -e
+
+# Copyright 2018 Google Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Wrapper script to remove clang compiler flags rejected by clang-tidy.
+# Inputs:
+#  Environment:
+#   CLANG_TIDY: path to the real clang-tidy program
+
+# clang-tidy doesn't recognize every flag that clang compiler does.
+# It gives clang-diagnostic-unused-command-line-argument warnings
+# to -Wa,* flags.
+# The -flto flags caused clang-tidy to ignore the -I flags,
+# see https://bugs.llvm.org/show_bug.cgi?id=38332.
+# -fsanitize and -fwhole-program-vtables need -flto.
+args=("${@}")
+n=${#args[@]}
+for ((i=0; i<$n; ++i)); do
+  case ${args[i]} in
+    -Wa,*|-flto|-flto=*|-fsanitize=*|-fsanitize-*|-fwhole-program-vtables)
+      unset args[i]
+      ;;
+  esac
+done
+${CLANG_TIDY} "${args[@]}"