blob: 7681dbab7ca528dc1fccada957e851471dbfe87f [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 += \
135 exec.c \
136 cpu-exec.c \
137 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
178ifeq ($(QEMU_HOST_TAG)-$(EMULATOR_TARGET_ARCH),linux-x86-x86)
179# the following is to include linux/kvm.h
180LOCAL_CFLAGS += -I /usr/include
181LOCAL_SRC_FILES += \
182 target-i386/kvm.c \
183 kvm-all.c
184endif
185
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100186##############################################################################
187# Memory-access checking support.
188# Memory access checker uses information collected by instrumented code in
189# libc.so in order to keep track of memory blocks allocated from heap. Memory
190# checker then uses this information to make sure that every access to allocated
191# memory is within allocated block. This information also allows detecting
192# memory leaks and attempts to free/realloc invalid pointers.
193#
194LOCAL_CFLAGS += \
195 -I$(LOCAL_PATH)/memcheck \
196 -I$(LOCAL_PATH)/elff
197
198MCHK_SOURCES := \
199 memcheck.c \
200 memcheck_proc_management.c \
201 memcheck_malloc_map.c \
202 memcheck_mmrange_map.c \
203 memcheck_util.c \
204
205LOCAL_SRC_FILES += $(MCHK_SOURCES:%=memcheck/%)
206
207
208$(call end-emulator-library)
209
210##############################################################################
211##############################################################################
212###
213### qemu-android-$CPU: headless emulator core program
214###
215###
216$(call start-emulator-program, qemu-android-$(EMULATOR_TARGET_ARCH))
217
218LOCAL_CFLAGS += \
219 $(EMULATOR_COMMON_CFLAGS) \
220 $(ELFF_CFLAGS) \
221 $(EMULATOR_LIBQEMU_CFLAGS) \
222 $(EMULATOR_TARGET_CFLAGS) \
223 -DCONFIG_STANDALONE_CORE \
224
225LOCAL_CFLAGS += -Wno-missing-field-initializers
226
227
228LOCAL_STATIC_LIBRARIES := \
229 emulator-libqemu \
230 emulator-target-$(EMULATOR_TARGET_CPU) \
231 emulator-libelff \
232 emulator-common \
233
234
235LOCAL_LDLIBS += \
236 $(EMULATOR_COMMON_LDLIBS) \
237 $(EMULATOR_LIBQEMU_LDLIBS) \
238 $(ELFF_LDLIBS) \
239
240LOCAL_SRC_FILES := \
241 audio/audio.c \
242 disas.c \
243 dma-helpers.c \
244 gdbstub.c \
245 keymaps.c \
246 loader.c \
247 monitor.c \
248 qemu-timer.c \
249 user-events-qemu.c \
250 vl-android.c \
251 android/console.c \
252 android/display-core.c \
253 android/protocol/attach-ui-proxy.c \
254 android/protocol/fb-updates-proxy.c \
255 android/protocol/user-events-impl.c \
256 android/protocol/ui-commands-proxy.c \
257 android/protocol/core-commands-impl.c \
258 android/protocol/core-commands-qemu.c \
259
260$(call gen-hx-header,qemu-monitor.hx,monitor.c)
261$(call gen-hx-header,qemu-options.hx,vl-android.c)
262
263ifeq ($(HOST_OS),darwin)
264 FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit
265 LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%)
266endif
267
268# Generate a completely static executable if needed.
269# Note that this means no sound and graphics on Linux.
270#
271ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
272 LOCAL_SRC_FILES += dynlink-static.c
273 LOCAL_LDLIBS += -static
274endif
275
276# The following files cannot be in static libraries because they contain
277# constructor functions that are otherwise stripped by the final linker
278LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
279LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
280
281LOCAL_SRC_FILES += $(BLOCK_SOURCES)
282LOCAL_CFLAGS += $(BLOCK_CFLAGS)
283
284LOCAL_MODULE_TAGS := debug
285
286$(call end-emulator-program)
287
288##############################################################################
289##############################################################################
290###
291### emulator-$ARCH: Standalone emulator program
292###
293###
294
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100295$(call start-emulator-program, emulator-$(EMULATOR_TARGET_ARCH))
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100296
297LOCAL_STATIC_LIBRARIES := \
298 emulator-libui \
299 emulator-libqemu \
300 emulator-target-$(EMULATOR_TARGET_CPU) \
301 emulator-libelff \
302 emulator-common \
303
304LOCAL_LDLIBS += \
305 $(EMULATOR_COMMON_LDLIBS) \
306 $(EMULATOR_LIBQEMU_LDLIBS) \
307 $(EMULATOR_LIBUI_LDLIBS) \
308 $(ELFF_LDLIBS) \
309
310LOCAL_CFLAGS += \
311 $(EMULATOR_TARGET_CFLAGS) \
312 $(EMULATOR_COMMON_CFLAGS) \
313 $(EMULATOR_LIBQEMU_CFLAGS) \
314 $(EMULATOR_LIBUI_CFLAGS)
315
316LOCAL_SRC_FILES := \
317 audio/audio.c \
318 disas.c \
319 dma-helpers.c \
320 gdbstub.c \
321 keymaps.c \
322 loader.c \
323 monitor.c \
324 qemu-timer.c \
325 user-events-qemu.c \
326 vl-android.c \
327 android/cmdline-option.c \
328 android/console.c \
329 android/display.c \
330 android/display-core.c \
331 android/help.c \
332 android/main-common.c \
333 android/main.c \
334 android/protocol/core-commands-qemu.c \
335 android/protocol/ui-commands-qemu.c \
336 android/
337
338$(call gen-hx-header,qemu-monitor.hx,monitor.c)
339$(call gen-hx-header,qemu-options.hx,vl-android.c)
340
341# The following files cannot be in static libraries because they contain
342# constructor functions that are otherwise stripped by the final linker
343LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
344LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
345
346LOCAL_SRC_FILES += $(BLOCK_SOURCES)
347LOCAL_CFLAGS += $(BLOCK_CFLAGS)
348
349LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
350
351# Generate a completely static executable if needed.
352# Note that this means no sound and graphics on Linux.
353#
354ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
355 LOCAL_SRC_FILES += dynlink-static.c
356 LOCAL_LDLIBS += -static
357endif
358
359LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
360
361$(call end-emulator-program)