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

OLD_LOCAL_PATH := $(LOCAL_PATH)
LOCAL_PATH := $(call my-dir)

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 := \
    $(ANDROID_EMU_INCLUDES) \
    $(LOCAL_PATH)/android-qemu1-glue/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) \
    $(MINIGLIB_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)

LOCAL_PATH := $(OLD_LOCAL_PATH)
