ifeq ($(TARGET_ARCH),arm)
LOCAL_PATH:= $(call my-dir)

# determine the location of platform-specific directories
#
CONFIG_DIRS     := \
    $(LOCAL_PATH)/android/config \
    $(LOCAL_PATH)/android/config/$(HOST_PREBUILT_TAG)

CONFIG_INCLUDES := $(CONFIG_DIRS:%=-I%)

MY_CFLAGS := $(CONFIG_INCLUDES) -O2 -g \
             -fno-PIC \
             -falign-functions=0 \
             -fomit-frame-pointer \

# Overwrite configuration for debug builds.
#
ifeq ($(BUILD_DEBUG_EMULATOR),true)
    MY_CFLAGS := $(CONFIG_INCLUDES) -O0 -g \
                 -fno-PIC -falign-functions=0
endif

MY_LDLIBS :=

# this is needed to build the emulator on 64-bit Linux systems
ifeq ($(HOST_OS)-$(HOST_ARCH),linux-x86)
  MY_CFLAGS += -Wa,--32
endif

ifeq ($(HOST_OS),freebsd)
  MY_CFLAGS += -Wa,--32 -I /usr/local/include
endif

ifeq ($(HOST_OS),windows)
  MY_CFLAGS += -D_WIN32 -mno-cygwin
  # we need Win32 features  that are available since Windows 2000 Professional/Server (NT 5.0)
  MY_CFLAGS += -DWINVER=0x501
endif

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

ifeq ($(HOST_OS),darwin)
    MY_CFLAGS += -mdynamic-no-pic

    # When building on Leopard or above, we need to use the 10.4 SDK
    # or the generated binary will not run on Tiger.
    DARWIN_VERSION := $(strip $(shell sw_vers -productVersion))
    ifneq ($(filter 10.1 10.2 10.3 10.1.% 10.2.% 10.3.%,$(DARWIN_VERSION)),)
        $(error Building the Android emulator requires OS X 10.4 or above)
    endif
    ifeq ($(filter 10.4 10.4.%,$(DARWIN_VERSION)),)
        # We are on Leopard or above
        TIGER_SDK := /Developer/SDKs/MacOSX10.4u.sdk
        ifeq ($(strip $(wildcard $(TIGER_SDK))),)
            $(info  Please install the 10.4 SDK on this machine at $(TIGER_SDK))
            $(error Aborting the build.)
        endif
        MY_CFLAGS += -isysroot $(TIGER_SDK) -mmacosx-version-min=10.4 -DMACOSX_DEPLOYMENT_TARGET=10.4
        MY_LDLIBS += -isysroot $(TIGER_SDK) -Wl,-syslibroot,$(TIGER_SDK) -mmacosx-version-min=10.4
    endif
endif
MY_CC := $(HOST_CC)

# BUILD_STANDALONE_EMULATOR is only defined when building with
# the android-rebuild.sh script. The script will also provide
# adequate values for HOST_CC
#
ifneq ($(BUILD_STANDALONE_EMULATOR),true)

  ifneq ($(USE_CCACHE),)
    MY_CC := prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache $(MY_CC)
  endif
endif


ifneq ($(combo_target)$(TARGET_SIMULATOR),HOST_true)
  ifneq ($(HOST_ARCH),x86_64)
    MY_CFLAGS += -m32
    MY_LDLIBS += -m32
  endif
endif

include $(CLEAR_VARS)

###########################################################
# Zlib configuration
#
ZLIB_DIR := distrib/zlib-1.2.3
include $(LOCAL_PATH)/$(ZLIB_DIR)/sources.make

###########################################################
# Libpng configuration
#
LIBPNG_DIR := distrib/libpng-1.2.19
include $(LOCAL_PATH)/$(LIBPNG_DIR)/sources.make

###############################################################################
# build the TCG code generator
#
include $(CLEAR_VARS)

LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
LOCAL_CC                        := $(MY_CC)
LOCAL_CFLAGS                    := $(MY_CFLAGS) $(LOCAL_CFLAGS)
LOCAL_LDLIBS                    := $(MY_LDLIBS)
LOCAL_MODULE                    := emulator-tcg

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

TCG_CFLAGS := -I$(LOCAL_PATH)/tcg -I$(LOCAL_PATH)/tcg/$(TCG_TARGET)

LOCAL_CFLAGS += $(TCG_CFLAGS) \
                -I$(LOCAL_PATH)/target-arm \
                -I$(LOCAL_PATH)/fpu \

LOCAL_SRC_FILES := \
    tcg/tcg.c \
    tcg/tcg-dyngen.c \
    tcg/tcg-runtime.c \

include $(BUILD_HOST_STATIC_LIBRARY)

##############################################################################
# build the HW emulation support
#
include $(CLEAR_VARS)

LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
LOCAL_CC                        := $(MY_CC)
LOCAL_MODULE                    := emulator-hw

HW_CFLAGS    := -I$(LOCAL_PATH)/hw

LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS)
LOCAL_CFLAGS += -I$(LOCAL_PATH)/target-arm -I$(LOCAL_PATH)/fpu $(HW_CFLAGS)
LOCAL_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)

HW_SOURCES := \
    android_arm.c \
    arm_pic.c \
    cdrom.c \
    dma.c \
    irq.c \
    goldfish_audio.c \
    goldfish_battery.c \
    goldfish_device.c \
    goldfish_events_device.c \
    goldfish_fb.c \
    goldfish_interrupt.c \
    goldfish_memlog.c \
    goldfish_mmc.c \
    goldfish_nand.c  \
    goldfish_switch.c \
    goldfish_timer.c \
    goldfish_trace.c \
    goldfish_tty.c \
    pci.c \
    scsi-disk.c \
    smc91c111.c \
    usb-hid.c \
    usb-hub.c \
    usb-msd.c \
    usb-ohci.c \
    usb.c \

LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%)

include $(BUILD_HOST_STATIC_LIBRARY)

##############################################################################
# build the ARM-specific emulation engine sources
#
include $(CLEAR_VARS)

LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
LOCAL_CC                        := $(MY_CC)
LOCAL_MODULE                    := emulator-arm
LOCAL_LDLIBS                    := $(MY_LDLIBS)
LOCAL_CFLAGS                    := $(MY_CFLAGS) $(LOCAL_CFLAGS)
LOCAL_STATIC_LIBRARIES          := emulator-hw

LOCAL_CFLAGS := -fno-PIC -fomit-frame-pointer -Wno-sign-compare
LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS)

LOCAL_CFLAGS += -I$(LOCAL_PATH) \
                -I$(LOCAL_PATH)/target-arm \
                -I$(LOCAL_PATH)/fpu \
                $(TCG_CFLAGS) \
                $(HW_CFLAGS) \

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

LOCAL_SRC_FILES += exec.c cpu-exec.c  \
                   target-arm/op_helper.c \
                   target-arm/iwmmxt_helper.c \
                   target-arm/neon_helper.c \
                   target-arm/helper.c \
                   target-arm/translate.c \
                   target-arm/machine.c \
                   translate-all.c \
                   hw/armv7m.c \
                   hw/armv7m_nvic.c \
                   arm-semi.c \
                   trace.c \
                   varint.c \
                   dcache.c \

LOCAL_SRC_FILES += fpu/softfloat.c

include $(BUILD_HOST_STATIC_LIBRARY)

##############################################################################
# SDL-related definitions
#

SDL_CONFIG ?= prebuilt/$(HOST_PREBUILT_TAG)/sdl/bin/sdl-config
SDL_CFLAGS := $(shell $(SDL_CONFIG) --cflags)

# We need to filter out the _GNU_SOURCE variable because it breaks recent
# releases of Cygwin when using the -mno-cygwin option. Moreover, we don't
# need this macro at all to build the Android emulator.
SDL_CFLAGS := $(filter-out -D_GNU_SOURCE=1,$(SDL_CFLAGS))
SDL_LDLIBS := $(filter-out %.a %.lib,$(shell $(SDL_CONFIG) --static-libs))


