# When building this project, we actually generate several components which
# are the following:
#
#  - the emulator-ui program (which is target-agnostic)
#  - the target-specific qemu-android-$ARCH programs (headless emulation engines)
#  - the "standalone" emulator programs (embed both UI and engine in a single
#    binary and process), i.e. "emulator" for ARM and "emulator-x86" for x86.
#
# This file defines static host libraries that will be used by at least two
# of these components.
#

QEMU1_COMMON_CFLAGS := \
    $(EMULATOR_COMMON_CFLAGS) \

QEMU1_COMMON_INCLUDES := \
    $(EMULATOR_COMMON_INCLUDES) \
    $(LOCAL_PATH)/include

# Need to include "qapi-types.h" and other auto-generated files from
# android-configure.sh
QEMU1_COMMON_INCLUDES += $(BUILD_OBJS_DIR)/build/qemu1-qapi-auto-generated

# Zlib sources
QEMU1_COMMON_INCLUDES += $(ZLIB_INCLUDES)

# GLib sources
QEMU1_COMMON_INCLUDES += $(MINIGLIB_INCLUDES)

##############################################################################
##############################################################################
###
###  emulator-libqemu: TARGET-INDEPENDENT QEMU FUNCTIONS
###
###  THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui'
###

common_LOCAL_CFLAGS =
common_LOCAL_SRC_FILES =


EMULATOR_LIBQEMU_CFLAGS :=

AUDIO_SOURCES := noaudio.c wavaudio.c wavcapture.c mixeng.c
AUDIO_CFLAGS  := -I$(LOCAL_PATH)/audio -DHAS_AUDIO
AUDIO_LDLIBS  :=

ifeq ($(BUILD_TARGET_OS),darwin)
  CONFIG_COREAUDIO ?= yes
  AUDIO_CFLAGS += -DHOST_BSD=1
endif

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

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

ifeq ($(BUILD_TARGET_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_PULSEAUDIO),yes)
  AUDIO_SOURCES += paaudio.c audio_pt_int.c
  AUDIO_SOURCES += wrappers/pulse-audio.c
  AUDIO_CFLAGS  += -DCONFIG_PULSEAUDIO
endif

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

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

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

AUDIO_SOURCES := $(call sort,$(AUDIO_SOURCES:%=audio/%))

# other flags
ifneq ($(BUILD_TARGET_OS),windows)
    AUDIO_LDLIBS += -ldl
else
endif


EMULATOR_LIBQEMU_CFLAGS += $(AUDIO_CFLAGS)
EMULATOR_LIBQEMU_LDLIBS += $(AUDIO_LDLIBS)

ifeq ($(QEMU_TARGET_XML_SOURCES),)
    QEMU_TARGET_XML_SOURCES := arm-core arm-neon arm-vfp arm-vfp3
    QEMU_TARGET_XML_SOURCES := $(QEMU_TARGET_XML_SOURCES:%=$(LOCAL_PATH)/gdb-xml/%.xml)
endif

$(call start-emulator-library, emulator-libqemu)

# gdbstub-xml.c contains C-compilable arrays corresponding to the content
# of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script.
#
intermediates = $(call local-intermediates-dir)
QEMU_GDBSTUB_XML_C = $(intermediates)/gdbstub-xml.c
$(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH)
$(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES)
$(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES)
$(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh
	$(hide) rm -f $@
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)

LOCAL_C_INCLUDES += \
    $(QEMU1_COMMON_INCLUDES) \
    $(LOCAL_PATH)/slirp-android \
    $(intermediates) \
    $(LIBJPEG_INCLUDES) \

LOCAL_CFLAGS := \
    $(QEMU1_COMMON_CFLAGS) \
    -W \
    -Wno-sign-compare \
    -fno-strict-aliasing \
    -Wno-unused-parameter \
    -D_XOPEN_SOURCE=600 \
    -D_BSD_SOURCE=1 \
    -DCONFIG_BDRV_WHITELIST=\"\" \
    $(EMULATOR_LIBQEMU_CFLAGS) \
    $(AUDIO_CFLAGS) \

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

