blob: 6cf2283d92f59cb87613a4207ea60bd839686a89 [file] [log] [blame]
David 'Digit' Turneraff94b82011-02-07 18:10:54 +01001# This file is included several times to build target-specific
2# modules for the Android emulator. It will be called several times
3# (e.g. once for the arm target, and once for the x86 target).
4#
5
6ifndef EMULATOR_TARGET_ARCH
7$(error EMULATOR_TARGET_ARCH is not defined!)
8endif
9
10EMULATOR_TARGET_CPU := $(EMULATOR_TARGET_ARCH)
11ifeq ($(EMULATOR_TARGET_CPU),x86)
12 EMULATOR_TARGET_CPU := i386
13endif
14
15##############################################################################
16##############################################################################
17###
18### emulator-target-$CPU: target-specific emulation code.
19###
20### Used by both the core and standalone programs.
21###
22
23# Common compiler flags for all target-dependent libraries
24EMULATOR_TARGET_CFLAGS := \
25 -I$(LOCAL_PATH)/android/config/$(HOST_PREBUILT_TAG) \
26 -I$(LOCAL_PATH)/android/config/target-$(EMULATOR_TARGET_ARCH) \
27 -I$(LOCAL_PATH)/target-$(EMULATOR_TARGET_CPU) \
28 -I$(LOCAL_PATH)/fpu \
29 -DNEED_CPU_H \
30
31TCG_TARGET := $(HOST_ARCH)
32ifeq ($(TCG_TARGET),x86)
33 TCG_TARGET := i386
34endif
35
36EMULATOR_TARGET_CFLAGS += \
37 -I$(LOCAL_PATH)/tcg \
38 -I$(LOCAL_PATH)/tcg/$(TCG_TARGET) \
39 -DTARGET_ARCH=\"$(EMULATOR_TARGET_ARCH)\"
40
41
42$(call start-emulator-library, emulator-target-$(EMULATOR_TARGET_CPU))
43
44# The following is to ensure that "config.h" will map to a target-specific
45# configuration file header.
46LOCAL_CFLAGS += $(EMULATOR_TARGET_CFLAGS)
47
48LOCAL_SRC_FILES += \
49 tcg/tcg.c \
50
51##############################################################################
52# Emulated hardware devices.
53#
54
55HW_SOURCES := \
56 bt.c \
57 bt-hci.c \
58 bt-hid.c \
59 bt-l2cap.c \
60 bt-sdp.c \
61 cdrom.c \
62 dma.c \
63 irq.c \
Jun Nakajima6f198362011-02-24 13:16:01 -080064 goldfish_audio.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +010065 goldfish_device.c \
66 goldfish_events_device.c \
67 goldfish_fb.c \
68 goldfish_battery.c \
69 goldfish_mmc.c \
70 goldfish_memlog.c \
71 goldfish_nand.c \
David 'Digit' Turner89217f52011-03-21 17:51:03 +010072 goldfish_pipe.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +010073 goldfish_tty.c \
74 msmouse.c \
75 pci.c \
76 qdev.c \
77 scsi-disk.c \
78 sysbus.c \
79 usb-hid.c \
80 usb-hub.c \
81 usb-msd.c \
82 usb-ohci.c \
83 usb.c \
84 watchdog.c
85
86ifeq ($(EMULATOR_TARGET_ARCH),arm)
87HW_SOURCES += android_arm.c \
88 arm_pic.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +010089 goldfish_interrupt.c \
90 goldfish_switch.c \
91 goldfish_timer.c \
92 goldfish_trace.c \
93 arm_boot.c \
94
95# The following sources must be compiled with the final executables
96# because they contain device_init() or machine_init() statements.
97HW_OBJ_SOURCES := hw/smc91c111.c
98HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS)
99
100LOCAL_SRC_FILES += arm-dis.c
101
102# smc91c111.c requires <zlib.h>
103LOCAL_CFLAGS += $(ZLIB_CFLAGS)
104endif
105
David 'Digit' Turner764a3c92011-05-05 12:40:49 +0200106# required to ensure we properly initialize virtual audio hardware
107LOCAL_CFLAGS += -DHAS_AUDIO
108
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100109ifeq ($(EMULATOR_TARGET_ARCH),x86)
110HW_SOURCES += \
111 apic.c \
112 i8259.c \
113 mc146818rtc.c \
114 piix_pci.c \
115 i8254.c \
116 pckbd.c \
117 ioapic.c \
118 ps2.c \
119 smbios.c \
120 fw_cfg.c
121
122# The following sources must be compiled with the final executables
123# because they contain device_init() or machine_init() statements.
124HW_OBJ_SOURCES := \
125 hw/ne2000.c \
126 hw/pc.c
127
128HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS)
129
130endif
131
132LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%)
133
134LOCAL_SRC_FILES += \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100135 cpu-exec.c \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200136 exec.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100137 translate-all.c \
138 trace.c \
139 varint.c \
140 dcache.c \
141 softmmu_outside_jit.c \
142
143##############################################################################
144# CPU-specific emulation.
145#
146LOCAL_CFLAGS += -fno-PIC -fomit-frame-pointer -Wno-sign-compare
147
148ifeq ($(HOST_ARCH),ppc)
149 LOCAL_CFLAGS += -D__powerpc__
150endif
151
152ifeq ($(EMULATOR_TARGET_ARCH),arm)
153LOCAL_SRC_FILES += \
154 target-arm/op_helper.c \
155 target-arm/iwmmxt_helper.c \
156 target-arm/neon_helper.c \
157 target-arm/helper.c \
158 target-arm/translate.c \
159 target-arm/machine.c \
160 hw/armv7m.c \
161 hw/armv7m_nvic.c \
162 arm-semi.c \
163
164LOCAL_SRC_FILES += fpu/softfloat.c
165endif
166
167ifeq ($(EMULATOR_TARGET_ARCH), x86)
168LOCAL_SRC_FILES += \
169 target-i386/op_helper.c \
170 target-i386/helper.c \
171 target-i386/translate.c \
172 target-i386/machine.c \
173
174LOCAL_SRC_FILES += fpu/softfloat-native.c
175endif
176
Jun Nakajima1321c762011-03-04 17:17:45 -0800177# compile KVM only if target is x86 on x86 Linux
David 'Digit' Turner36597752011-05-20 01:18:01 +0200178QEMU_KVM_TAG := $(QEMU_HOST_TAG)-$(EMULATOR_TARGET_ARCH)
179QEMU_DO_KVM := $(if $(filter linux-x86-x86 linux-x86_64-x86,$(QEMU_KVM_TAG)),true,false)
180ifeq ($(QEMU_DO_KVM),true)
181 LOCAL_SRC_FILES += \
182 target-i386/kvm.c \
Jun Nakajimabb0140b2011-05-27 18:24:21 -0700183 target-i386/kvm-gs-restore.c \
David 'Digit' Turner36597752011-05-20 01:18:01 +0200184 kvm-all.c \
185 kvm-android.c
Jun Nakajima1321c762011-03-04 17:17:45 -0800186endif
187
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100188##############################################################################
189# Memory-access checking support.
190# Memory access checker uses information collected by instrumented code in
191# libc.so in order to keep track of memory blocks allocated from heap. Memory
192# checker then uses this information to make sure that every access to allocated
193# memory is within allocated block. This information also allows detecting
194# memory leaks and attempts to free/realloc invalid pointers.
195#
196LOCAL_CFLAGS += \
197 -I$(LOCAL_PATH)/memcheck \
198 -I$(LOCAL_PATH)/elff
199
200MCHK_SOURCES := \
201 memcheck.c \
202 memcheck_proc_management.c \
203 memcheck_malloc_map.c \
204 memcheck_mmrange_map.c \
205 memcheck_util.c \
206
207LOCAL_SRC_FILES += $(MCHK_SOURCES:%=memcheck/%)
208
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200209# What a mess, os-posix.c depends on the exact values of options
210# which are target specific.
211ifeq ($(HOST_OS),windows)
212 LOCAL_SRC_FILES += os-win32.c oslib-win32.c
213else
214 LOCAL_SRC_FILES += os-posix.c oslib-posix.c
215endif
216$(call gen-hx-header,qemu-options.hx,qemu-options.def,os-posix.c os-win32.c)
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100217
218$(call end-emulator-library)
219
220##############################################################################
221##############################################################################
222###
223### qemu-android-$CPU: headless emulator core program
224###
225###
226$(call start-emulator-program, qemu-android-$(EMULATOR_TARGET_ARCH))
227
228LOCAL_CFLAGS += \
229 $(EMULATOR_COMMON_CFLAGS) \
230 $(ELFF_CFLAGS) \
231 $(EMULATOR_LIBQEMU_CFLAGS) \
232 $(EMULATOR_TARGET_CFLAGS) \
233 -DCONFIG_STANDALONE_CORE \
234
235LOCAL_CFLAGS += -Wno-missing-field-initializers
236
237
238LOCAL_STATIC_LIBRARIES := \
239 emulator-libqemu \
240 emulator-target-$(EMULATOR_TARGET_CPU) \
241 emulator-libelff \
242 emulator-common \
243
244
245LOCAL_LDLIBS += \
246 $(EMULATOR_COMMON_LDLIBS) \
247 $(EMULATOR_LIBQEMU_LDLIBS) \
248 $(ELFF_LDLIBS) \
249
250LOCAL_SRC_FILES := \
251 audio/audio.c \
252 disas.c \
253 dma-helpers.c \
254 gdbstub.c \
255 keymaps.c \
256 loader.c \
257 monitor.c \
258 qemu-timer.c \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200259 qemu-timer-common.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100260 user-events-qemu.c \
261 vl-android.c \
262 android/console.c \
263 android/display-core.c \
264 android/protocol/attach-ui-proxy.c \
265 android/protocol/fb-updates-proxy.c \
266 android/protocol/user-events-impl.c \
267 android/protocol/ui-commands-proxy.c \
268 android/protocol/core-commands-impl.c \
269 android/protocol/core-commands-qemu.c \
270
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200271$(call gen-hx-header,qemu-monitor.hx,qemu-monitor.h,monitor.c)
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200272$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h)
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100273
274ifeq ($(HOST_OS),darwin)
275 FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit
276 LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%)
277endif
278
279# Generate a completely static executable if needed.
280# Note that this means no sound and graphics on Linux.
281#
282ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
283 LOCAL_SRC_FILES += dynlink-static.c
284 LOCAL_LDLIBS += -static
285endif
286
287# The following files cannot be in static libraries because they contain
288# constructor functions that are otherwise stripped by the final linker
289LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
290LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
291
292LOCAL_SRC_FILES += $(BLOCK_SOURCES)
293LOCAL_CFLAGS += $(BLOCK_CFLAGS)
294
295LOCAL_MODULE_TAGS := debug
296
297$(call end-emulator-program)
298
299##############################################################################
300##############################################################################
301###
302### emulator-$ARCH: Standalone emulator program
303###
304###
305
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100306$(call start-emulator-program, emulator-$(EMULATOR_TARGET_ARCH))
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100307
308LOCAL_STATIC_LIBRARIES := \
309 emulator-libui \
310 emulator-libqemu \
311 emulator-target-$(EMULATOR_TARGET_CPU) \
312 emulator-libelff \
313 emulator-common \
314
315LOCAL_LDLIBS += \
316 $(EMULATOR_COMMON_LDLIBS) \
317 $(EMULATOR_LIBQEMU_LDLIBS) \
318 $(EMULATOR_LIBUI_LDLIBS) \
319 $(ELFF_LDLIBS) \
320
321LOCAL_CFLAGS += \
322 $(EMULATOR_TARGET_CFLAGS) \
323 $(EMULATOR_COMMON_CFLAGS) \
324 $(EMULATOR_LIBQEMU_CFLAGS) \
325 $(EMULATOR_LIBUI_CFLAGS)
326
327LOCAL_SRC_FILES := \
328 audio/audio.c \
329 disas.c \
330 dma-helpers.c \
331 gdbstub.c \
332 keymaps.c \
333 loader.c \
334 monitor.c \
335 qemu-timer.c \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200336 qemu-timer-common.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100337 user-events-qemu.c \
338 vl-android.c \
339 android/cmdline-option.c \
340 android/console.c \
341 android/display.c \
342 android/display-core.c \
343 android/help.c \
344 android/main-common.c \
345 android/main.c \
346 android/protocol/core-commands-qemu.c \
347 android/protocol/ui-commands-qemu.c \
348 android/
349
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200350$(call gen-hx-header,qemu-monitor.hx,qemu-monitor.h,monitor.c)
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200351$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h)
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100352
353# The following files cannot be in static libraries because they contain
354# constructor functions that are otherwise stripped by the final linker
355LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
356LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
357
358LOCAL_SRC_FILES += $(BLOCK_SOURCES)
359LOCAL_CFLAGS += $(BLOCK_CFLAGS)
360
361LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
362
363# Generate a completely static executable if needed.
364# Note that this means no sound and graphics on Linux.
365#
366ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
367 LOCAL_SRC_FILES += dynlink-static.c
368 LOCAL_LDLIBS += -static
369endif
370
371LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
372
373$(call end-emulator-program)