Add external projects only CFlags option

Every time the toolchain adds a new warning, we had to suppress the
warning in every external projects that violates it, or disable it
globally -- which we end up doing most of the time since the first
option is way too time consuming.

Add a separate cflags option for external projects and move existing
-Wno-* flags there so that we can enforce better code quality for
internal projects.

TODO: Move more -Wno-* flags to ClangExtraExternalCflags

Test: m checkbuild
Change-Id: If3dee491616a1e7ba6223c2f522d100e10c5ee76
diff --git a/cc/compiler.go b/cc/compiler.go
index 8f119cf..10cec8c 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -392,6 +392,12 @@
 			fmt.Sprintf("${config.%sGlobalCflags}", hod))
 	}
 
+	if flags.Clang {
+		if strings.HasPrefix(android.PathForModuleSrc(ctx).String(), "external/") {
+			flags.GlobalFlags = append([]string{"${config.ClangExternalCflags}"}, flags.GlobalFlags...)
+		}
+	}
+
 	if ctx.Device() {
 		if Bool(compiler.Properties.Rtti) {
 			flags.CppFlags = append(flags.CppFlags, "-frtti")
diff --git a/cc/config/clang.go b/cc/config/clang.go
index ba1cd3c..69668b6 100644
--- a/cc/config/clang.go
+++ b/cc/config/clang.go
@@ -173,14 +173,17 @@
 		// this new warning are fixed.
 		"-Wno-null-pointer-arithmetic",
 
+		// Disable c++98-specific warning since Android is not concerned with C++98
+		// compatibility.
+		"-Wno-c++98-compat-extra-semi",
+	}, " "))
+
+	// Extra cflags for projects under external/ directory
+	pctx.StaticVariable("ClangExtraExternalCflags", strings.Join([]string{
 		// http://b/72330874 Disable -Wenum-compare until the instances detected by this new
 		// warning are fixed.
 		"-Wno-enum-compare",
 		"-Wno-enum-compare-switch",
-
-		// Disable c++98-specific warning since Android is not concerned with C++98
-		// compatibility.
-		"-Wno-c++98-compat-extra-semi",
 	}, " "))
 }
 
diff --git a/cc/config/global.go b/cc/config/global.go
index 06f6f9a..c734c2e 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -170,6 +170,8 @@
 	pctx.StaticVariable("CommonClangGlobalCppflags",
 		strings.Join(append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"), " "))
 
+	pctx.StaticVariable("ClangExternalCflags", "${ClangExtraExternalCflags}")
+
 	// Everything in these lists is a crime against abstraction and dependency tracking.
 	// Do not add anything to this list.
 	pctx.PrefixedExistentPathsForSourcesVariable("CommonGlobalIncludes", "-I",