# 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.
###

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

# Common compiler flags for all target-dependent libraries
EMULATOR_TARGET_INCLUDES := \
    $(LOCAL_PATH)/android/config/target-$(EMULATOR_TARGET_ARCH) \
    $(LOCAL_PATH)/target-$(EMULATOR_TARGET_CPU) \
    $(LOCAL_PATH)/fpu \
    $(LOCAL_PATH)/tcg \
    $(LOCAL_PATH)/tcg/$(TCG_TARGET) \
    $(LOCAL_PATH)/slirp-android \
    $(LIBCURL_INCLUDES) \

EMULATOR_TARGET_CFLAGS := \
    -DNEED_CPU_H \
    -DTARGET_ARCH=\"$(EMULATOR_TARGET_ARCH)\"

## one for 32-bit
$(call start-emulator-library, emulator-target-$(EMULATOR_TARGET_CPU))
LOCAL_CFLAGS := \
    $(QEMU1_COMMON_CFLAGS) \
    $(EMULATOR_TARGET_CFLAGS) \

# These are required by the TCG engine.
LOCAL_CFLAGS += \
    -fno-PIC \
    -fomit-frame-pointer \
    -Wno-sign-compare

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

LOCAL_C_INCLUDES += \
    $(QEMU1_COMMON_INCLUDES) \
    $(EMULATOR_TARGET_INCLUDES) \

LOCAL_SRC_FILES += \
    android-qemu1-glue/main.c \
    android-qemu1-glue/qemu-battery-agent-impl.c \
    android-qemu1-glue/qemu-user-event-agent-impl.c \
    android-qemu1-glue/qemu-vm-operations-impl.c \
    android-qemu1-glue/skin_qt.cpp \
    arch_init.c \
    backends/msmouse.c \
    code-profile.c \
    cpus.c \
    cputlb.c \
    cpu-exec.c  \
    disas.c \
    dma-helpers.c \
    exec.c \
    fpu/softfloat.c \
    gdbstub.c \
    hw/android/goldfish/audio.c \
    hw/android/goldfish/battery.c \
    hw/android/goldfish/device.c \
    hw/android/goldfish/events_device.c \
    hw/android/goldfish/fb.c \
    hw/android/goldfish/mmc.c   \
    hw/android/goldfish/nand.c \
    hw/android/goldfish/pipe.c \
    hw/android/goldfish/profile.c \
    hw/android/goldfish/trace.c \
    hw/android/goldfish/tty.c \
    hw/android/goldfish/vmem.c \
    hw/core/dma.c \
    hw/core/irq.c \
    hw/core/loader.c \
    hw/core/qdev.c \
    hw/core/sysbus.c \
    hw/pci/pci.c \
    hw/watchdog/watchdog.c \
    log-rotate-android.c \
    main-loop.c \
    memory-android.c \
    monitor-android.c \
    qemu-timer.c \
    translate-all.c \
    tcg/optimize.c \
    tcg/tcg.c \
    tcg-runtime.c \
    ui/keymaps.c \
    util/bitmap.c \
    util/bitops.c \
    util/host-utils.c \
    util/qemu-timer-common.c \
    vl-android.c \

ifeq ($(EMULATOR_TARGET_ARCH),arm)
LOCAL_SRC_FILES += \
    disas/arm.c \
    hw/android/android_arm.c \
    hw/android/goldfish/interrupt.c \
    hw/android/goldfish/timer.c \
    hw/arm/armv7m.c \
    hw/arm/armv7m_nvic.c \
    hw/arm/boot.c \
    hw/arm/pic.c \
    hw/net/smc91c111.c \
    target-arm/arm-semi.c \
    target-arm/helper.c \
    target-arm/iwmmxt_helper.c \
    target-arm/machine.c \
    target-arm/op_helper.c \
    target-arm/neon_helper.c \
    target-arm/translate.c \

endif  # EMULATOR_TARGET_ARCH == arm

ifeq ($(EMULATOR_TARGET_ARCH),x86)
LOCAL_SRC_FILES += \
    hw/i386/pc.c \
    hw/i386/smbios.c \
    hw/input/pckbd.c \
    hw/input/ps2.c \
    hw/intc/apic.c \
    hw/intc/i8259.c \
    hw/intc/ioapic.c \
    hw/net/ne2000.c \
    hw/nvram/fw_cfg.c \
    hw/pci-host/piix.c \
    hw/timer/i8254.c \
    hw/timer/mc146818rtc.c \
    target-i386/cc_helper.c \
    target-i386/excp_helper.c \
    target-i386/fpu_helper.c \
    target-i386/helper.c \
    target-i386/int_helper.c \
    target-i386/machine.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/translate.c \

ifeq ($(BUILD_TARGET_OS),darwin)
LOCAL_SRC_FILES += \
    target-i386/hax-all.c \
    target-i386/hax-darwin.c \

endif

ifeq ($(BUILD_TARGET_OS),windows)
LOCAL_SRC_FILES += \
    target-i386/hax-all.c \
    target-i386/hax-windows.c \

endif

ifeq ($(BUILD_TARGET_OS),linux)
LOCAL_SRC_FILES += \
    target-i386/kvm.c \
    target-i386/kvm-gs-restore.c \
    kvm-all.c \
    kvm-android.c \

endif

endif  # EMULATOR_TARGET_ARCH == x86

ifeq ($(EMULATOR_TARGET_ARCH),mips)
LOCAL_SRC_FILES += \
    disas/mips.c \
    hw/android/android_mips.c \
    hw/android/goldfish/interrupt.c \
    hw/android/goldfish/timer.c \
    hw/mips/cputimer.c \
    hw/mips/mips_int.c \
    hw/mips/mips_pic.c \
    hw/net/smc91c111.c \
    target-mips/helper.c \
    target-mips/op_helper.c \
    target-mips/dsp_helper.c \
    target-mips/translate.c \
    target-mips/machine.c \

endif  # EMULATOR_TARGET_ARCH == mips

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

else
    LOCAL_SRC_FILES += \
        os-posix.c \
        util/oslib-posix.c \

endif

$(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)

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

$(call start-emulator-program, emulator$(BUILD_TARGET_SUFFIX)-$(EMULATOR_TARGET_ARCH))

LOCAL_STATIC_LIBRARIES += \
    emulator-libui \
    $(ANDROID_EMU_STATIC_LIBRARIES) \
    $(ANDROID_SKIN_STATIC_LIBRARIES) \
    $(EMULATOR_LIBUI_STATIC_LIBRARIES) \

LOCAL_WHOLE_STATIC_LIBRARIES := \
    emulator-libqemu \
    emulator-target-$(EMULATOR_TARGET_CPU) \

LOCAL_LDLIBS := \
    $(ANDROID_EMU_LDLIBS) \
    $(EMULATOR_LIBQEMU_LDLIBS) \
    $(EMULATOR_LIBUI_LDLIBS) \
    $(CXX_STD_LIB) \

LOCAL_LDFLAGS := \
    $(EMULATOR_LIBUI_LDFLAGS) \

$(call gen-hx-header,qemu-options.hx,qemu-options.def,vl-android.c qemu-options.h)
$(call gen-hw-config-defs)

ifeq ($(BUILD_TARGET_OS),windows)
  $(eval $(call insert-windows-icon))
endif

$(call end-emulator-program)
