Dvm.mk revision 93194e943d11e30ec459c514c824e0db7b20a438
1# Copyright (C) 2008 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15# 16# Common definitions for host or target builds of libdvm. 17# 18# If you enable or disable optional features here, 19# rebuild the VM with "make clean-libdvm && make -j4 libdvm". 20# 21 22 23# 24# Compiler defines. 25# 26LOCAL_CFLAGS += -fstrict-aliasing -Wstrict-aliasing=2 -fno-align-jumps 27#LOCAL_CFLAGS += -DUSE_INDIRECT_REF 28 29# 30# Optional features. These may impact the size or performance of the VM. 31# 32LOCAL_CFLAGS += -DWITH_PROFILER -DWITH_DEBUGGER 33 34# 0=full cache, 1/2=reduced, 3=no cache 35LOCAL_CFLAGS += -DDVM_RESOLVER_CACHE=0 36 37ifeq ($(WITH_DEADLOCK_PREDICTION),true) 38 LOCAL_CFLAGS += -DWITH_DEADLOCK_PREDICTION 39 WITH_MONITOR_TRACKING := true 40endif 41ifeq ($(WITH_MONITOR_TRACKING),true) 42 LOCAL_CFLAGS += -DWITH_MONITOR_TRACKING 43endif 44 45# Make a debugging version when building the simulator (if not told 46# otherwise) and when explicitly asked. 47dvm_make_debug_vm := false 48ifeq ($(strip $(DEBUG_DALVIK_VM)),) 49 ifeq ($(dvm_simulator),true) 50 dvm_make_debug_vm := true 51 endif 52else 53 dvm_make_debug_vm := $(DEBUG_DALVIK_VM) 54endif 55 56ifeq ($(dvm_make_debug_vm),true) 57 # 58 # "Debug" profile: 59 # - debugger enabled 60 # - profiling enabled 61 # - tracked-reference verification enabled 62 # - allocation limits enabled 63 # - GDB helpers enabled 64 # - LOGV 65 # - assert() 66 # 67 LOCAL_CFLAGS += -DWITH_INSTR_CHECKS 68 LOCAL_CFLAGS += -DWITH_EXTRA_OBJECT_VALIDATION 69 LOCAL_CFLAGS += -DWITH_TRACKREF_CHECKS 70 LOCAL_CFLAGS += -DWITH_ALLOC_LIMITS 71 LOCAL_CFLAGS += -DWITH_EXTRA_GC_CHECKS=1 72 #LOCAL_CFLAGS += -DCHECK_MUTEX 73 #LOCAL_CFLAGS += -DPROFILE_FIELD_ACCESS 74 LOCAL_CFLAGS += -DDVM_SHOW_EXCEPTION=3 75 # add some extra stuff to make it easier to examine with GDB 76 LOCAL_CFLAGS += -DEASY_GDB 77 # overall config may be for a "release" build, so reconfigure these 78 LOCAL_CFLAGS += -UNDEBUG -DDEBUG=1 -DLOG_NDEBUG=1 -DWITH_DALVIK_ASSERT 79else # !dvm_make_debug_vm 80 # 81 # "Performance" profile: 82 # - all development features disabled 83 # - compiler optimizations enabled (redundant for "release" builds) 84 # - (debugging and profiling still enabled) 85 # 86 #LOCAL_CFLAGS += -DNDEBUG -DLOG_NDEBUG=1 87 # "-O2" is redundant for device (release) but useful for sim (debug) 88 #LOCAL_CFLAGS += -O2 -Winline 89 #LOCAL_CFLAGS += -DWITH_EXTRA_OBJECT_VALIDATION 90 LOCAL_CFLAGS += -DDVM_SHOW_EXCEPTION=1 91 # if you want to try with assertions on the device, add: 92 #LOCAL_CFLAGS += -UNDEBUG -DDEBUG=1 -DLOG_NDEBUG=1 -DWITH_DALVIK_ASSERT 93endif # !dvm_make_debug_vm 94 95# bug hunting: checksum and verify interpreted stack when making JNI calls 96#LOCAL_CFLAGS += -DWITH_JNI_STACK_CHECK 97 98LOCAL_SRC_FILES := \ 99 AllocTracker.c \ 100 AtomicCache.c \ 101 CheckJni.c \ 102 Ddm.c \ 103 Debugger.c \ 104 DvmDex.c \ 105 Exception.c \ 106 Hash.c \ 107 IndirectRefTable.c.arm \ 108 Init.c \ 109 InlineNative.c.arm \ 110 Inlines.c \ 111 Intern.c \ 112 Jni.c \ 113 JarFile.c \ 114 LinearAlloc.c \ 115 Misc.c.arm \ 116 Native.c \ 117 PointerSet.c \ 118 Profile.c \ 119 Properties.c \ 120 RawDexFile.c \ 121 ReferenceTable.c \ 122 SignalCatcher.c \ 123 StdioConverter.c \ 124 Sync.c \ 125 Thread.c \ 126 UtfString.c \ 127 alloc/clz.c.arm \ 128 alloc/Alloc.c \ 129 alloc/HeapBitmap.c.arm \ 130 alloc/HeapDebug.c \ 131 alloc/HeapSource.c \ 132 alloc/HeapTable.c \ 133 alloc/HeapWorker.c \ 134 alloc/Heap.c.arm \ 135 alloc/MarkSweep.c.arm \ 136 alloc/DdmHeap.c \ 137 analysis/CodeVerify.c \ 138 analysis/DexOptimize.c \ 139 analysis/DexVerify.c \ 140 analysis/ReduceConstants.c \ 141 analysis/RegisterMap.c \ 142 analysis/VerifySubs.c \ 143 interp/Interp.c.arm \ 144 interp/Stack.c \ 145 jdwp/ExpandBuf.c \ 146 jdwp/JdwpAdb.c \ 147 jdwp/JdwpConstants.c \ 148 jdwp/JdwpEvent.c \ 149 jdwp/JdwpHandler.c \ 150 jdwp/JdwpMain.c \ 151 jdwp/JdwpSocket.c \ 152 mterp/Mterp.c.arm \ 153 mterp/out/InterpC-portstd.c.arm \ 154 mterp/out/InterpC-portdbg.c.arm \ 155 native/InternalNative.c \ 156 native/dalvik_system_DexFile.c \ 157 native/dalvik_system_SamplingProfiler.c \ 158 native/dalvik_system_VMDebug.c \ 159 native/dalvik_system_VMRuntime.c \ 160 native/dalvik_system_VMStack.c \ 161 native/dalvik_system_Zygote.c \ 162 native/java_lang_Class.c \ 163 native/java_lang_Object.c \ 164 native/java_lang_Runtime.c \ 165 native/java_lang_String.c \ 166 native/java_lang_System.c \ 167 native/java_lang_SystemProperties.c \ 168 native/java_lang_Throwable.c \ 169 native/java_lang_VMClassLoader.c \ 170 native/java_lang_VMThread.c \ 171 native/java_lang_reflect_AccessibleObject.c \ 172 native/java_lang_reflect_Array.c \ 173 native/java_lang_reflect_Constructor.c \ 174 native/java_lang_reflect_Field.c \ 175 native/java_lang_reflect_Method.c \ 176 native/java_lang_reflect_Proxy.c \ 177 native/java_security_AccessController.c \ 178 native/java_util_concurrent_atomic_AtomicLong.c \ 179 native/org_apache_harmony_dalvik_NativeTestTarget.c \ 180 native/org_apache_harmony_dalvik_ddmc_DdmServer.c \ 181 native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.c \ 182 native/sun_misc_Unsafe.c \ 183 oo/AccessCheck.c \ 184 oo/Array.c \ 185 oo/Class.c \ 186 oo/Object.c \ 187 oo/Resolve.c \ 188 oo/TypeCheck.c \ 189 reflect/Annotation.c \ 190 reflect/Proxy.c \ 191 reflect/Reflect.c \ 192 test/AtomicSpeed.c \ 193 test/TestHash.c \ 194 test/TestIndirectRefTable.c 195 196WITH_JIT := $(strip $(WITH_JIT)) 197 198ifeq ($(WITH_JIT),true) 199 LOCAL_CFLAGS += -DWITH_JIT 200 # Enable assert and JIT_TUNING for now 201 LOCAL_CFLAGS += -UNDEBUG -DDEBUG=1 -DLOG_NDEBUG=1 -DWITH_DALVIK_ASSERT 202 WITH_JIT_TUNING := true 203 LOCAL_SRC_FILES += \ 204 ../dexdump/OpCodeNames.c \ 205 compiler/Compiler.c \ 206 compiler/Frontend.c \ 207 compiler/Utility.c \ 208 compiler/IntermediateRep.c \ 209 interp/Jit.c 210endif 211 212ifeq ($(strip $(WITH_JIT_TUNING)),true) 213 LOCAL_CFLAGS += -DWITH_JIT_TUNING 214endif 215 216# Enable JIT self verification tool. Runs compiled traces natively, then replays 217# them with the interpreter, and ensures memory and register state are the same. 218ifeq ($(WITH_SELF_VERIFICATION),true) 219 LOCAL_CFLAGS += -DWITH_SELF_VERIFICATION 220endif 221 222WITH_HPROF := $(strip $(WITH_HPROF)) 223ifeq ($(WITH_HPROF),) 224 WITH_HPROF := true 225endif 226ifeq ($(WITH_HPROF),true) 227 LOCAL_SRC_FILES += \ 228 hprof/Hprof.c \ 229 hprof/HprofClass.c \ 230 hprof/HprofHeap.c \ 231 hprof/HprofOutput.c \ 232 hprof/HprofString.c 233 LOCAL_CFLAGS += -DWITH_HPROF=1 234 235 ifeq ($(strip $(WITH_HPROF_UNREACHABLE)),true) 236 LOCAL_CFLAGS += -DWITH_HPROF_UNREACHABLE=1 237 endif 238 239 ifeq ($(strip $(WITH_HPROF_STACK)),true) 240 LOCAL_SRC_FILES += \ 241 hprof/HprofStack.c \ 242 hprof/HprofStackFrame.c 243 LOCAL_CFLAGS += -DWITH_HPROF_STACK=1 244 endif # WITH_HPROF_STACK 245endif # WITH_HPROF 246 247ifeq ($(strip $(DVM_TRACK_HEAP_MARKING)),true) 248 LOCAL_CFLAGS += -DDVM_TRACK_HEAP_MARKING=1 249endif 250 251LOCAL_C_INCLUDES += \ 252 $(JNI_H_INCLUDE) \ 253 dalvik \ 254 dalvik/vm \ 255 external/zlib \ 256 $(KERNEL_HEADERS) 257 258 259ifeq ($(dvm_simulator),true) 260 LOCAL_LDLIBS += -lpthread -ldl 261 ifeq ($(HOST_OS),linux) 262 # need this for clock_gettime() in profiling 263 LOCAL_LDLIBS += -lrt 264 endif 265else 266 ifeq ($(dvm_os),linux) 267 LOCAL_SHARED_LIBRARIES += libdl 268 endif 269endif 270 271MTERP_ARCH_KNOWN := false 272 273ifeq ($(dvm_arch),arm) 274 #dvm_arch_variant := armv7-a 275 #LOCAL_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfp 276 MTERP_ARCH_KNOWN := true 277 # Select architecture-specific sources (armv4t, armv5te etc.) 278 LOCAL_SRC_FILES += \ 279 arch/arm/CallOldABI.S \ 280 arch/arm/CallEABI.S \ 281 arch/arm/HintsEABI.c \ 282 mterp/out/InterpC-$(dvm_arch_variant).c.arm \ 283 mterp/out/InterpAsm-$(dvm_arch_variant).S 284 285 ifeq ($(WITH_JIT),true) 286 LOCAL_SRC_FILES += \ 287 compiler/codegen/arm/Codegen-$(dvm_arch_variant).c \ 288 compiler/codegen/arm/Assemble.c \ 289 compiler/codegen/arm/ArchUtility.c \ 290 compiler/codegen/arm/LocalOptimizations.c \ 291 compiler/codegen/arm/GlobalOptimizations.c \ 292 compiler/template/out/CompilerTemplateAsm-$(dvm_arch_variant).S 293 endif 294endif 295 296ifeq ($(dvm_arch),x86) 297 ifeq ($(dvm_os),linux) 298 MTERP_ARCH_KNOWN := true 299 LOCAL_SRC_FILES += \ 300 arch/x86/Call386ABI.S \ 301 arch/x86/Hints386ABI.c \ 302 mterp/out/InterpC-x86.c \ 303 mterp/out/InterpAsm-x86.S 304 endif 305endif 306 307ifeq ($(dvm_arch),sh) 308 MTERP_ARCH_KNOWN := true 309 LOCAL_SRC_FILES += \ 310 arch/sh/CallSH4ABI.S \ 311 arch/generic/Hints.c \ 312 mterp/out/InterpC-allstubs.c \ 313 mterp/out/InterpAsm-allstubs.S 314endif 315 316ifeq ($(MTERP_ARCH_KNOWN),false) 317 # unknown architecture, try to use FFI 318 LOCAL_C_INCLUDES += external/libffi/$(dvm_os)-$(dvm_arch) 319 320 ifeq ($(dvm_os)-$(dvm_arch),darwin-x86) 321 # OSX includes libffi, so just make the linker aware of it directly. 322 LOCAL_LDLIBS += -lffi 323 else 324 LOCAL_SHARED_LIBRARIES += libffi 325 endif 326 327 LOCAL_SRC_FILES += \ 328 arch/generic/Call.c \ 329 arch/generic/Hints.c \ 330 mterp/out/InterpC-allstubs.c 331 332 # The following symbols are usually defined in the asm file, but 333 # since we don't have an asm file in this case, we instead just 334 # peg them at 0 here, and we add an #ifdef'able define for good 335 # measure, too. 336 LOCAL_CFLAGS += -DdvmAsmInstructionStart=0 -DdvmAsmInstructionEnd=0 \ 337 -DdvmAsmSisterStart=0 -DdvmAsmSisterEnd=0 -DDVM_NO_ASM_INTERP=1 338endif 339 340LOCAL_SHARED_LIBRARIES += \ 341 libnativehelper \ 342 libz 343 344LOCAL_STATIC_LIBRARIES += \ 345 libdex 346