# This file is included several times to build target-specific
# modules for the Android emulator. It will be called several times
# for arm, x86 and mips
#

ifndef EMULATOR_TARGET_ARCH
$(error EMULATOR_TARGET_ARCH is not defined!)
endif

EMULATOR_TARGET_CPU := $(EMULATOR_TARGET_ARCH)
ifeq ($(EMULATOR_TARGET_CPU),x86)
  EMULATOR_TARGET_CPU := i386
endif

##############################################################################
##############################################################################
###
###  emulator-target-$CPU: target-specific emulation code.
###
###  Used by both the core and standalone programs.
###

# Common compiler flags for all target-dependent libraries
EMULATOR_TARGET_CFLAGS := \
    -I$(LOCAL_PATH)/android/config/$(HOST_PREBUILT_TAG) \
    -I$(LOCAL_PATH)/android/config/target-$(EMULATOR_TARGET_ARCH) \
    -I$(LOCAL_PATH)/target-$(EMULATOR_TARGET_CPU) \
    -I$(LOCAL_PATH)/fpu \
    -DNEED_CPU_H

TCG_TARGET := $(HOST_ARCH)
ifeq ($(HOST_ARCH),x86)
  TCG_TARGET := i386
endif
ifeq ($(HOST_ARCH),x86_64)
  TCG_TARGET := i386
endif

EMULATOR_TARGET_CFLAGS += \
    -I$(LOCAL_PATH)/tcg \
    -I$(LOCAL_PATH)/tcg/$(TCG_TARGET) \
    -DTARGET_ARCH=\"$(EMULATOR_TARGET_ARCH)\"


common_LOCAL_CFLAGS =
common_LOCAL_SRC_FILES =

common_LOCAL_CFLAGS += -I$(GLIB_INCLUDE_DIR)

# The following is to ensure that "config.h" will map to a target-specific
# configuration file header.
common_LOCAL_CFLAGS += $(EMULATOR_TARGET_CFLAGS)

common_LOCAL_SRC_FILES += \
    tcg/tcg.c \
    tcg-runtime.c \
    util/host-utils.c \

##############################################################################
# Emulated hardware devices.
#

HW_SOURCES := \
    block/cdrom.c \
    core/irq.c \
    core/qdev.c \
    core/sysbus.c \
    core/dma.c \
    android/goldfish/audio.c \
    android/goldfish/device.c \
    android/goldfish/events_device.c \
    android/goldfish/fb.c \
    android/goldfish/battery.c \
    android/goldfish/mmc.c   \
    android/goldfish/nand.c \
    android/goldfish/pipe.c \
    android/goldfish/tty.c \
    android/goldfish/vmem.c \
    pci/pci.c \
    scsi/scsi-disk.c \
    usb/dev-hid.c \
    usb/dev-hub.c \
    usb/dev-storage.c \
    usb/hcd-ohci.c \
    usb/core.c \
    watchdog/watchdog.c


ifeq ($(EMULATOR_TARGET_ARCH),arm)
HW_SOURCES += \
    android/android_arm.c \
    arm/pic.c \
    arm/boot.c \
    android/goldfish/interrupt.c \
    android/goldfish/timer.c \
    android/goldfish/trace.c \

# The following sources must be compiled with the final executables
# because they contain device_init() or machine_init() statements.
HW_OBJ_SOURCES := hw/net/smc91c111.c
HW_OBJ_CFLAGS  := $(EMULATOR_TARGET_CFLAGS)

common_LOCAL_SRC_FILES += disas/arm.c

# smc91c111.c requires <zlib.h>
common_LOCAL_CFLAGS += $(ZLIB_CFLAGS)
endif

# required to ensure we properly initialize virtual audio hardware
common_LOCAL_CFLAGS += -DHAS_AUDIO

ifeq ($(EMULATOR_TARGET_ARCH),x86)
HW_SOURCES += \
    intc/apic.c \
    intc/i8259.c \
    timer/mc146818rtc.c \
    pci-host/piix.c \
    timer/i8254.c \
    input/pckbd.c \
    intc/ioapic.c \
    input/ps2.c \
    i386/smbios.c \
    nvram/fw_cfg.c

# The following sources must be compiled with the final executables
# because they contain device_init() or machine_init() statements.
HW_OBJ_SOURCES := \
    hw/net/ne2000.c \
    hw/i386/pc.c

HW_OBJ_CFLAGS  := $(EMULATOR_TARGET_CFLAGS)

endif

ifeq ($(EMULATOR_TARGET_ARCH),mips)
HW_SOURCES += \
    android/android_mips.c \
    mips/mips_pic.c \
    android/goldfish/interrupt.c \
    android/goldfish/timer.c \
    android/goldfish/trace.c \
    mips/cputimer.c \
    mips/mips_int.c

