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 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 ($(HOST_ARCH),x86) 33 TCG_TARGET := i386 34endif 35ifeq ($(HOST_ARCH),x86_64) 36 TCG_TARGET := i386 37endif 38 39EMULATOR_TARGET_CFLAGS += \ 40 -I$(LOCAL_PATH)/tcg \ 41 -I$(LOCAL_PATH)/tcg/$(TCG_TARGET) \ 42 -DTARGET_ARCH=\"$(EMULATOR_TARGET_ARCH)\" 43 44 45common_LOCAL_CFLAGS = 46common_LOCAL_SRC_FILES = 47 48 49# The following is to ensure that "config.h" will map to a target-specific 50# configuration file header. 51common_LOCAL_CFLAGS += $(EMULATOR_TARGET_CFLAGS) 52 53common_LOCAL_SRC_FILES += \ 54 tcg/tcg.c \ 55 56############################################################################## 57# Emulated hardware devices. 58# 59 60HW_SOURCES := \ 61 bt.c \ 62 bt-hci.c \ 63 bt-hid.c \ 64 bt-l2cap.c \ 65 bt-sdp.c \ 66 cdrom.c \ 67 dma.c \ 68 irq.c \ 69 goldfish_audio.c \ 70 goldfish_device.c \ 71 goldfish_events_device.c \ 72 goldfish_fb.c \ 73 goldfish_battery.c \ 74 goldfish_mmc.c \ 75 goldfish_memlog.c \ 76 goldfish_nand.c \ 77 goldfish_pipe.c \ 78 goldfish_tty.c \ 79 msmouse.c \ 80 pci.c \ 81 qdev.c \ 82 scsi-disk.c \ 83 sysbus.c \ 84 usb-hid.c \ 85 usb-hub.c \ 86 usb-msd.c \ 87 usb-ohci.c \ 88 usb.c \ 89 watchdog.c 90 91 92ifeq ($(EMULATOR_TARGET_ARCH),arm) 93HW_SOURCES += android_arm.c \ 94 arm_pic.c \ 95 goldfish_interrupt.c \ 96 goldfish_switch.c \ 97 goldfish_timer.c \ 98 goldfish_trace.c \ 99 arm_boot.c \ 100 101# The following sources must be compiled with the final executables 102# because they contain device_init() or machine_init() statements. 103HW_OBJ_SOURCES := hw/smc91c111.c 104HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS) 105 106common_LOCAL_SRC_FILES += arm-dis.c 107 108# smc91c111.c requires <zlib.h> 109common_LOCAL_CFLAGS += $(ZLIB_CFLAGS) 110endif 111 112# required to ensure we properly initialize virtual audio hardware 113common_LOCAL_CFLAGS += -DHAS_AUDIO 114 115ifeq ($(EMULATOR_TARGET_ARCH),x86) 116HW_SOURCES += \ 117 apic.c \ 118 i8259.c \ 119 mc146818rtc.c \ 120 piix_pci.c \ 121 i8254.c \ 122 pckbd.c \ 123 ioapic.c \ 124 ps2.c \ 125 smbios.c \ 126 fw_cfg.c 127 128# The following sources must be compiled with the final executables 129# because they contain device_init() or machine_init() statements. 130HW_OBJ_SOURCES := \ 131 hw/ne2000.c \ 132 hw/pc.c 133 134HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS) 135 136endif 137 138common_LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%) 139 140common_LOCAL_SRC_FILES += \ 141 cpu-exec.c \ 142 exec.c \ 143 translate-all.c \ 144 trace.c \ 145 varint.c \ 146 softmmu_outside_jit.c \ 147 148############################################################################## 149# CPU-specific emulation. 150# 151common_LOCAL_CFLAGS += -fno-PIC -fomit-frame-pointer -Wno-sign-compare 152 153ifeq ($(HOST_ARCH),ppc) 154 common_LOCAL_CFLAGS += -D__powerpc__ 155endif 156 157ifeq ($(EMULATOR_TARGET_ARCH),arm) 158common_LOCAL_SRC_FILES += \ 159 target-arm/op_helper.c \ 160 target-arm/iwmmxt_helper.c \ 161 target-arm/neon_helper.c \ 162 target-arm/helper.c \ 163 target-arm/helper-android.c \ 164 target-arm/translate.c \ 165 target-arm/machine.c \ 166 hw/armv7m.c \ 167 hw/armv7m_nvic.c \ 168 arm-semi.c \ 169 170common_LOCAL_SRC_FILES += fpu/softfloat.c 171endif 172 173ifeq ($(EMULATOR_TARGET_ARCH), x86) 174common_LOCAL_SRC_FILES += \ 175 target-i386/op_helper.c \ 176 target-i386/helper.c \ 177 target-i386/translate.c \ 178 target-i386/machine.c \ 179 180ifeq ($(HOST_OS),darwin) 181common_LOCAL_SRC_FILES += \ 182 target-i386/hax-all.c \ 183 target-i386/hax-darwin.c 184endif 185 186ifeq ($(HOST_OS),windows) 187common_LOCAL_SRC_FILES += \ 188 target-i386/hax-all.c \ 189 target-i386/hax-windows.c 190endif 191 192common_LOCAL_SRC_FILES += fpu/softfloat-native.c 193endif 194 195# compile KVM only if target is x86 on x86 Linux 196QEMU_KVM_TAG := $(QEMU_HOST_TAG)-$(EMULATOR_TARGET_ARCH) 197QEMU_DO_KVM := $(if $(filter linux-x86-x86 linux-x86_64-x86,$(QEMU_KVM_TAG)),true,false) 198ifeq ($(QEMU_DO_KVM),true) 199 common_LOCAL_SRC_FILES += \ 200 target-i386/kvm.c \ 201 target-i386/kvm-gs-restore.c \ 202 kvm-all.c \ 203 kvm-android.c 204endif 205 206############################################################################## 207# Memory-access checking support. 208# Memory access checker uses information collected by instrumented code in 209# libc.so in order to keep track of memory blocks allocated from heap. Memory 210# checker then uses this information to make sure that every access to allocated 211# memory is within allocated block. This information also allows detecting 212# memory leaks and attempts to free/realloc invalid pointers. 213# 214common_LOCAL_CFLAGS += \ 215 -I$(LOCAL_PATH)/memcheck \ 216 -I$(LOCAL_PATH)/elff 217 218MCHK_SOURCES := \ 219 memcheck.c \ 220 memcheck_proc_management.c \ 221 memcheck_malloc_map.c \ 222 memcheck_mmrange_map.c \ 223 memcheck_util.c \ 224 225common_LOCAL_SRC_FILES += $(MCHK_SOURCES:%=memcheck/%) 226 227common_LOCAL_SRC_FILES += \ 228 cpus.c \ 229 arch_init.c 230 231# What a mess, os-posix.c depends on the exact values of options 232# which are target specific. 233ifeq ($(HOST_OS),windows) 234 common_LOCAL_SRC_FILES += os-win32.c oslib-win32.c 235else 236 common_LOCAL_SRC_FILES += os-posix.c oslib-posix.c 237endif 238 239 240## one for 32-bit 241$(call start-emulator-library, emulator-target-$(EMULATOR_TARGET_CPU)) 242LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) 243LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) 244$(call gen-hw-config-defs) 245$(call gen-hx-header,qemu-options.hx,qemu-options.def,os-posix.c os-win32.c) 246$(call end-emulator-library) 247 248## another for 64-bit, see note in file Makefile.common emulator64-common 249ifeq ($(HOST_OS),linux) 250 ifneq ($(BUILD_STANDALONE_EMULATOR),true) 251 $(call start-emulator-library, emulator64-target-$(EMULATOR_TARGET_CPU)) 252 LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64 253 LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) 254 $(call gen-hw-config-defs) 255 $(call gen-hx-header,qemu-options.hx,qemu-options.def,os-posix.c os-win32.c) 256 $(call end-emulator-library) 257 endif # BUILD_STANDALONE_EMULATOR == nil 258endif # HOST_OS == linux 259 260 261 262############################################################################## 263############################################################################## 264### 265### qemu-android-$CPU: headless emulator core program 266### 267### 268$(call start-emulator-program, qemu-android-$(EMULATOR_TARGET_ARCH)) 269 270LOCAL_CFLAGS += \ 271 $(EMULATOR_COMMON_CFLAGS) \ 272 $(ELFF_CFLAGS) \ 273 $(EMULATOR_LIBQEMU_CFLAGS) \ 274 $(EMULATOR_TARGET_CFLAGS) \ 275 -DCONFIG_STANDALONE_CORE \ 276 277LOCAL_CFLAGS += -Wno-missing-field-initializers 278 279 280LOCAL_STATIC_LIBRARIES := \ 281 emulator-libqemu \ 282 emulator-target-$(EMULATOR_TARGET_CPU) \ 283 emulator-libelff \ 284 emulator-common \ 285 286 287LOCAL_LDLIBS += \ 288 $(EMULATOR_COMMON_LDLIBS) \ 289 $(EMULATOR_LIBQEMU_LDLIBS) \ 290 $(ELFF_LDLIBS) \ 291 292LOCAL_SRC_FILES := \ 293 audio/audio.c \ 294 disas.c \ 295 dma-helpers.c \ 296 gdbstub.c \ 297 keymaps.c \ 298 loader.c \ 299 monitor.c \ 300 qemu-timer.c \ 301 qemu-timer-common.c \ 302 user-events-qemu.c \ 303 vl-android.c \ 304 android/console.c \ 305 android/opengles.c \ 306 android/display-core.c \ 307 android/protocol/attach-ui-proxy.c \ 308 android/protocol/fb-updates-proxy.c \ 309 android/protocol/user-events-impl.c \ 310 android/protocol/ui-commands-proxy.c \ 311 android/protocol/core-commands-impl.c \ 312 android/protocol/core-commands-qemu.c \ 313 314$(call gen-hx-header,qemu-monitor.hx,qemu-monitor.h,monitor.c) 315$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h) 316$(call gen-hw-config-defs) 317 318ifeq ($(HOST_OS),darwin) 319 FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit 320 LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%) 321endif 322 323# Generate a completely static executable if needed. 324# Note that this means no sound and graphics on Linux. 325# 326ifeq ($(CONFIG_STATIC_EXECUTABLE),true) 327 LOCAL_SRC_FILES += dynlink-static.c 328 LOCAL_LDLIBS += -static 329endif 330 331# The following files cannot be in static libraries because they contain 332# constructor functions that are otherwise stripped by the final linker 333LOCAL_SRC_FILES += $(HW_OBJ_SOURCES) 334LOCAL_CFLAGS += $(HW_OBJ_CFLAGS) 335 336LOCAL_SRC_FILES += $(BLOCK_SOURCES) 337LOCAL_CFLAGS += $(BLOCK_CFLAGS) 338 339LOCAL_MODULE_TAGS := debug 340 341$(call end-emulator-program) 342 343############################################################################## 344############################################################################## 345### 346### emulator-$ARCH: Standalone emulator program 347### 348### 349 350common_LOCAL_LDLIBS = 351common_LOCAL_CFLAGS = 352common_LOCAL_SRC_FILES = 353 354 355common_LOCAL_STATIC_LIBRARIES := \ 356 emulator-libui \ 357 emulator-libqemu \ 358 emulator-target-$(EMULATOR_TARGET_CPU) \ 359 emulator-libelff \ 360 emulator-common \ 361 362common_LOCAL_LDLIBS += \ 363 $(EMULATOR_COMMON_LDLIBS) \ 364 $(EMULATOR_LIBQEMU_LDLIBS) \ 365 $(EMULATOR_LIBUI_LDLIBS) \ 366 $(ELFF_LDLIBS) \ 367 368common_LOCAL_CFLAGS += \ 369 $(EMULATOR_TARGET_CFLAGS) \ 370 $(EMULATOR_COMMON_CFLAGS) \ 371 $(EMULATOR_LIBQEMU_CFLAGS) \ 372 $(EMULATOR_LIBUI_CFLAGS) 373 374common_LOCAL_SRC_FILES := \ 375 audio/audio.c \ 376 disas.c \ 377 dma-helpers.c \ 378 gdbstub.c \ 379 keymaps.c \ 380 loader.c \ 381 monitor.c \ 382 qemu-timer.c \ 383 qemu-timer-common.c \ 384 user-events-qemu.c \ 385 vl-android.c \ 386 android/cmdline-option.c \ 387 android/console.c \ 388 android/display.c \ 389 android/display-core.c \ 390 android/help.c \ 391 android/main-common.c \ 392 android/main.c \ 393 android/opengles.c \ 394 android/protocol/core-commands-qemu.c \ 395 android/protocol/ui-commands-qemu.c \ 396 android/ 397 398 399# The following files cannot be in static libraries because they contain 400# constructor functions that are otherwise stripped by the final linker 401common_LOCAL_SRC_FILES += $(HW_OBJ_SOURCES) 402common_LOCAL_CFLAGS += $(HW_OBJ_CFLAGS) 403 404common_LOCAL_SRC_FILES += $(BLOCK_SOURCES) 405common_LOCAL_CFLAGS += $(BLOCK_CFLAGS) 406 407common_LOCAL_SRC_FILES += $(SDLMAIN_SOURCES) 408 409# Generate a completely static executable if needed. 410# Note that this means no sound and graphics on Linux. 411# 412ifeq ($(CONFIG_STATIC_EXECUTABLE),true) 413 common_LOCAL_SRC_FILES += dynlink-static.c 414 common_LOCAL_LDLIBS += -static 415endif 416 417## one for 32-bit 418$(call start-emulator-program, emulator-$(EMULATOR_TARGET_ARCH)) 419LOCAL_STATIC_LIBRARIES += \ 420 emulator-libui \ 421 emulator-libqemu \ 422 emulator-target-$(EMULATOR_TARGET_CPU) \ 423 emulator-libelff \ 424 emulator-common \ 425 $(SDL_STATIC_LIBRARIES) 426LOCAL_LDLIBS += $(common_LOCAL_LDLIBS) 427LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) 428LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) 429$(call gen-hx-header,qemu-monitor.hx,qemu-monitor.h,monitor.c) 430$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h) 431$(call gen-hw-config-defs) 432$(call end-emulator-program) 433 434 435## another for 64-bit, see note in file Makefile.common emulator64-common 436ifeq ($(HOST_OS),linux) 437 ifneq ($(BUILD_STANDALONE_EMULATOR),true) 438 $(call start-emulator-program, emulator64-$(EMULATOR_TARGET_ARCH)) 439 LOCAL_STATIC_LIBRARIES += \ 440 emulator64-libui \ 441 emulator64-libqemu \ 442 emulator64-target-$(EMULATOR_TARGET_CPU) \ 443 emulator64-libelff \ 444 emulator64-common \ 445 $(SDL_STATIC_LIBRARIES_64) 446 LOCAL_LDLIBS += $(common_LOCAL_LDLIBS) -m64 447 LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64 448 LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) 449 $(call gen-hx-header,qemu-monitor.hx,qemu-monitor.h,monitor.c) 450 $(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h) 451 $(call gen-hw-config-defs) 452 $(call end-emulator-program) 453 endif # BUILD_STANDALONE_EMULATOR == nil 454endif # HOST_OS == linux 455