blob: 60e06417355f67401459bdaa8883c3ab3e828966 [file] [log] [blame]
Ying Wangba8b3772014-03-10 18:23:08 -07001## Clang configurations.
2
Dan Albert8b1d1772015-11-13 23:06:07 -08003LLVM_PREBUILTS_PATH := $(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-x86/$(LLVM_PREBUILTS_VERSION)/bin
Stephen Hinescdb52b52016-02-04 11:43:41 -08004LLVM_RTLIB_PATH := $(LLVM_PREBUILTS_PATH)/../lib64/clang/$(LLVM_RELEASE_VERSION)/lib/linux/
Ying Wang1f982832014-02-06 18:08:44 -08005
Dan Willemsen6e22c752016-06-06 12:21:06 -07006# These will come from Soong, drop the environment versions
7unexport CLANG
8unexport CLANG_CXX
9unexport CCC_CC
10unexport CCC_CXX
11
Stephen Hinesb34b7ae2014-09-30 02:37:20 -070012CLANG_TBLGEN := $(BUILD_OUT_EXECUTABLES)/clang-tblgen$(BUILD_EXECUTABLE_SUFFIX)
13LLVM_TBLGEN := $(BUILD_OUT_EXECUTABLES)/llvm-tblgen$(BUILD_EXECUTABLE_SUFFIX)
Stephen Hines7bc754b2014-02-19 09:03:00 -080014
Stephen Hines96d2a8c2016-01-21 23:50:53 -080015# RenderScript-specific tools
16# These are tied to the version of LLVM directly in external/, so they might
17# trail the host prebuilts being used for the rest of the build process.
Pirama Arumuga Nainar08df2402016-07-26 11:37:14 -070018RS_LLVM_PREBUILTS_VERSION := clang-3289846
Stephen Hines96d2a8c2016-01-21 23:50:53 -080019RS_LLVM_PREBUILTS_BASE := prebuilts/clang/host
20RS_LLVM_PREBUILTS_PATH := $(RS_LLVM_PREBUILTS_BASE)/$(BUILD_OS)-x86/$(RS_LLVM_PREBUILTS_VERSION)/bin
Stephen Hines49b69532016-01-22 15:11:34 -080021RS_CLANG := $(RS_LLVM_PREBUILTS_PATH)/clang$(BUILD_EXECUTABLE_SUFFIX)
Stephen Hines96d2a8c2016-01-21 23:50:53 -080022RS_LLVM_AS := $(RS_LLVM_PREBUILTS_PATH)/llvm-as$(BUILD_EXECUTABLE_SUFFIX)
23RS_LLVM_LINK := $(RS_LLVM_PREBUILTS_PATH)/llvm-link$(BUILD_EXECUTABLE_SUFFIX)
24
Dan Willemsen02268f02016-05-19 14:39:25 -070025define convert-to-clang-flags
26$(strip $(filter-out $(CLANG_CONFIG_UNKNOWN_CFLAGS),$(1)))
27endef
Ying Wang1f982832014-02-06 18:08:44 -080028
Dan Albertb5b2ffe2015-04-16 18:07:07 -070029CLANG_DEFAULT_UB_CHECKS := \
30 bool \
31 integer-divide-by-zero \
32 return \
33 returns-nonnull-attribute \
34 shift-exponent \
35 unreachable \
36 vla-bound \
37
38# TODO(danalbert): The following checks currently have compiler performance
39# issues.
40# CLANG_DEFAULT_UB_CHECKS += alignment
41# CLANG_DEFAULT_UB_CHECKS += bounds
42# CLANG_DEFAULT_UB_CHECKS += enum
43# CLANG_DEFAULT_UB_CHECKS += float-cast-overflow
44# CLANG_DEFAULT_UB_CHECKS += float-divide-by-zero
45# CLANG_DEFAULT_UB_CHECKS += nonnull-attribute
46# CLANG_DEFAULT_UB_CHECKS += null
47# CLANG_DEFAULT_UB_CHECKS += shift-base
48# CLANG_DEFAULT_UB_CHECKS += signed-integer-overflow
49
50# TODO(danalbert): Fix UB in libc++'s __tree so we can turn this on.
51# https://llvm.org/PR19302
52# http://reviews.llvm.org/D6974
53# CLANG_DEFAULT_UB_CHECKS += object-size
54
Ying Wang1f982832014-02-06 18:08:44 -080055# HOST config
Ying Wang6feb6d52014-04-17 10:03:35 -070056clang_2nd_arch_prefix :=
Ying Wang1f982832014-02-06 18:08:44 -080057include $(BUILD_SYSTEM)/clang/HOST_$(HOST_ARCH).mk
Ying Wang6feb6d52014-04-17 10:03:35 -070058
59# HOST_2ND_ARCH config
60ifdef HOST_2ND_ARCH
61clang_2nd_arch_prefix := $(HOST_2ND_ARCH_VAR_PREFIX)
62include $(BUILD_SYSTEM)/clang/HOST_$(HOST_2ND_ARCH).mk
Tim Murray02cefc92014-03-20 13:48:35 -070063endif
Ying Wang1f982832014-02-06 18:08:44 -080064
Dan Willemsen9ecbf832016-02-05 16:20:19 -080065ifdef HOST_CROSS_ARCH
66clang_2nd_arch_prefix :=
67include $(BUILD_SYSTEM)/clang/HOST_CROSS_$(HOST_CROSS_ARCH).mk
68ifdef HOST_CROSS_2ND_ARCH
69clang_2nd_arch_prefix := $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)
70include $(BUILD_SYSTEM)/clang/HOST_CROSS_$(HOST_CROSS_2ND_ARCH).mk
71endif
Dan Willemsen057aaea2015-08-14 12:59:50 -070072endif
73
Ying Wang1f982832014-02-06 18:08:44 -080074# TARGET config
75clang_2nd_arch_prefix :=
76include $(BUILD_SYSTEM)/clang/TARGET_$(TARGET_ARCH).mk
77
78# TARGET_2ND_ARCH config
79ifdef TARGET_2ND_ARCH
80clang_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
81include $(BUILD_SYSTEM)/clang/TARGET_$(TARGET_2ND_ARCH).mk
82endif
83
Ying Wang1f982832014-02-06 18:08:44 -080084# This allows us to use the superset of functionality that compiler-rt
85# provides to Clang (for supporting features like -ftrapv).
86COMPILER_RT_CONFIG_EXTRA_STATIC_LIBRARIES := libcompiler_rt-extras
Ying Wange5d4e742014-11-06 14:11:33 -080087
Chih-Hung Hsiehd9cd1fa2016-08-02 14:22:06 -070088# A list of projects that are allowed to set LOCAL_CLANG to false.
Chih-Hung Hsieh3ea1e512016-08-03 11:39:02 -070089# INTERNAL_LOCAL_CLANG_EXCEPTION_PROJECTS is defined later in other config.mk.
90LOCAL_CLANG_EXCEPTION_PROJECTS = \
Chih-Hung Hsieh82c78c52016-08-03 10:42:10 -070091 bionic/tests/ \
Chih-Hung Hsiehd9cd1fa2016-08-02 14:22:06 -070092 device/huawei/angler/ \
93 device/lge/bullhead/ \
Chih-Hung Hsieh2ee4c1a2016-08-04 15:35:51 -070094 external/gentoo/integration/ \
Chih-Hung Hsiehd9cd1fa2016-08-02 14:22:06 -070095 hardware/qcom/ \
96 $(INTERNAL_LOCAL_CLANG_EXCEPTION_PROJECTS)
97
98# Find $1 in the exception project list.
99define find_in_local_clang_exception_projects
100$(subst $(space),, \
101 $(foreach project,$(LOCAL_CLANG_EXCEPTION_PROJECTS), \
102 $(if $(filter $(project)%,$(1)),$(project)) \
103 ) \
104)
105endef
106
Chih-Hung Hsieh460171a2016-04-21 15:37:24 -0700107include $(BUILD_SYSTEM)/clang/tidy.mk