David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 1 | # 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 | |
| 6 | ifndef EMULATOR_TARGET_ARCH |
| 7 | $(error EMULATOR_TARGET_ARCH is not defined!) |
| 8 | endif |
| 9 | |
| 10 | EMULATOR_TARGET_CPU := $(EMULATOR_TARGET_ARCH) |
| 11 | ifeq ($(EMULATOR_TARGET_CPU),x86) |
| 12 | EMULATOR_TARGET_CPU := i386 |
| 13 | endif |
| 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 |
| 24 | EMULATOR_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 | |
| 31 | TCG_TARGET := $(HOST_ARCH) |
| 32 | ifeq ($(TCG_TARGET),x86) |
| 33 | TCG_TARGET := i386 |
| 34 | endif |
| 35 | |
| 36 | EMULATOR_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. |
| 46 | LOCAL_CFLAGS += $(EMULATOR_TARGET_CFLAGS) |
| 47 | |
| 48 | LOCAL_SRC_FILES += \ |
| 49 | tcg/tcg.c \ |
| 50 | |
| 51 | ############################################################################## |
| 52 | # Emulated hardware devices. |
| 53 | # |
| 54 | |
| 55 | HW_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 Nakajima | 6f19836 | 2011-02-24 13:16:01 -0800 | [diff] [blame] | 64 | goldfish_audio.c \ |
David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 65 | 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' Turner | 89217f5 | 2011-03-21 17:51:03 +0100 | [diff] [blame] | 72 | goldfish_pipe.c \ |
David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 73 | 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 | |
| 86 | ifeq ($(EMULATOR_TARGET_ARCH),arm) |
| 87 | HW_SOURCES += android_arm.c \ |
| 88 | arm_pic.c \ |
David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 89 | 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. |
| 97 | HW_OBJ_SOURCES := hw/smc91c111.c |
| 98 | HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS) |
| 99 | |
| 100 | LOCAL_SRC_FILES += arm-dis.c |
| 101 | |
| 102 | # smc91c111.c requires <zlib.h> |
| 103 | LOCAL_CFLAGS += $(ZLIB_CFLAGS) |
| 104 | endif |
| 105 | |
David 'Digit' Turner | 764a3c9 | 2011-05-05 12:40:49 +0200 | [diff] [blame] | 106 | # required to ensure we properly initialize virtual audio hardware |
| 107 | LOCAL_CFLAGS += -DHAS_AUDIO |
| 108 | |
David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 109 | ifeq ($(EMULATOR_TARGET_ARCH),x86) |
| 110 | HW_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. |
| 124 | HW_OBJ_SOURCES := \ |
| 125 | hw/ne2000.c \ |
| 126 | hw/pc.c |
| 127 | |
| 128 | HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS) |
| 129 | |
| 130 | endif |
| 131 | |
| 132 | LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%) |
| 133 | |
| 134 | LOCAL_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 | # |
| 146 | LOCAL_CFLAGS += -fno-PIC -fomit-frame-pointer -Wno-sign-compare |
| 147 | |
| 148 | ifeq ($(HOST_ARCH),ppc) |
| 149 | LOCAL_CFLAGS += -D__powerpc__ |
| 150 | endif |
| 151 | |
| 152 | ifeq ($(EMULATOR_TARGET_ARCH),arm) |
| 153 | LOCAL_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 | |
| 164 | LOCAL_SRC_FILES += fpu/softfloat.c |
| 165 | endif |
| 166 | |
| 167 | ifeq ($(EMULATOR_TARGET_ARCH), x86) |
| 168 | LOCAL_SRC_FILES += \ |
| 169 | target-i386/op_helper.c \ |
| 170 | target-i386/helper.c \ |
| 171 | target-i386/translate.c \ |
| 172 | target-i386/machine.c \ |
| 173 | |
| 174 | LOCAL_SRC_FILES += fpu/softfloat-native.c |
| 175 | endif |
| 176 | |
Jun Nakajima | 1321c76 | 2011-03-04 17:17:45 -0800 | [diff] [blame] | 177 | # compile KVM only if target is x86 on x86 Linux |
| 178 | ifeq ($(QEMU_HOST_TAG)-$(EMULATOR_TARGET_ARCH),linux-x86-x86) |
| 179 | # the following is to include linux/kvm.h |
| 180 | LOCAL_CFLAGS += -I /usr/include |
| 181 | LOCAL_SRC_FILES += \ |
| 182 | target-i386/kvm.c \ |
| 183 | kvm-all.c |
| 184 | endif |
| 185 | |
David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 186 | ############################################################################## |
| 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 | # |
| 194 | LOCAL_CFLAGS += \ |
| 195 | -I$(LOCAL_PATH)/memcheck \ |
| 196 | -I$(LOCAL_PATH)/elff |
| 197 | |
| 198 | MCHK_SOURCES := \ |
| 199 | memcheck.c \ |
| 200 | memcheck_proc_management.c \ |
| 201 | memcheck_malloc_map.c \ |
| 202 | memcheck_mmrange_map.c \ |
| 203 | memcheck_util.c \ |
| 204 | |
| 205 | LOCAL_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 | |
| 218 | LOCAL_CFLAGS += \ |
| 219 | $(EMULATOR_COMMON_CFLAGS) \ |
| 220 | $(ELFF_CFLAGS) \ |
| 221 | $(EMULATOR_LIBQEMU_CFLAGS) \ |
| 222 | $(EMULATOR_TARGET_CFLAGS) \ |
| 223 | -DCONFIG_STANDALONE_CORE \ |
| 224 | |
| 225 | LOCAL_CFLAGS += -Wno-missing-field-initializers |
| 226 | |
| 227 | |
| 228 | LOCAL_STATIC_LIBRARIES := \ |
| 229 | emulator-libqemu \ |
| 230 | emulator-target-$(EMULATOR_TARGET_CPU) \ |
| 231 | emulator-libelff \ |
| 232 | emulator-common \ |
| 233 | |
| 234 | |
| 235 | LOCAL_LDLIBS += \ |
| 236 | $(EMULATOR_COMMON_LDLIBS) \ |
| 237 | $(EMULATOR_LIBQEMU_LDLIBS) \ |
| 238 | $(ELFF_LDLIBS) \ |
| 239 | |
| 240 | LOCAL_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 | |
| 263 | ifeq ($(HOST_OS),darwin) |
| 264 | FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit |
| 265 | LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%) |
| 266 | endif |
| 267 | |
| 268 | # Generate a completely static executable if needed. |
| 269 | # Note that this means no sound and graphics on Linux. |
| 270 | # |
| 271 | ifeq ($(CONFIG_STATIC_EXECUTABLE),true) |
| 272 | LOCAL_SRC_FILES += dynlink-static.c |
| 273 | LOCAL_LDLIBS += -static |
| 274 | endif |
| 275 | |
| 276 | # The following files cannot be in static libraries because they contain |
| 277 | # constructor functions that are otherwise stripped by the final linker |
| 278 | LOCAL_SRC_FILES += $(HW_OBJ_SOURCES) |
| 279 | LOCAL_CFLAGS += $(HW_OBJ_CFLAGS) |
| 280 | |
| 281 | LOCAL_SRC_FILES += $(BLOCK_SOURCES) |
| 282 | LOCAL_CFLAGS += $(BLOCK_CFLAGS) |
| 283 | |
| 284 | LOCAL_MODULE_TAGS := debug |
| 285 | |
| 286 | $(call end-emulator-program) |
| 287 | |
| 288 | ############################################################################## |
| 289 | ############################################################################## |
| 290 | ### |
| 291 | ### emulator-$ARCH: Standalone emulator program |
| 292 | ### |
| 293 | ### |
| 294 | |
David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 295 | $(call start-emulator-program, emulator-$(EMULATOR_TARGET_ARCH)) |
David 'Digit' Turner | aff94b8 | 2011-02-07 18:10:54 +0100 | [diff] [blame] | 296 | |
| 297 | LOCAL_STATIC_LIBRARIES := \ |
| 298 | emulator-libui \ |
| 299 | emulator-libqemu \ |
| 300 | emulator-target-$(EMULATOR_TARGET_CPU) \ |
| 301 | emulator-libelff \ |
| 302 | emulator-common \ |
| 303 | |
| 304 | LOCAL_LDLIBS += \ |
| 305 | $(EMULATOR_COMMON_LDLIBS) \ |
| 306 | $(EMULATOR_LIBQEMU_LDLIBS) \ |
| 307 | $(EMULATOR_LIBUI_LDLIBS) \ |
| 308 | $(ELFF_LDLIBS) \ |
| 309 | |
| 310 | LOCAL_CFLAGS += \ |
| 311 | $(EMULATOR_TARGET_CFLAGS) \ |
| 312 | $(EMULATOR_COMMON_CFLAGS) \ |
| 313 | $(EMULATOR_LIBQEMU_CFLAGS) \ |
| 314 | $(EMULATOR_LIBUI_CFLAGS) |
| 315 | |
| 316 | LOCAL_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 |
| 343 | LOCAL_SRC_FILES += $(HW_OBJ_SOURCES) |
| 344 | LOCAL_CFLAGS += $(HW_OBJ_CFLAGS) |
| 345 | |
| 346 | LOCAL_SRC_FILES += $(BLOCK_SOURCES) |
| 347 | LOCAL_CFLAGS += $(BLOCK_CFLAGS) |
| 348 | |
| 349 | LOCAL_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 | # |
| 354 | ifeq ($(CONFIG_STATIC_EXECUTABLE),true) |
| 355 | LOCAL_SRC_FILES += dynlink-static.c |
| 356 | LOCAL_LDLIBS += -static |
| 357 | endif |
| 358 | |
| 359 | LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES) |
| 360 | |
| 361 | $(call end-emulator-program) |