##############################################################################
# determine audio sources, build the prebuilt audio-library if needed
#

# determine AUDIO sources based on current configuration
#
AUDIO_SOURCES := audio.c noaudio.c wavaudio.c sdlaudio.c wavcapture.c mixeng.c
AUDIO_CFLAGS  := -I$(LOCAL_PATH)/audio -DHAS_AUDIO
AUDIO_LDLIBS  :=

ifeq ($(HOST_OS),darwin)
  CONFIG_COREAUDIO ?= yes
endif

ifeq ($(HOST_OS),windows)
  CONFIG_WINAUDIO ?= yes
endif

ifeq ($(HOST_OS),linux)
  CONFIG_OSS  ?= yes
  CONFIG_ALSA ?= yes
  CONFIG_ESD  ?= yes
endif

ifeq ($(HOST_OS),freebsd)
  CONFIG_OSS ?= yes
endif

ifeq ($(CONFIG_COREAUDIO),yes)
  AUDIO_SOURCES += coreaudio.c
  AUDIO_CFLAGS  += -DCONFIG_COREAUDIO
  AUDIO_LDLIBS  += -Wl,-framework,CoreAudio
endif

ifeq ($(CONFIG_WINAUDIO),yes)
  AUDIO_SOURCES += winaudio.c
  AUDIO_CFLAGS  += -DCONFIG_WINAUDIO
endif

ifeq ($(CONFIG_ALSA),yes)
  AUDIO_SOURCES += alsaaudio.c audio_pt_int.c
  AUDIO_CFLAGS  += -DCONFIG_ALSA
endif

ifeq ($(CONFIG_ESD),yes)
  AUDIO_SOURCES += esdaudio.c
  AUDIO_CFLAGS  += -DCONFIG_ESD
endif

ifeq ($(CONFIG_OSS),yes)
  AUDIO_SOURCES += ossaudio.c
  AUDIO_CFLAGS  += -DCONFIG_OSS
endif

AUDIO_SOURCES := $(AUDIO_SOURCES:%=audio/%)

# determine whether we're going to use the prebuilt
# audio library (this is useful on Linux to avoid requiring
# all sound-related development packages to be installed on
# the build and developer machines).
#
# note that you can define BUILD_QEMU_AUDIO_LIB to true
# in your environment to force recompilation.
#
QEMU_AUDIO_LIB :=

ifneq ($(BUILD_STANDALONE_EMULATOR),true)
  QEMU_AUDIO_LIB := $(wildcard \
	prebuilt/$(HOST_PREBUILT_TAG)/emulator/libqemu-audio.a)
endif

ifeq ($(BUILD_QEMU_AUDIO_LIB),true)
  include $(CLEAR_VARS)
  LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
  LOCAL_CC                        := $(MY_CC)
  LOCAL_MODULE                    := libqemu-audio
  LOCAL_LDLIBS                    := $(MY_LDLIBS)

  LOCAL_CFLAGS := -Wno-sign-compare \
                  -fno-strict-aliasing -W -Wall -Wno-unused-parameter \
                  -I$(LOCAL_PATH) \
                  -I$(LOCAL_PATH)/target-arm \
                  -I$(LOCAL_PATH)/fpu \

  # this is very important, otherwise the generated binaries may
  # not link properly on our build servers
  ifeq ($(HOST_OS),linux)
    LOCAL_CFLAGS += -fno-stack-protector
  endif

  LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(AUDIO_CFLAGS)

  LOCAL_CFLAGS += $(SDL_CFLAGS)

  LOCAL_SRC_FILES += $(AUDIO_SOURCES)

  include $(BUILD_HOST_STATIC_LIBRARY)
  QEMU_AUDIO_LIB := $(LOCAL_BUILT_MODULE)

