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