# The following sources must be compiled with the final executables
# because they contain device_init() or machine_init() statements.
HW_OBJ_SOURCES := hw/net/smc91c111.c
HW_OBJ_CFLAGS  := $(EMULATOR_TARGET_CFLAGS)

common_LOCAL_SRC_FILES += disas/mips.c

# smc91c111.c requires <zlib.h>
LOCAL_CFLAGS += $(ZLIB_CFLAGS)
ifeq ($(ARCH_HAS_BIGENDIAN),true)
  LOCAL_CFLAGS += -DTARGET_WORDS_BIGENDIAN
endif

endif
common_LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%)

common_LOCAL_SRC_FILES += \
    backends/msmouse.c \
    cpu-exec.c  \
    cputlb.c \
    exec.c \
    main-loop.c \
    memory-android.c \
    monitor-android.c \
    translate-all.c \
    android/varint.c \

##############################################################################
# CPU-specific emulation.
#
common_LOCAL_CFLAGS += -fno-PIC -fomit-frame-pointer -Wno-sign-compare

ifeq ($(HOST_ARCH),ppc)
    common_LOCAL_CFLAGS += -D__powerpc__
endif

ifeq ($(EMULATOR_TARGET_ARCH),arm)
common_LOCAL_SRC_FILES += \
    target-arm/arm-semi.c \
    target-arm/op_helper.c \
    target-arm/iwmmxt_helper.c \
    target-arm/neon_helper.c \
    target-arm/helper.c \
    target-arm/helper-android.c \
    target-arm/translate.c \
    target-arm/machine.c \
    hw/arm/armv7m.c \
    hw/arm/armv7m_nvic.c
endif  # EMULATOR_TARGET_ARCH == arm

ifeq ($(EMULATOR_TARGET_ARCH), x86)
common_LOCAL_SRC_FILES += \
    target-i386/cc_helper.c \
    target-i386/excp_helper.c \
    target-i386/fpu_helper.c \
    target-i386/int_helper.c \
    target-i386/mem_helper.c \
    target-i386/misc_helper.c \
    target-i386/seg_helper.c \
    target-i386/smm_helper.c \
    target-i386/svm_helper.c \
    target-i386/helper.c \
    target-i386/translate.c \
    target-i386/machine.c \

ifeq ($(HOST_OS),darwin)
common_LOCAL_SRC_FILES += \
      target-i386/hax-all.c       \
      target-i386/hax-darwin.c
endif

ifeq ($(HOST_OS),windows)
common_LOCAL_SRC_FILES += \
      target-i386/hax-all.c       \
      target-i386/hax-windows.c
endif
endif  # EMULATOR_TARGET_ARCH == x86

ifeq ($(EMULATOR_TARGET_ARCH), mips)
common_LOCAL_SRC_FILES += \
    target-mips/op_helper.c \
    target-mips/helper.c \
    target-mips/translate.c \
    target-mips/machine.c
endif  # EMULATOR_TARGET_ARCH == mips

common_LOCAL_SRC_FILES += fpu/softfloat.c

# compile KVM only if target is x86 on x86 Linux
QEMU_KVM_TAG := $(QEMU_HOST_TAG)-$(EMULATOR_TARGET_ARCH)
QEMU_DO_KVM := $(if $(filter linux-x86-x86 linux-x86_64-x86,$(QEMU_KVM_TAG)),true,false)
ifeq ($(QEMU_DO_KVM),true)
    common_LOCAL_SRC_FILES += \
        target-i386/kvm.c \
        target-i386/kvm-gs-restore.c \
        kvm-all.c \
        kvm-android.c
endif

##############################################################################
# Memory-access checking support.
# Memory access checker uses information collected by instrumented code in
# libc.so in order to keep track of memory blocks allocated from heap. Memory
# checker then uses this information to make sure that every access to allocated
# memory is within allocated block. This information also allows detecting
# memory leaks and attempts to free/realloc invalid pointers.
#
common_LOCAL_CFLAGS += $(ELFF_CFLAGS)

MCHK_SOURCES := \
    memcheck.c \
    memcheck_proc_management.c \
    memcheck_malloc_map.c \
    memcheck_mmrange_map.c \
    memcheck_util.c

common_LOCAL_SRC_FILES += $(MCHK_SOURCES:%=android/qemu/memcheck/%)

common_LOCAL_SRC_FILES += \
    cpus.c \
    arch_init.c

# What a mess, os-posix.c depends on the exact values of options
# which are target specific.
ifeq ($(HOST_OS),windows)
    common_LOCAL_SRC_FILES += os-win32.c util/oslib-win32.c
else
    common_LOCAL_SRC_FILES += os-posix.c util/oslib-posix.c
endif


## one for 32-bit
$(call start-emulator-library, emulator-target-$(EMULATOR_TARGET_CPU))
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hw-config-defs)
$(call gen-hx-header,qemu-options.hx,qemu-options.def,os-posix.c os-win32.c)
$(call end-emulator-library)

