Android.common_build.mk revision 235e77bd9f19e4faefda109be40f8744f3a66f40
1# 2# Copyright (C) 2011 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17ifndef ANDROID_COMMON_BUILD_MK 18ANDROID_COMMON_BUILD_MK = true 19 20include art/build/Android.common.mk 21 22# These can be overridden via the environment or by editing to 23# enable/disable certain build configuration. 24# 25# For example, to disable everything but the host debug build you use: 26# 27# (export ART_BUILD_TARGET_NDEBUG=false && export ART_BUILD_TARGET_DEBUG=false && export ART_BUILD_HOST_NDEBUG=false && ...) 28# 29# Beware that tests may use the non-debug build for performance, notable 055-enum-performance 30# 31ART_BUILD_TARGET_NDEBUG ?= true 32ART_BUILD_TARGET_DEBUG ?= true 33ART_BUILD_HOST_NDEBUG ?= true 34ART_BUILD_HOST_DEBUG ?= true 35 36ifeq ($(ART_BUILD_TARGET_NDEBUG),false) 37$(info Disabling ART_BUILD_TARGET_NDEBUG) 38endif 39ifeq ($(ART_BUILD_TARGET_DEBUG),false) 40$(info Disabling ART_BUILD_TARGET_DEBUG) 41endif 42ifeq ($(ART_BUILD_HOST_NDEBUG),false) 43$(info Disabling ART_BUILD_HOST_NDEBUG) 44endif 45ifeq ($(ART_BUILD_HOST_DEBUG),false) 46$(info Disabling ART_BUILD_HOST_DEBUG) 47endif 48 49# 50# Used to enable smart mode 51# 52ART_SMALL_MODE := false 53ifneq ($(wildcard art/SMALL_ART),) 54$(info Enabling ART_SMALL_MODE because of existence of art/SMALL_ART) 55ART_SMALL_MODE := true 56endif 57ifeq ($(WITH_ART_SMALL_MODE), true) 58ART_SMALL_MODE := true 59endif 60 61# 62# Used to enable SEA mode 63# 64ART_SEA_IR_MODE := false 65ifneq ($(wildcard art/SEA_IR_ART),) 66$(info Enabling ART_SEA_IR_MODE because of existence of art/SEA_IR_ART) 67ART_SEA_IR_MODE := true 68endif 69ifeq ($(WITH_ART_SEA_IR_MODE), true) 70ART_SEA_IR_MODE := true 71endif 72 73# 74# Used to enable portable mode 75# 76ART_USE_PORTABLE_COMPILER := false 77ifneq ($(wildcard art/USE_PORTABLE_COMPILER),) 78$(info Enabling ART_USE_PORTABLE_COMPILER because of existence of art/USE_PORTABLE_COMPILER) 79ART_USE_PORTABLE_COMPILER := true 80endif 81ifeq ($(WITH_ART_USE_PORTABLE_COMPILER),true) 82$(info Enabling ART_USE_PORTABLE_COMPILER because WITH_ART_USE_PORTABLE_COMPILER=true) 83ART_USE_PORTABLE_COMPILER := true 84endif 85 86# 87# Used to enable optimizing compiler 88# 89ART_USE_OPTIMIZING_COMPILER := false 90ifneq ($(wildcard art/USE_OPTIMIZING_COMPILER),) 91$(info Enabling ART_USE_OPTIMIZING_COMPILER because of existence of art/USE_OPTIMIZING_COMPILER) 92ART_USE_OPTIMIZING_COMPILER := true 93endif 94ifeq ($(WITH_ART_USE_OPTIMIZING_COMPILER), true) 95ART_USE_OPTIMIZING_COMPILER := true 96endif 97 98ifeq ($(ART_USE_OPTIMIZING_COMPILER),true) 99DEX2OAT_FLAGS := --compiler-backend=Optimizing 100DALVIKVM_FLAGS += -Xcompiler-option --compiler-backend=Optimizing 101endif 102 103# 104# Used to change the default GC. Valid values are CMS, SS, GSS. The default is CMS. 105# 106ART_DEFAULT_GC_TYPE ?= CMS 107ART_DEFAULT_GC_TYPE_CFLAGS := -DART_DEFAULT_GC_TYPE_IS_$(ART_DEFAULT_GC_TYPE) 108 109ifeq ($(ART_USE_PORTABLE_COMPILER),true) 110 LLVM_ROOT_PATH := external/llvm 111 # Don't fail a dalvik minimal host build. 112 -include $(LLVM_ROOT_PATH)/llvm.mk 113endif 114 115# Clang build support. 116 117# Host. 118ART_HOST_CLANG := false 119ifneq ($(WITHOUT_HOST_CLANG),true) 120 # By default, host builds use clang for better warnings. 121 ART_HOST_CLANG := true 122endif 123 124# Clang on the target. Target builds use GCC by default. 125ART_TARGET_CLANG := 126ART_TARGET_CLANG_arm := 127ART_TARGET_CLANG_arm64 := 128ART_TARGET_CLANG_mips := 129ART_TARGET_CLANG_x86 := 130ART_TARGET_CLANG_x86_64 := 131 132define set-target-local-clang-vars 133 LOCAL_CLANG := $(ART_TARGET_CLANG) 134 $(foreach arch,$(ART_TARGET_SUPPORTED_ARCH), 135 ifneq ($$(ART_TARGET_CLANG_$(arch)),) 136 LOCAL_CLANG_$(arch) := $$(ART_TARGET_CLANG_$(arch)) 137 endif) 138endef 139 140ART_CPP_EXTENSION := .cc 141 142ART_C_INCLUDES := \ 143 external/gtest/include \ 144 external/valgrind/main/include \ 145 external/valgrind/main \ 146 external/vixl/src \ 147 external/zlib \ 148 frameworks/compile/mclinker/include 149 150art_cflags := \ 151 -fno-rtti \ 152 -std=gnu++11 \ 153 -ggdb3 \ 154 -Wall \ 155 -Werror \ 156 -Wextra \ 157 -Wno-sign-promo \ 158 -Wno-unused-parameter \ 159 -Wstrict-aliasing \ 160 -fstrict-aliasing \ 161 -fvisibility=protected 162 163ART_TARGET_CLANG_CFLAGS := 164ART_TARGET_CLANG_CFLAGS_arm := 165ART_TARGET_CLANG_CFLAGS_arm64 := 166ART_TARGET_CLANG_CFLAGS_mips := 167ART_TARGET_CLANG_CFLAGS_x86 := 168ART_TARGET_CLANG_CFLAGS_x86_64 := 169 170# these are necessary for Clang ARM64 ART builds 171ART_TARGET_CLANG_CFLAGS_arm64 += \ 172 -Wno-implicit-exception-spec-mismatch \ 173 -DNVALGRIND \ 174 -Wno-unused-value 175 176ifeq ($(ART_SMALL_MODE),true) 177 art_cflags += -DART_SMALL_MODE=1 178endif 179 180ifeq ($(ART_SEA_IR_MODE),true) 181 art_cflags += -DART_SEA_IR_MODE=1 182endif 183 184art_non_debug_cflags := \ 185 -O3 186 187art_host_non_debug_cflags := \ 188 $(art_non_debug_cflags) 189 190art_target_non_debug_cflags := \ 191 $(art_non_debug_cflags) 192 193ifeq ($(HOST_OS),linux) 194 # Larger frame-size for host clang builds today 195 art_host_non_debug_cflags += -Wframe-larger-than=2600 196 art_target_non_debug_cflags += -Wframe-larger-than=1728 197endif 198 199# FIXME: upstream LLVM has a vectorizer bug that needs to be fixed 200ART_TARGET_CLANG_CFLAGS_arm64 += \ 201 -fno-vectorize 202 203art_debug_cflags := \ 204 -O1 \ 205 -DDYNAMIC_ANNOTATIONS_ENABLED=1 \ 206 -UNDEBUG 207 208ifndef LIBART_IMG_HOST_BASE_ADDRESS 209 $(error LIBART_IMG_HOST_BASE_ADDRESS unset) 210endif 211ART_HOST_CFLAGS := $(art_cflags) -DANDROID_SMP=1 -DART_BASE_ADDRESS=$(LIBART_IMG_HOST_BASE_ADDRESS) 212ART_HOST_CFLAGS += -DART_DEFAULT_INSTRUCTION_SET_FEATURES=default 213ART_HOST_CFLAGS += $(ART_DEFAULT_GC_TYPE_CFLAGS) 214 215ifndef LIBART_IMG_TARGET_BASE_ADDRESS 216 $(error LIBART_IMG_TARGET_BASE_ADDRESS unset) 217endif 218ART_TARGET_CFLAGS := $(art_cflags) -DART_TARGET -DART_BASE_ADDRESS=$(LIBART_IMG_TARGET_BASE_ADDRESS) 219 220ifndef LIBART_IMG_HOST_MIN_BASE_ADDRESS_DELTA 221 LIBART_IMG_HOST_MIN_BASE_ADDRESS_DELTA=-0x1000000 222endif 223ifndef LIBART_IMG_HOST_MAX_BASE_ADDRESS_DELTA 224 LIBART_IMG_HOST_MAX_BASE_ADDRESS_DELTA=0x1000000 225endif 226ART_HOST_CFLAGS += -DART_BASE_ADDRESS_MIN_DELTA=$(LIBART_IMG_HOST_MIN_BASE_ADDRESS_DELTA) 227ART_HOST_CFLAGS += -DART_BASE_ADDRESS_MAX_DELTA=$(LIBART_IMG_HOST_MAX_BASE_ADDRESS_DELTA) 228 229ifndef LIBART_IMG_TARGET_MIN_BASE_ADDRESS_DELTA 230 LIBART_IMG_TARGET_MIN_BASE_ADDRESS_DELTA=-0x1000000 231endif 232ifndef LIBART_IMG_TARGET_MAX_BASE_ADDRESS_DELTA 233 LIBART_IMG_TARGET_MAX_BASE_ADDRESS_DELTA=0x1000000 234endif 235ART_TARGET_CFLAGS += -DART_BASE_ADDRESS_MIN_DELTA=$(LIBART_IMG_TARGET_MIN_BASE_ADDRESS_DELTA) 236ART_TARGET_CFLAGS += -DART_BASE_ADDRESS_MAX_DELTA=$(LIBART_IMG_TARGET_MAX_BASE_ADDRESS_DELTA) 237 238ART_TARGET_LDFLAGS := 239ifeq ($(TARGET_CPU_SMP),true) 240 ART_TARGET_CFLAGS += -DANDROID_SMP=1 241else 242 ifeq ($(TARGET_CPU_SMP),false) 243 ART_TARGET_CFLAGS += -DANDROID_SMP=0 244 else 245 $(warning TARGET_CPU_SMP should be (true|false), found $(TARGET_CPU_SMP)) 246 # Make sure we emit barriers for the worst case. 247 ART_TARGET_CFLAGS += -DANDROID_SMP=1 248 endif 249endif 250ART_TARGET_CFLAGS += $(ART_DEFAULT_GC_TYPE_CFLAGS) 251 252# DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES is set in ../build/core/dex_preopt.mk based on 253# the TARGET_CPU_VARIANT 254ifeq ($(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES),) 255$(error Required DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES is not set) 256endif 257ART_TARGET_CFLAGS += -DART_DEFAULT_INSTRUCTION_SET_FEATURES=$(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) 258 259# Enable thread-safety for GCC 4.6, and clang, but not for GCC 4.7 or later where this feature was 260# removed. Warn when -Wthread-safety is not used. 261ifneq ($(filter 4.6 4.6.%, $(TARGET_GCC_VERSION)),) 262 ART_TARGET_CFLAGS += -Wthread-safety 263else 264 # FIXME: add -Wthread-safety when the problem is fixed 265 ifeq ($(ART_TARGET_CLANG),true) 266 ART_TARGET_CFLAGS += 267 else 268 # Warn if -Wthread-safety is not supported and not doing a top-level or 'mma' build. 269 ifneq ($(ONE_SHOT_MAKEFILE),) 270 # Enable target GCC 4.6 with: export TARGET_GCC_VERSION_EXP=4.6 271 $(info Using target GCC $(TARGET_GCC_VERSION) disables thread-safety checks.) 272 endif 273 endif 274endif 275# We compile with GCC 4.6 or clang on the host, both of which support -Wthread-safety. 276ART_HOST_CFLAGS += -Wthread-safety 277 278# To use oprofile_android --callgraph, uncomment this and recompile with "mmm art -B -j16" 279# ART_TARGET_CFLAGS += -fno-omit-frame-pointer -marm -mapcs 280 281# Addition CPU specific CFLAGS. 282ifeq ($(TARGET_ARCH),arm) 283 ifneq ($(filter cortex-a15, $(TARGET_CPU_VARIANT)),) 284 # Fake a ARM feature for LPAE support. 285 ART_TARGET_CFLAGS += -D__ARM_FEATURE_LPAE=1 286 endif 287endif 288 289ART_HOST_NON_DEBUG_CFLAGS := $(art_host_non_debug_cflags) 290ART_TARGET_NON_DEBUG_CFLAGS := $(art_target_non_debug_cflags) 291 292# TODO: move -fkeep-inline-functions to art_debug_cflags when target gcc > 4.4 (and -lsupc++) 293ART_HOST_DEBUG_CFLAGS := $(art_debug_cflags) -fkeep-inline-functions 294ART_HOST_DEBUG_LDLIBS := -lsupc++ 295 296ifneq ($(HOST_OS),linux) 297 # Some Mac OS pthread header files are broken with -fkeep-inline-functions. 298 ART_HOST_DEBUG_CFLAGS := $(filter-out -fkeep-inline-functions,$(ART_HOST_DEBUG_CFLAGS)) 299 # Mac OS doesn't have libsupc++. 300 ART_HOST_DEBUG_LDLIBS := $(filter-out -lsupc++,$(ART_HOST_DEBUG_LDLIBS)) 301endif 302 303ART_TARGET_DEBUG_CFLAGS := $(art_debug_cflags) 304 305# $(1): ndebug_or_debug 306define set-target-local-cflags-vars 307 LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) 308 LOCAL_CFLAGS_x86 += $(ART_TARGET_CFLAGS_x86) 309 LOCAL_LDFLAGS += $(ART_TARGET_LDFLAGS) 310 art_target_cflags_ndebug_or_debug := $(1) 311 ifeq ($$(art_target_cflags_ndebug_or_debug),debug) 312 LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS) 313 else 314 LOCAL_CFLAGS += $(ART_TARGET_NON_DEBUG_CFLAGS) 315 endif 316 317 # TODO: Also set when ART_TARGET_CLANG_$(arch)!=false and ART_TARGET_CLANG==true 318 $(foreach arch,$(ART_SUPPORTED_ARCH), 319 ifeq ($$(ART_TARGET_CLANG_$(arch)),true) 320 LOCAL_CFLAGS_$(arch) += $$(ART_TARGET_CLANG_CFLAGS_$(arch)) 321 endif) 322 323 # Clear locally used variables. 324 art_target_cflags_ndebug_or_debug := 325endef 326 327ART_BUILD_TARGET := false 328ART_BUILD_HOST := false 329ART_BUILD_NDEBUG := false 330ART_BUILD_DEBUG := false 331ifeq ($(ART_BUILD_TARGET_NDEBUG),true) 332 ART_BUILD_TARGET := true 333 ART_BUILD_NDEBUG := true 334endif 335ifeq ($(ART_BUILD_TARGET_DEBUG),true) 336 ART_BUILD_TARGET := true 337 ART_BUILD_DEBUG := true 338endif 339ifeq ($(ART_BUILD_HOST_NDEBUG),true) 340 ART_BUILD_HOST := true 341 ART_BUILD_NDEBUG := true 342endif 343ifeq ($(ART_BUILD_HOST_DEBUG),true) 344 ART_BUILD_HOST := true 345 ART_BUILD_DEBUG := true 346endif 347 348# Clear locally defined variables that aren't necessary in the rest of the build system. 349ART_DEFAULT_GC_TYPE := 350ART_DEFAULT_GC_TYPE_CFLAGS := 351art_cflags := 352art_target_non_debug_cflags := 353art_host_non_debug_cflags := 354art_non_debug_cflags := 355 356endif # ANDROID_COMMON_BUILD_MK 357