endif  # !QEMU_AUDIO_LIB

##############################################################################
# now build the emulator itself
#
include $(CLEAR_VARS)

LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
LOCAL_CC                        := $(MY_CC)
LOCAL_MODULE                    := emulator
LOCAL_STATIC_LIBRARIES          := emulator-hw emulator-arm emulator-tcg
LOCAL_LDLIBS                    := $(MY_LDLIBS)

# don't remove the -fno-strict-aliasing, or you'll break things
# (e.g. slirp2/network support)
#
LOCAL_CFLAGS := -fno-PIC -fomit-frame-pointer -Wno-sign-compare \
                -fno-strict-aliasing -g -W -Wall -Wno-unused-parameter

LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS)

# add the build ID to the default macro definitions
LOCAL_CFLAGS += -DANDROID_BUILD_ID="$(strip $(BUILD_ID))-$(strip $(BUILD_NUMBER))"

# include the Zlib sources
#
LOCAL_SRC_FILES += $(ZLIB_SOURCES)
LOCAL_CFLAGS    += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)

# include the Libpng sources
#
LOCAL_SRC_FILES += $(LIBPNG_SOURCES)
LOCAL_CFLAGS    += $(LIBPNG_CFLAGS) -I$(LOCAL_PATH)/$(LIBPNG_DIR)

LOCAL_CFLAGS    += -I$(LOCAL_PATH)/ \
                   -I$(LOCAL_PATH)/target-arm \
                   -I$(LOCAL_PATH)/fpu \
                   $(TCG_CFLAGS) \
                   $(HW_CFLAGS) \

# include telephony stuff
#
TELEPHONY_SOURCES := android_modem.c modem_driver.c gsm.c sim_card.c sysdeps_qemu.c sms.c remote_call.c
LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%)
LOCAL_CFLAGS    += -I$(LOCAL_PATH)/telephony

# include sound support source files. we first try to see if we have a prebuilt audio
# library. if not, we build things the "hard" way.
#
# note that to generate the prebuilt audio library, you should do the following:
#
#   cd tools/qemu
#   ./android-rebuild.sh
#   distrib/update-audio.sh
#
ifeq ($(QEMU_AUDIO_LIB),)
  LOCAL_SRC_FILES += $(AUDIO_SOURCES)
endif  # !QEMU_AUDIO_LIB

LOCAL_CFLAGS  += $(AUDIO_CFLAGS)
LOCAL_LDLIBS  += $(AUDIO_LDLIBS)

# include slirp2 code, i.e. the user-level networking stuff
#
SLIRP_SOURCES := bootp.c     cksum.c      debug.c  if.c     ip_icmp.c  ip_input.c   ip_output.c  \
                 mbuf.c      misc.c       sbuf.c   slirp.c  socket.c   tcp_input.c  tcp_output.c \
                 tcp_subr.c  tcp_timer.c  tftp.c   udp.c

LOCAL_SRC_FILES += $(SLIRP_SOURCES:%=slirp2/%)
LOCAL_CFLAGS    += -I$(LOCAL_PATH)/slirp2

# socket proxy support
#
PROXY_SOURCES := \
    proxy_common.c \
    proxy_http.c \
    proxy_http_connector.c \
    proxy_http_rewriter.c \

LOCAL_SRC_FILES += $(PROXY_SOURCES:%=proxy/%)
LOCAL_CFLAGS    += -I$(LOCAL_PATH)/proxy

# the linux-user sources, I doubt we really need these
#
#LINUX_SOURCES := main.c elfload.c mmap.c signal.c path.c syscall.c
#LOCAL_SRC_FILES += $(LINUX_SOURCES:%=linux-user/%)

# the skin support sources
#
SKIN_SOURCES := rect.c \
                region.c \
                image.c \
                trackball.c \
                keyboard.c \
                keyset.c \
                file.c \
                window.c \
                scaler.c \
                composer.c \
                surface.c \

LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%)
#LOCAL_CFLAGS    += -I$(LOCAL_PATH)/skin