ifdef EMULATOR_BUILD_64BITS
  $(call start-emulator-library, emulator64-target-$(EMULATOR_TARGET_CPU))
  LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
  LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
  $(call gen-hw-config-defs)
  $(call gen-hx-header,qemu-options.hx,qemu-options.def,os-posix.c os-win32.c)
  $(call end-emulator-library)
endif # EMULATOR_BUILD_64BITS

##############################################################################
##############################################################################
###
###  emulator-$ARCH: Standalone emulator program
###
###

common_LOCAL_LDLIBS =
common_LOCAL_CFLAGS =
common_LOCAL_SRC_FILES =


common_LOCAL_STATIC_LIBRARIES := \
    emulator-libui \
    emulator-libqemu \
    emulator-target-$(EMULATOR_TARGET_CPU) \
    emulator-libelff \
    emulator-common

common_LOCAL_LDLIBS += \
    $(EMULATOR_COMMON_LDLIBS) \
    $(EMULATOR_LIBQEMU_LDLIBS) \
    $(EMULATOR_LIBUI_LDLIBS) \
    $(ELFF_LDLIBS)

common_LOCAL_CFLAGS += \
    $(EMULATOR_TARGET_CFLAGS) \
    $(EMULATOR_COMMON_CFLAGS) \
    $(EMULATOR_LIBQEMU_CFLAGS) \
    $(EMULATOR_LIBUI_CFLAGS)

common_LOCAL_SRC_FILES := \
    audio/audio.c \
    disas.c \
    dma-helpers.c \
    gdbstub.c \
    qemu-timer.c \
    log-rotate-android.c \
    vl-android.c \
    android/cmdline-option.c \
    android/console.c \
    android/display.c \
    android/display-core.c \
    android/help.c \
    android/main-common.c \
    android/main.c \
    android/opengles.c \
    android/protocol/core-commands-qemu.c \
    android/protocol/ui-commands-qemu.c \
    android/user-events-qemu.c \
    hw/core/loader.c \
    ui/keymaps.c \
    util/qemu-timer-common.c \
    util/iov.c \

# The following files cannot be in static libraries because they contain
# constructor functions that are otherwise stripped by the final linker
common_LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
common_LOCAL_CFLAGS    += $(HW_OBJ_CFLAGS)

common_LOCAL_SRC_FILES += $(BLOCK_SOURCES)
common_LOCAL_CFLAGS    += $(BLOCK_CFLAGS)

# Generate a completely static executable if needed.
# Note that this means no sound and graphics on Linux.
#
ifneq ($(strip $(CONFIG_STATIC_EXECUTABLE)$(BUILD_HOST_static)),)
    common_LOCAL_SRC_FILES += android/dynlink-static.c
    common_LOCAL_LDLIBS    += -static
endif

## one for 32-bit
$(call start-emulator-program, emulator-$(EMULATOR_TARGET_ARCH))
LOCAL_STATIC_LIBRARIES += \
    emulator-libui \
    emulator-libqemu \
    emulator-target-$(EMULATOR_TARGET_CPU) \
    emulator-libjpeg \
    emulator-libelff \
    emulator-common \
    $(SDL_STATIC_LIBRARIES)
LOCAL_LDLIBS += $(common_LOCAL_LDLIBS)
LOCAL_LDFLAGS += $(common_LOCAL_LDFLAGS)
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h)
$(call gen-hw-config-defs)

ifeq ($(HOST_OS),windows)
  $(eval $(call insert-windows-icon))
  ifneq ($(BUILD_STANDALONE_EMULATOR),)
    # Special exception for Windows: -lmingw32 must appear before libSDLmain
    # on the link command-line, because it depends on _WinMain@16 which is
    # exported by the latter.
    LOCAL_LDFLAGS += -lmingw32
  else
    # The previous trick doesn't work with the platform build system because
    # it places all linker flags _after_ the actually libraries, so instead
    # recompiler SDLmain from source so its object file is listed in the link
    # command, forcing the linker to use it.
    LOCAL_SRC_FILES += $(SDLMAIN_SOURCES:%=$(SDL_DIR)/%)
  endif
endif

$(call end-emulator-program)


ifdef EMULATOR_BUILD_64BITS
  $(call start-emulator-program, emulator64-$(EMULATOR_TARGET_ARCH))
  LOCAL_STATIC_LIBRARIES += \
      emulator64-libui \
      emulator64-libqemu \
      emulator64-target-$(EMULATOR_TARGET_CPU) \
      emulator64-libjpeg \
      emulator64-libelff \
      emulator64-common \
      $(SDL_STATIC_LIBRARIES_64)
  LOCAL_LDLIBS += $(common_LOCAL_LDLIBS) -m64
  LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
  LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
  $(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h)
  $(call gen-hw-config-defs)
  $(call end-emulator-program)
endif # EMULATOR_BUILD_64BITS

