blob: aa3824b328199ae3048900f2f3616842ef9e6797 [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 \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100140 softmmu_outside_jit.c \
141
142##############################################################################
143# CPU-specific emulation.
144#
145LOCAL_CFLAGS += -fno-PIC -fomit-frame-pointer -Wno-sign-compare
146
147ifeq ($(HOST_ARCH),ppc)
148 LOCAL_CFLAGS += -D__powerpc__
149endif
150
151ifeq ($(EMULATOR_TARGET_ARCH),arm)
152LOCAL_SRC_FILES += \
153 target-arm/op_helper.c \
154 target-arm/iwmmxt_helper.c \
155 target-arm/neon_helper.c \
156 target-arm/helper.c \
157 target-arm/translate.c \
158 target-arm/machine.c \
159 hw/armv7m.c \
160 hw/armv7m_nvic.c \
161 arm-semi.c \
162
163LOCAL_SRC_FILES += fpu/softfloat.c
164endif
165
166ifeq ($(EMULATOR_TARGET_ARCH), x86)
167LOCAL_SRC_FILES += \
168 target-i386/op_helper.c \
169 target-i386/helper.c \
170 target-i386/translate.c \
171 target-i386/machine.c \
172
173LOCAL_SRC_FILES += fpu/softfloat-native.c
174endif
175
Jun Nakajima1321c762011-03-04 17:17:45 -0800176# compile KVM only if target is x86 on x86 Linux
David 'Digit' Turner36597752011-05-20 01:18:01 +0200177QEMU_KVM_TAG := $(QEMU_HOST_TAG)-$(EMULATOR_TARGET_ARCH)
178QEMU_DO_KVM := $(if $(filter linux-x86-x86 linux-x86_64-x86,$(QEMU_KVM_TAG)),true,false)
179ifeq ($(QEMU_DO_KVM),true)
180 LOCAL_SRC_FILES += \
181 target-i386/kvm.c \
Jun Nakajimabb0140b2011-05-27 18:24:21 -0700182 target-i386/kvm-gs-restore.c \
David 'Digit' Turner36597752011-05-20 01:18:01 +0200183 kvm-all.c \
184 kvm-android.c
Jun Nakajima1321c762011-03-04 17:17:45 -0800185endif
186
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100187##############################################################################
188# Memory-access checking support.
189# Memory access checker uses information collected by instrumented code in
190# libc.so in order to keep track of memory blocks allocated from heap. Memory
191# checker then uses this information to make sure that every access to allocated
192# memory is within allocated block. This information also allows detecting
193# memory leaks and attempts to free/realloc invalid pointers.
194#
195LOCAL_CFLAGS += \
196 -I$(LOCAL_PATH)/memcheck \
197 -I$(LOCAL_PATH)/elff
198
199MCHK_SOURCES := \
200 memcheck.c \
201 memcheck_proc_management.c \
202 memcheck_malloc_map.c \
203 memcheck_mmrange_map.c \
204 memcheck_util.c \
205
206LOCAL_SRC_FILES += $(MCHK_SOURCES:%=memcheck/%)
207
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200208# What a mess, os-posix.c depends on the exact values of options
209# which are target specific.
210ifeq ($(HOST_OS),windows)
211 LOCAL_SRC_FILES += os-win32.c oslib-win32.c
212else
213 LOCAL_SRC_FILES += os-posix.c oslib-posix.c
214endif
215$(call gen-hx-header,qemu-options.hx,qemu-options.def,os-posix.c os-win32.c)
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100216
217$(call end-emulator-library)
218
219##############################################################################
220##############################################################################
221###
222### qemu-android-$CPU: headless emulator core program
223###
224###
225$(call start-emulator-program, qemu-android-$(EMULATOR_TARGET_ARCH))
226
227LOCAL_CFLAGS += \
228 $(EMULATOR_COMMON_CFLAGS) \
229 $(ELFF_CFLAGS) \
230 $(EMULATOR_LIBQEMU_CFLAGS) \
231 $(EMULATOR_TARGET_CFLAGS) \
232 -DCONFIG_STANDALONE_CORE \
233
234LOCAL_CFLAGS += -Wno-missing-field-initializers
235
236
237LOCAL_STATIC_LIBRARIES := \
238 emulator-libqemu \
239 emulator-target-$(EMULATOR_TARGET_CPU) \
240 emulator-libelff \
241 emulator-common \
242
243
244LOCAL_LDLIBS += \
245 $(EMULATOR_COMMON_LDLIBS) \
246 $(EMULATOR_LIBQEMU_LDLIBS) \
247 $(ELFF_LDLIBS) \
248
249LOCAL_SRC_FILES := \
250 audio/audio.c \
251 disas.c \
252 dma-helpers.c \
253 gdbstub.c \
254 keymaps.c \
255 loader.c \
256 monitor.c \
257 qemu-timer.c \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200258 qemu-timer-common.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100259 user-events-qemu.c \
260 vl-android.c \
261 android/console.c \
262 android/display-core.c \
263 android/protocol/attach-ui-proxy.c \
264 android/protocol/fb-updates-proxy.c \
265 android/protocol/user-events-impl.c \
266 android/protocol/ui-commands-proxy.c \
267 android/protocol/core-commands-impl.c \
268 android/protocol/core-commands-qemu.c \
269
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200270$(call gen-hx-header,qemu-monitor.hx,qemu-monitor.h,monitor.c)
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200271$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h)
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100272
273ifeq ($(HOST_OS),darwin)
274 FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit
275 LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%)
276endif
277
278# Generate a completely static executable if needed.
279# Note that this means no sound and graphics on Linux.
280#
281ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
282 LOCAL_SRC_FILES += dynlink-static.c
283 LOCAL_LDLIBS += -static
284endif
285
286# The following files cannot be in static libraries because they contain
287# constructor functions that are otherwise stripped by the final linker
288LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
289LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
290
291LOCAL_SRC_FILES += $(BLOCK_SOURCES)
292LOCAL_CFLAGS += $(BLOCK_CFLAGS)
293
294LOCAL_MODULE_TAGS := debug
295
296$(call end-emulator-program)
297
298##############################################################################
299##############################################################################
300###
301### emulator-$ARCH: Standalone emulator program
302###
303###
304
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100305$(call start-emulator-program, emulator-$(EMULATOR_TARGET_ARCH))
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100306
307LOCAL_STATIC_LIBRARIES := \
308 emulator-libui \
309 emulator-libqemu \
310 emulator-target-$(EMULATOR_TARGET_CPU) \
311 emulator-libelff \
312 emulator-common \
313
314LOCAL_LDLIBS += \
315 $(EMULATOR_COMMON_LDLIBS) \
316 $(EMULATOR_LIBQEMU_LDLIBS) \
317 $(EMULATOR_LIBUI_LDLIBS) \
318 $(ELFF_LDLIBS) \
319
320LOCAL_CFLAGS += \
321 $(EMULATOR_TARGET_CFLAGS) \
322 $(EMULATOR_COMMON_CFLAGS) \
323 $(EMULATOR_LIBQEMU_CFLAGS) \
324 $(EMULATOR_LIBUI_CFLAGS)
325
326LOCAL_SRC_FILES := \
327 audio/audio.c \
328 disas.c \
329 dma-helpers.c \
330 gdbstub.c \
331 keymaps.c \
332 loader.c \
333 monitor.c \
334 qemu-timer.c \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200335 qemu-timer-common.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100336 user-events-qemu.c \
337 vl-android.c \
338 android/cmdline-option.c \
339 android/console.c \
340 android/display.c \
341 android/display-core.c \
342 android/help.c \
343 android/main-common.c \
344 android/main.c \
345 android/protocol/core-commands-qemu.c \
346 android/protocol/ui-commands-qemu.c \
347 android/
348
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200349$(call gen-hx-header,qemu-monitor.hx,qemu-monitor.h,monitor.c)
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200350$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h)
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100351
352# The following files cannot be in static libraries because they contain
353# constructor functions that are otherwise stripped by the final linker
354LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
355LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
356
357LOCAL_SRC_FILES += $(BLOCK_SOURCES)
358LOCAL_CFLAGS += $(BLOCK_CFLAGS)
359
360LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
361
362# Generate a completely static executable if needed.
363# Note that this means no sound and graphics on Linux.
364#
365ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
366 LOCAL_SRC_FILES += dynlink-static.c
367 LOCAL_LDLIBS += -static
368endif
369
370LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
371
372$(call end-emulator-program)