ifeq ($(HOST_ARCH),x86)
# enable MMX code for our skin scaler
LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx
endif

# include other sources
#
VL_SOURCES := vl.c osdep.c cutils.c \
              block.c readline.c monitor.c console.c loader.c sockets.c \
              block-qcow.c aes.c d3des.c block-cloop.c block-dmg.c block-vvfat.c \
              block-qcow2.c block-cow.c \
              cbuffer.c \
              gdbstub.c usb-linux.c \
              vnc.c disas.c arm-dis.c \
              shaper.c charpipe.c loadpng.c \
              framebuffer.c \
              tcpdump.c \
              android/boot-properties.c \
              android/charmap.c \
              android/cmdline-option.c \
              android/config.c \
              android/console.c \
              android/gps.c \
              android/help.c \
              android/hw-control.c \
              android/hw-events.c \
              android/hw-kmsg.c \
              android/hw-lcd.c \
              android/hw-qemud.c \
              android/hw-sensors.c \
              android/main.c \
              android/resource.c \
              android/user-config.c \
              android/utils/bufprint.c \
              android/utils/debug.c \
              android/utils/dirscanner.c \
              android/utils/ini.c \
              android/utils/filelock.c \
              android/utils/misc.c \
              android/utils/path.c \
              android/utils/reflist.c \
              android/utils/stralloc.c \
              android/utils/system.c \
              android/utils/tempfile.c \
              android/utils/timezone.c \
              android/avd/hw-config.c \
              android/avd/info.c \

VL_SOURCES += hw/arm_boot.c \
              hw/android_arm.c \

ifeq ($(HOST_OS),windows)
  VL_SOURCES += block-raw-win32.c
else
  VL_SOURCES += block-raw-posix.c
endif

ifeq ($(HOST_OS),linux)
    LOCAL_LDLIBS += -lX11
endif

ifeq ($(HOST_ARCH),x86)
    VL_SOURCES += i386-dis.c
endif
ifeq ($(HOST_ARCH),x86_64)
    VL_SOURCES += i386-dis.c
endif
ifeq ($(HOST_ARCH),ppc)
    VL_SOURCES += ppc-dis.c
endif

ifeq ($(HOST_OS),windows)
  #VL_SOURCES   += tap-win32.c
  LOCAL_LDLIBS += -mno-cygwin -mwindows -mconsole
endif

LOCAL_SRC_FILES += $(VL_SOURCES)

ifeq ($(HOST_OS),linux)
  LOCAL_LDLIBS += -lutil -lrt
endif

# add SDL-specific flags
#
LOCAL_CFLAGS += $(SDL_CFLAGS)
LOCAL_LDLIBS += $(SDL_LDLIBS)
LOCAL_STATIC_LIBRARIES += libSDL libSDLmain
LOCAL_STATIC_LIBRARIES += libSDL libSDLmain

# on Windows, link the icon file as well into the executable
# unfortunately, our build system doesn't help us much, so we need
# to use some weird pathnames to make this work...
#
ifeq ($(HOST_OS),windows)
INTERMEDIATE     := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
ANDROID_ICON_OBJ := android_icon.o
ANDROID_ICON_PATH := $(LOCAL_PATH)/images
$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc
	windres $< -I $(ANDROID_ICON_PATH) -o $@

# seems to be the only way to add an object file that was not generated from
# a C/C++/Java source file to our build system. and very unfortunately,
# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
# us to put the object file in the source directory...
#
LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ)
endif

# other flags
LOCAL_CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
LOCAL_LDLIBS += -lm -lpthread

ifeq ($(HOST_OS),windows)
    LOCAL_LDLIBS += -lwinmm -lws2_32 -liphlpapi
endif

LOCAL_LDLIBS += $(QEMU_AUDIO_LIB)

LOCAL_MODULE := emulator

include $(BUILD_HOST_EXECUTABLE)

endif  # TARGET_ARCH == arm
