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_MK 18ANDROID_COMMON_MK = true 19 20# These can be overridden via the environment or by editing to 21# enable/disable certain build configuration. 22# 23# For example, to disable everything but the host debug build you use: 24# 25# (export ART_BUILD_TARGET_NDEBUG=false && export ART_BUILD_TARGET_DEBUG=false && export ART_BUILD_HOST_NDEBUG=false && ...) 26# 27# Beware that tests may use the non-debug build for performance, notable 055-enum-performance 28# 29ART_BUILD_TARGET_NDEBUG ?= true 30ART_BUILD_TARGET_DEBUG ?= true 31ART_BUILD_HOST_NDEBUG ?= $(WITH_HOST_DALVIK) 32ART_BUILD_HOST_DEBUG ?= $(WITH_HOST_DALVIK) 33 34ifeq ($(ART_BUILD_TARGET_NDEBUG),false) 35$(info Disabling ART_BUILD_TARGET_NDEBUG) 36endif 37ifeq ($(ART_BUILD_TARGET_DEBUG),false) 38$(info Disabling ART_BUILD_TARGET_DEBUG) 39endif 40ifeq ($(ART_BUILD_HOST_NDEBUG),false) 41$(info Disabling ART_BUILD_HOST_NDEBUG) 42endif 43ifeq ($(ART_BUILD_HOST_DEBUG),false) 44$(info Disabling ART_BUILD_HOST_DEBUG) 45endif 46 47# 48# Used to enable smart mode 49# 50ART_SMALL_MODE := false 51ifneq ($(wildcard art/SMALL_ART),) 52$(info Enabling ART_SMALL_MODE because of existence of art/SMALL_ART) 53ART_SMALL_MODE := true 54endif 55ifeq ($(WITH_ART_SMALL_MODE), true) 56ART_SMALL_MODE := true 57endif 58 59# 60# Used to enable SEA mode 61# 62ART_SEA_IR_MODE := false 63ifneq ($(wildcard art/SEA_IR_ART),) 64$(info Enabling ART_SEA_IR_MODE because of existence of art/SEA_IR_ART) 65ART_SEA_IR_MODE := true 66endif 67ifeq ($(WITH_ART_SEA_IR_MODE), true) 68ART_SEA_IR_MODE := true 69endif 70 71# 72# Used to enable portable mode 73# 74ART_USE_PORTABLE_COMPILER := false 75ifneq ($(wildcard art/USE_PORTABLE_COMPILER),) 76$(info Enabling ART_USE_PORTABLE_COMPILER because of existence of art/USE_PORTABLE_COMPILER) 77ART_USE_PORTABLE_COMPILER := true 78endif 79ifeq ($(WITH_ART_USE_PORTABLE_COMPILER),true) 80$(info Enabling ART_USE_PORTABLE_COMPILER because WITH_ART_USE_PORTABLE_COMPILER=true) 81ART_USE_PORTABLE_COMPILER := true 82endif 83 84LLVM_ROOT_PATH := external/llvm 85include $(LLVM_ROOT_PATH)/llvm.mk 86 87# Clang build. 88# ART_TARGET_CLANG := true 89# ART_HOST_CLANG := true 90 91# directory used for gtests on device 92ART_NATIVETEST_DIR := /data/nativetest/art 93ART_NATIVETEST_OUT := $(TARGET_OUT_DATA_NATIVE_TESTS)/art 94 95# directory used for tests on device 96ART_TEST_DIR := /data/art-test 97ART_TEST_OUT := $(TARGET_OUT_DATA)/art-test 98 99ART_CPP_EXTENSION := .cc 100 101ART_HOST_SHLIB_EXTENSION := $(HOST_SHLIB_SUFFIX) 102ART_HOST_SHLIB_EXTENSION ?= .so 103 104ART_C_INCLUDES := \ 105 external/gtest/include \ 106 external/valgrind/main/include \ 107 external/zlib \ 108 frameworks/compile/mclinker/include 109 110art_cflags := \ 111 -fno-rtti \ 112 -std=gnu++11 \ 113 -ggdb3 \ 114 -Wall \ 115 -Werror \ 116 -Wextra \ 117 -Wstrict-aliasing=3 \ 118 -fstrict-aliasing 119 120ifeq ($(ART_SMALL_MODE),true) 121 art_cflags += -DART_SMALL_MODE=1 122endif 123 124ifeq ($(ART_SEA_IR_MODE),true) 125 art_cflags += -DART_SEA_IR_MODE=1 126endif 127 128ifeq ($(HOST_OS),linux) 129 art_non_debug_cflags := \ 130 -Wframe-larger-than=1728 131endif 132 133art_non_debug_cflags := \ 134 -O3 135 136art_debug_cflags := \ 137 -O1 \ 138 -DDYNAMIC_ANNOTATIONS_ENABLED=1 \ 139 -UNDEBUG 140 141# start of image reserved address space 142IMG_HOST_BASE_ADDRESS := 0x60000000 143 144ifeq ($(TARGET_ARCH),mips) 145IMG_TARGET_BASE_ADDRESS := 0x30000000 146else 147IMG_TARGET_BASE_ADDRESS := 0x60000000 148endif 149 150ART_HOST_CFLAGS := $(art_cflags) -DANDROID_SMP=1 -DART_BASE_ADDRESS=$(IMG_HOST_BASE_ADDRESS) 151 152ifeq ($(TARGET_ARCH),x86) 153ART_TARGET_CFLAGS += -msse2 154endif 155 156ART_TARGET_CFLAGS := $(art_cflags) -DART_TARGET -DART_BASE_ADDRESS=$(IMG_TARGET_BASE_ADDRESS) 157ifeq ($(TARGET_CPU_SMP),true) 158 ART_TARGET_CFLAGS += -DANDROID_SMP=1 159else 160 ART_TARGET_CFLAGS += -DANDROID_SMP=0 161endif 162 163# Enable thread-safety for GCC 4.6 on the target but not for GCC 4.7 where this feature was removed. 164ifneq ($(filter 4.6 4.6.%, $(TARGET_GCC_VERSION)),) 165 ART_TARGET_CFLAGS += -Wthread-safety 166else 167 # Warn if not using GCC 4.6 for target builds when not doing a top-level or 'mma' build. 168 ifneq ($(ONE_SHOT_MAKEFILE),) 169 # Enable target GCC 4.6 with: export TARGET_GCC_VERSION_EXP=4.6 170 $(info Using target GCC $(TARGET_GCC_VERSION) disables thread-safety checks.) 171 endif 172endif 173# We build with GCC 4.6 on the host. 174ART_HOST_CFLAGS += -Wthread-safety 175 176# Make host builds easier to debug and profile by not omitting the frame pointer. 177ART_HOST_CFLAGS += -fno-omit-frame-pointer 178 179# To use oprofile_android --callgraph, uncomment this and recompile with "mmm art -B -j16" 180# ART_TARGET_CFLAGS += -fno-omit-frame-pointer -marm -mapcs 181 182ART_HOST_NON_DEBUG_CFLAGS := $(art_non_debug_cflags) 183ART_TARGET_NON_DEBUG_CFLAGS := $(art_non_debug_cflags) 184 185# TODO: move -fkeep-inline-functions to art_debug_cflags when target gcc > 4.4 (and -lsupc++) 186ART_HOST_DEBUG_CFLAGS := $(art_debug_cflags) -fkeep-inline-functions 187ART_HOST_DEBUG_LDLIBS := -lsupc++ 188 189ifneq ($(HOST_OS),linux) 190 # Some Mac OS pthread header files are broken with -fkeep-inline-functions. 191 ART_HOST_DEBUG_CFLAGS := $(filter-out -fkeep-inline-functions,$(ART_HOST_DEBUG_CFLAGS)) 192 # Mac OS doesn't have libsupc++. 193 ART_HOST_DEBUG_LDLIBS := $(filter-out -lsupc++,$(ART_HOST_DEBUG_LDLIBS)) 194endif 195 196ART_TARGET_DEBUG_CFLAGS := $(art_debug_cflags) 197 198ifeq ($(ART_USE_PORTABLE_COMPILER),true) 199PARALLEL_ART_COMPILE_JOBS := -j8 200endif 201 202ART_BUILD_TARGET := false 203ART_BUILD_HOST := false 204ART_BUILD_NDEBUG := false 205ART_BUILD_DEBUG := false 206ifeq ($(ART_BUILD_TARGET_NDEBUG),true) 207 ART_BUILD_TARGET := true 208 ART_BUILD_NDEBUG := true 209endif 210ifeq ($(ART_BUILD_TARGET_DEBUG),true) 211 ART_BUILD_TARGET := true 212 ART_BUILD_DEBUG := true 213endif 214ifeq ($(ART_BUILD_HOST_NDEBUG),true) 215 ART_BUILD_HOST := true 216 ART_BUILD_NDEBUG := true 217endif 218ifeq ($(ART_BUILD_HOST_DEBUG),true) 219 ART_BUILD_HOST := true 220 ART_BUILD_DEBUG := true 221endif 222 223endif # ANDROID_COMMON_MK 224