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