Issue warning on projects with LOCAL_CLANG set to false.

* LOCAL_CLANG_EXCEPTION_PROJECTS is the list of project prefixes.
* New warning message is detected by warn.py as high severity.

Bug: 30575506
Change-Id: I87a38b2ba6bab1d2e5e7a9d5ec9557f0e609727c
Test: build and find new warning in build.log
diff --git a/core/binary.mk b/core/binary.mk
index 4554d4d..10d447b 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -265,6 +265,13 @@
 ifdef LOCAL_CLANG_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)
 my_clang := $(strip $(LOCAL_CLANG_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)))
 endif
+# Issue warning if LOCAL_CLANG* is set to false and the local makefile is not found
+# in the exception project list.
+ifeq ($(my_clang),false)
+    ifeq ($(call find_in_local_clang_exception_projects,$(LOCAL_MODULE_MAKEFILE)),)
+        $(warning $(LOCAL_MODULE_MAKEFILE): $(LOCAL_MODULE): warning: LOCAL_CLANG is set to false)
+    endif
+endif
 
 # clang is enabled by default for host builds
 # enable it unless we've specifically disabled clang above
diff --git a/core/clang/config.mk b/core/clang/config.mk
index 4685514..e47c36a 100644
--- a/core/clang/config.mk
+++ b/core/clang/config.mk
@@ -143,4 +143,21 @@
 FORCE_BUILD_LLVM_COMPONENTS := true
 endif
 
+# A list of projects that are allowed to set LOCAL_CLANG to false.
+LOCAL_CLANG_EXCEPTION_PROJECTS := \
+  device/huawei/angler/ \
+  device/lge/bullhead/ \
+  external/valgrind/ \
+  hardware/qcom/ \
+  $(INTERNAL_LOCAL_CLANG_EXCEPTION_PROJECTS)
+
+# Find $1 in the exception project list.
+define find_in_local_clang_exception_projects
+$(subst $(space),, \
+  $(foreach project,$(LOCAL_CLANG_EXCEPTION_PROJECTS), \
+    $(if $(filter $(project)%,$(1)),$(project)) \
+  ) \
+)
+endef
+
 include $(BUILD_SYSTEM)/clang/tidy.mk