Home | History | Annotate | Download | only in qemu
      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