diff options
author | Andreas Gampe <agampe@google.com> | 2014-05-29 02:09:33 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-06-04 08:00:30 -0700 |
commit | 5ca4eaace8ba513f97309bbdc2e156de4b1d648a (patch) | |
tree | 3a392eb39fda9b6f6e46e05e529c85e18296bc49 | |
parent | fa5fda3ca52678b6fa739aad46e5c6ea08ae301e (diff) | |
download | art-5ca4eaace8ba513f97309bbdc2e156de4b1d648a.zip art-5ca4eaace8ba513f97309bbdc2e156de4b1d648a.tar.gz art-5ca4eaace8ba513f97309bbdc2e156de4b1d648a.tar.bz2 |
ART: Make LOCAL_CLANG architecture dependent for the target
Be selective for which target we compile with Clang. Currently we
only want to compile with Clang for ARM64, which means we need to
be careful about ARM, which is the second architecture for that.
Bug: 15014252
(cherry picked from commit 9689e3768621130b2536564f4e00fcb6b3d25df4)
Change-Id: I312e1caea08f2f3a20304b27f979d3c7b72b0a04
-rw-r--r-- | build/Android.common.mk | 58 | ||||
-rw-r--r-- | build/Android.executable.mk | 10 | ||||
-rw-r--r-- | build/Android.gtest.mk | 7 | ||||
-rw-r--r-- | build/Android.libarttest.mk | 5 | ||||
-rw-r--r-- | compiler/Android.mk | 27 | ||||
-rw-r--r-- | disassembler/Android.mk | 19 | ||||
-rw-r--r-- | runtime/Android.mk | 48 |
7 files changed, 89 insertions, 85 deletions
diff --git a/build/Android.common.mk b/build/Android.common.mk index 83c536f..d65f11a 100644 --- a/build/Android.common.mk +++ b/build/Android.common.mk @@ -119,18 +119,29 @@ ifeq ($(ART_USE_PORTABLE_COMPILER),true) endif # Clang build support. -# Target builds use GCC by default. -ART_TARGET_CLANG := false + +# Host. ART_HOST_CLANG := false ifneq ($(WITHOUT_HOST_CLANG),true) # By default, host builds use clang for better warnings. ART_HOST_CLANG := true endif -# enable ART_TARGET_CLANG for ARM64 -ifneq (,$(filter $(TARGET_ARCH),arm64)) -ART_TARGET_CLANG := true -endif +# Clang on the target: only enabled for ARM64. Target builds use GCC by default. +ART_TARGET_CLANG := +ART_TARGET_CLANG_arm := +ART_TARGET_CLANG_arm64 := true +ART_TARGET_CLANG_mips := +ART_TARGET_CLANG_x86 := +ART_TARGET_CLANG_x86_64 := + +define set-target-local-clang-vars + LOCAL_CLANG := $(ART_TARGET_CLANG) + $(foreach arch,$(ART_SUPPORTED_ARCH), + ifneq ($$(ART_TARGET_CLANG_$(arch)),) + LOCAL_CLANG_$(arch) := $$(ART_TARGET_CLANG_$(arch)) + endif) +endef # directory used for dalvik-cache on device ART_DALVIK_CACHE_DIR := /data/dalvik-cache @@ -190,13 +201,18 @@ art_cflags := \ -Wstrict-aliasing \ -fstrict-aliasing +ART_TARGET_CLANG_CFLAGS := +ART_TARGET_CLANG_CFLAGS_arm := +ART_TARGET_CLANG_CFLAGS_arm64 := +ART_TARGET_CLANG_CFLAGS_mips := +ART_TARGET_CLANG_CFLAGS_x86 := +ART_TARGET_CLANG_CFLAGS_x86_64 := + # these are necessary for Clang ARM64 ART builds -ifeq ($(ART_TARGET_CLANG), true) -art_cflags += \ +ART_TARGET_CLANG_CFLAGS_arm64 += \ -Wno-implicit-exception-spec-mismatch \ -DNVALGRIND \ -Wno-unused-value -endif ifeq ($(ART_SMALL_MODE),true) art_cflags += -DART_SMALL_MODE=1 @@ -215,10 +231,8 @@ art_non_debug_cflags := \ -O3 # FIXME: upstream LLVM has a vectorizer bug that needs to be fixed -ifeq ($(ART_TARGET_CLANG),true) -art_non_debug_cflags += \ - -fno-vectorize -endif +ART_TARGET_CLANG_CFLAGS_arm64 += \ + -fno-vectorize art_debug_cflags := \ -O1 \ @@ -296,6 +310,24 @@ endif ART_TARGET_DEBUG_CFLAGS := $(art_debug_cflags) +# $(1): ndebug_or_debug +define set-target-local-cflags-vars + LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) + LOCAL_CFLAGS_x86 += $(ART_TARGET_CFLAGS_x86) + art_target_cflags_ndebug_or_debug := $(1) + ifeq ($$(art_target_cflags_ndebug_or_debug),debug) + LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS) + else + LOCAL_CFLAGS += $(ART_TARGET_NON_DEBUG_CFLAGS) + endif + + # TODO: Also set when ART_TARGET_CLANG_$(arch)!=false and ART_TARGET_CLANG==true + $(foreach arch,$(ART_SUPPORTED_ARCH), + ifeq ($$(ART_TARGET_CLANG_$(arch)),true) + LOCAL_CFLAGS_$(arch) += $$(ART_TARGET_CLANG_CFLAGS_$(arch)) + endif) +endef + ART_BUILD_TARGET := false ART_BUILD_HOST := false ART_BUILD_NDEBUG := false diff --git a/build/Android.executable.mk b/build/Android.executable.mk index a186e85..49e7384 100644 --- a/build/Android.executable.mk +++ b/build/Android.executable.mk @@ -66,14 +66,8 @@ define build-art-executable LOCAL_CFLAGS := $(ART_EXECUTABLES_CFLAGS) ifeq ($$(art_target_or_host),target) - LOCAL_CLANG := $(ART_TARGET_CLANG) - LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) - LOCAL_CFLAGS_x86 += $(ART_TARGET_CFLAGS_x86) - ifeq ($$(art_ndebug_or_debug),debug) - LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS) - else - LOCAL_CFLAGS += $(ART_TARGET_NON_DEBUG_CFLAGS) - endif + $(call set-target-local-clang-vars) + $(call set-target-local-cflags-vars,$(6)) else # host LOCAL_CLANG := $(ART_HOST_CLANG) LOCAL_CFLAGS += $(ART_HOST_CFLAGS) diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk index 9f1d0f1..314d672 100644 --- a/build/Android.gtest.mk +++ b/build/Android.gtest.mk @@ -187,16 +187,15 @@ define build-art-test LOCAL_CFLAGS := $(ART_TEST_CFLAGS) include external/libcxx/libcxx.mk ifeq ($$(art_target_or_host),target) - LOCAL_CLANG := $(ART_TARGET_CLANG) - LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) $(ART_TARGET_DEBUG_CFLAGS) - LOCAL_CFLAGS_x86 := $(ART_TARGET_CFLAGS_x86) + $(call set-target-local-clang-vars) + $(call set-target-local-cflags-vars,debug) LOCAL_SHARED_LIBRARIES += libdl libicuuc libicui18n libnativehelper libz libcutils libvixl LOCAL_STATIC_LIBRARIES += libgtest_libc++ LOCAL_MODULE_PATH_32 := $(ART_NATIVETEST_OUT)/$(ART_TARGET_ARCH_32) LOCAL_MODULE_PATH_64 := $(ART_NATIVETEST_OUT)/$(ART_TARGET_ARCH_64) LOCAL_MULTILIB := both include $(BUILD_EXECUTABLE) - + ART_TARGET_GTEST_EXECUTABLES$(ART_PHONY_TEST_TARGET_SUFFIX) += $(ART_NATIVETEST_OUT)/$(TARGET_ARCH)/$$(LOCAL_MODULE) art_gtest_target := test-art-$$(art_target_or_host)-gtest-$$(art_gtest_name) diff --git a/build/Android.libarttest.mk b/build/Android.libarttest.mk index c080928..b4c99b5 100644 --- a/build/Android.libarttest.mk +++ b/build/Android.libarttest.mk @@ -49,9 +49,8 @@ define build-libarttest LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.libarttest.mk include external/libcxx/libcxx.mk ifeq ($$(art_target_or_host),target) - LOCAL_CLANG := $(ART_TARGET_CLANG) - LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) $(ART_TARGET_DEBUG_CFLAGS) - LOCAL_CFLAGS_x86 := $(ART_TARGET_CFLAGS_x86) + $(call set-target-local-clang-vars) + $(call set-target-local-cflags-vars,debug) LOCAL_SHARED_LIBRARIES += libdl libcutils LOCAL_STATIC_LIBRARIES := libgtest LOCAL_MULTILIB := both diff --git a/compiler/Android.mk b/compiler/Android.mk index 3bed01d..4d42215 100644 --- a/compiler/Android.mk +++ b/compiler/Android.mk @@ -177,8 +177,10 @@ define build-libart-compiler LOCAL_CPP_EXTENSION := $(ART_CPP_EXTENSION) ifeq ($$(art_ndebug_or_debug),ndebug) LOCAL_MODULE := libart-compiler + LOCAL_SHARED_LIBRARIES += libart else # debug LOCAL_MODULE := libartd-compiler + LOCAL_SHARED_LIBRARIES += libartd endif LOCAL_MODULE_TAGS := optional @@ -200,32 +202,21 @@ $$(ENUM_OPERATOR_OUT_GEN): $$(GENERATED_SRC_DIR)/%_operator_out.cc : $(LOCAL_PAT LOCAL_CFLAGS := $$(LIBART_COMPILER_CFLAGS) include external/libcxx/libcxx.mk ifeq ($$(art_target_or_host),target) - LOCAL_CLANG := $(ART_TARGET_CLANG) - LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) + $(call set-target-local-clang-vars) + $(call set-target-local-cflags-vars,$(2)) else # host LOCAL_CLANG := $(ART_HOST_CLANG) LOCAL_CFLAGS += $(ART_HOST_CFLAGS) + ifeq ($$(art_ndebug_or_debug),debug) + LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS) + else + LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) + endif endif # TODO: clean up the compilers and remove this. LOCAL_CFLAGS += -Wno-unused-parameter - LOCAL_SHARED_LIBRARIES += liblog - ifeq ($$(art_ndebug_or_debug),debug) - ifeq ($$(art_target_or_host),target) - LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS) - else # host - LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS) - endif - LOCAL_SHARED_LIBRARIES += libartd - else - ifeq ($$(art_target_or_host),target) - LOCAL_CFLAGS += $(ART_TARGET_NON_DEBUG_CFLAGS) - else # host - LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) - endif - LOCAL_SHARED_LIBRARIES += libart - endif ifeq ($(ART_USE_PORTABLE_COMPILER),true) LOCAL_SHARED_LIBRARIES += libLLVM LOCAL_CFLAGS += -DART_USE_PORTABLE_COMPILER=1 diff --git a/disassembler/Android.mk b/disassembler/Android.mk index 814323c..b4b194d 100644 --- a/disassembler/Android.mk +++ b/disassembler/Android.mk @@ -59,27 +59,22 @@ define build-libart-disassembler LOCAL_SRC_FILES := $$(LIBART_DISASSEMBLER_SRC_FILES) ifeq ($$(art_target_or_host),target) - LOCAL_CLANG := $(ART_TARGET_CLANG) - LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) + $(call set-target-local-clang-vars) + $(call set-target-local-cflags-vars,$(2)) else # host LOCAL_CLANG := $(ART_HOST_CLANG) LOCAL_CFLAGS += $(ART_HOST_CFLAGS) + ifeq ($$(art_ndebug_or_debug),debug) + LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS) + else + LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) + endif endif LOCAL_SHARED_LIBRARIES += liblog ifeq ($$(art_ndebug_or_debug),debug) - ifeq ($$(art_target_or_host),target) - LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS) - else # host - LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS) - endif LOCAL_SHARED_LIBRARIES += libartd else - ifeq ($$(art_target_or_host),target) - LOCAL_CFLAGS += $(ART_TARGET_NON_DEBUG_CFLAGS) - else # host - LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) - endif LOCAL_SHARED_LIBRARIES += libart endif diff --git a/runtime/Android.mk b/runtime/Android.mk index 17f0493..7a832c1 100644 --- a/runtime/Android.mk +++ b/runtime/Android.mk @@ -314,7 +314,6 @@ endif # $(1): target or host # $(2): ndebug or debug -# $(3): true or false for LOCAL_CLANG define build-libart ifneq ($(1),target) ifneq ($(1),host) @@ -326,15 +325,9 @@ define build-libart $$(error expected ndebug or debug for argument 2, received $(2)) endif endif - ifneq ($(3),true) - ifneq ($(3),false) - $$(error expected true or false for argument 3, received $(3)) - endif - endif art_target_or_host := $(1) art_ndebug_or_debug := $(2) - art_clang := $(3) include $(CLEAR_VARS) LOCAL_CPP_EXTENSION := $(ART_CPP_EXTENSION) @@ -374,31 +367,32 @@ $$(ENUM_OPERATOR_OUT_GEN): $$(GENERATED_SRC_DIR)/%_operator_out.cc : $(LOCAL_PAT $(foreach arch,$(ART_SUPPORTED_ARCH), LOCAL_LDFLAGS_$(arch) := $$(LIBART_TARGET_LDFLAGS_$(arch))) - ifeq ($$(art_clang),false) - LOCAL_SRC_FILES += $(LIBART_GCC_ONLY_SRC_FILES) - else - LOCAL_CLANG := true - endif + # Clang usage ifeq ($$(art_target_or_host),target) - LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) + $(call set-target-local-clang-vars) + $(call set-target-local-cflags-vars,$(2)) + # TODO: Loop with ifeq, ART_TARGET_CLANG + ifneq ($$(ART_TARGET_CLANG_$(TARGET_ARCH)),true) + LOCAL_SRC_FILES_$(TARGET_ARCH) += $(LIBART_GCC_ONLY_SRC_FILES) + endif + ifneq ($$(ART_TARGET_CLANG_$(TARGET_2ND_ARCH)),true) + LOCAL_SRC_FILES_$(TARGET_2ND_ARCH) += $(LIBART_GCC_ONLY_SRC_FILES) + endif else # host + LOCAL_CLANG := $(ART_HOST_CLANG) + ifeq ($(ART_HOST_CLANG),false) + LOCAL_SRC_FILES += $(LIBART_GCC_ONLY_SRC_FILES) + endif LOCAL_CFLAGS += $(ART_HOST_CFLAGS) - endif - ifeq ($$(art_ndebug_or_debug),debug) - ifeq ($$(art_target_or_host),target) - LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS) - else # host + ifeq ($$(art_ndebug_or_debug),debug) LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS) LOCAL_LDLIBS += $(ART_HOST_DEBUG_LDLIBS) LOCAL_STATIC_LIBRARIES := libgtest_host - endif - else - ifeq ($$(art_target_or_host),target) - LOCAL_CFLAGS += $(ART_TARGET_NON_DEBUG_CFLAGS) - else # host + else LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) endif endif + LOCAL_C_INCLUDES += $(ART_C_INCLUDES) LOCAL_C_INCLUDES += art/sigchainlib @@ -446,17 +440,17 @@ endef # they are used to cross compile for the target. ifeq ($(WITH_HOST_DALVIK),true) ifeq ($(ART_BUILD_NDEBUG),true) - $(eval $(call build-libart,host,ndebug,$(ART_HOST_CLANG))) + $(eval $(call build-libart,host,ndebug)) endif ifeq ($(ART_BUILD_DEBUG),true) - $(eval $(call build-libart,host,debug,$(ART_HOST_CLANG))) + $(eval $(call build-libart,host,debug)) endif endif ifeq ($(ART_BUILD_TARGET_NDEBUG),true) - $(eval $(call build-libart,target,ndebug,$(ART_TARGET_CLANG))) + $(eval $(call build-libart,target,ndebug)) endif ifeq ($(ART_BUILD_TARGET_DEBUG),true) - $(eval $(call build-libart,target,debug,$(ART_TARGET_CLANG))) + $(eval $(call build-libart,target,debug)) endif |