LOCAL_SRC_FILES += \
    $(AUDIO_SOURCES) \
    aio-android.c \
    android-qemu1-glue/android_qemud.cpp \
    android-qemu1-glue/audio-test.c \
    android-qemu1-glue/base/async/Looper.cpp \
    android-qemu1-glue/base/files/QemuFileStream.cpp \
    android-qemu1-glue/display.c \
    android-qemu1-glue/emulation/charpipe.c \
    android-qemu1-glue/emulation/CharSerialLine.cpp \
    android-qemu1-glue/emulation/serial_line.cpp \
    android-qemu1-glue/emulation/VmLock.cpp \
    android-qemu1-glue/looper-qemu.cpp \
    android-qemu1-glue/qemu-cellular-agent-impl.c \
    android-qemu1-glue/qemu-display-agent-impl.cpp \
    android-qemu1-glue/qemu-finger-agent-impl.c \
    android-qemu1-glue/qemu-location-agent-impl.c \
    android-qemu1-glue/qemu-net-agent-impl.c \
    android-qemu1-glue/qemu-sensors-agent-impl.c \
    android-qemu1-glue/qemu-setup.cpp \
    android-qemu1-glue/qemu-telephony-agent-impl.c \
    android-qemu1-glue/qemu-window-agent-impl.c \
    android-qemu1-glue/telephony/modem_init.cpp \
    android-qemu1-glue/utils/stream.cpp \
    async.c \
    audio/audio.c \
    block.c \
    blockdev.c \
    block/qcow2.c \
    block/qcow2-refcount.c \
    block/qcow2-snapshot.c \
    block/qcow2-cluster.c \
    block/raw.c \
    iohandler.c \
    ioport.c \
    migration-dummy-android.c \
    net/net-android.c \
    qemu-char.c \
    qemu-log.c \
    qobject/json-lexer.c \
    qobject/json-parser.c \
    qobject/json-streamer.c \
    qobject/qjson.c \
    qobject/qbool.c \
    qobject/qdict.c \
    qobject/qerror.c \
    qobject/qfloat.c \
    qobject/qint.c \
    qobject/qlist.c \
    qobject/qstring.c \
    savevm.c \
    slirp-android/bootp.c \
    slirp-android/cksum.c \
    slirp-android/debug.c \
    slirp-android/if.c \
    slirp-android/ip_icmp.c \
    slirp-android/ip_input.c \
    slirp-android/ip_output.c \
    slirp-android/mbuf.c \
    slirp-android/misc.c \
    slirp-android/sbuf.c \
    slirp-android/slirp.c \
    slirp-android/socket.c \
    slirp-android/tcp_input.c \
    slirp-android/tcp_output.c \
    slirp-android/tcp_subr.c \
    slirp-android/tcp_timer.c \
    slirp-android/tftp.c \
    slirp-android/udp.c \
    ui/console.c \
    ui/d3des.c \
    ui/input.c \
    ui/vnc-android.c \
    util/aes.c \
    util/cutils.c \
    util/error.c \
    util/hexdump.c \
    util/iov.c \
    util/module.c \
    util/notify.c \
    util/osdep.c \
    util/path.c \
    util/qemu-config.c \
    util/qemu-error.c \
    util/qemu-option.c \
    util/qemu-sockets-android.c \
    util/unicode.c \
    util/yield-android.c \
    $(MINIGLIB_SOURCES) \

ifeq ($(BUILD_TARGET_ARCH),x86)
    LOCAL_SRC_FILES += disas/i386.c
endif
ifeq ($(BUILD_TARGET_ARCH),x86_64)
    LOCAL_SRC_FILES += disas/i386.c
endif

ifeq ($(BUILD_TARGET_OS),windows)
    LOCAL_SRC_FILES += \
        block/raw-win32.c \
        util/qemu-thread-win32.c \

else
    LOCAL_SRC_FILES += \
        block/raw-posix.c \
        posix-aio-compat.c \
        util/compatfd.c \
        util/qemu-thread-posix.c \

endif

$(call gen-hw-config-defs)
$(call end-emulator-library)


##############################################################################
##############################################################################
###
###  gen-hx-header: Generate headers from .hx file with "hxtool" script.
###
###  The 'hxtool' script is used to generate header files from an input
###  file with the .hx suffix. I.e. foo.hx --> foo.h
###
###  Due to the way the Android build system works, we need to regenerate
###  it for each module (the output will go into a module-specific directory).
###
###  This defines a function that can be used inside a module definition
###
###  $(call gen-hx-header,<input>,<output>,<source-files>)
###
###  Where: <input> is the input file, with a .hx suffix (e.g. foo.hx)
###         <output> is the output file, with a .h or .def suffix
###         <source-files> is a list of source files that include the header
###


gen-hx-header = $(eval $(call gen-hx-header-ev,$1,$2,$3))

define gen-hx-header-ev
intermediates := $$(call local-intermediates-dir)

QEMU_HEADER_H := $$(intermediates)/$$2
$$(QEMU_HEADER_H): PRIVATE_PATH := $$(LOCAL_PATH)
$$(QEMU_HEADER_H): PRIVATE_CUSTOM_TOOL = $$(PRIVATE_PATH)/hxtool -h < $$< > $$@
$$(QEMU_HEADER_H): $$(LOCAL_PATH)/$$1 $$(LOCAL_PATH)/hxtool
	$$(transform-generated-source)

LOCAL_GENERATED_SOURCES += $$(QEMU_HEADER_H)
LOCAL_C_INCLUDES += $$(intermediates)
endef
