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

##############################################################################
##############################################################################
###
###  gen-hw-config-defs: Generate hardware configuration definitions header
###
###  The 'gen-hw-config.py' script is used to generate the hw-config-defs.h
###  header from the an .ini file like android/avd/hardware-properties.ini
###
###  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-hw-config-defs)
###

# First, define a rule to generate a dummy "emulator_hw_config_defs" module
# which purpose is simply to host the generated header in its output directory.
intermediates := $(call intermediates-dir-for,SHARED_LIBRARIES,emulator_hw_config_defs,true)

QEMU_HARDWARE_PROPERTIES_INI := $(LOCAL_PATH)/android/avd/hardware-properties.ini
QEMU_HW_CONFIG_DEFS_H := $(intermediates)/android/avd/hw-config-defs.h
$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_PATH := $(LOCAL_PATH)
$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/android/tools/gen-hw-config.py $< $@
$(QEMU_HW_CONFIG_DEFS_H): $(QEMU_HARDWARE_PROPERTIES_INI) $(LOCAL_PATH)/android/tools/gen-hw-config.py
	$(hide) rm -f $@
	$(transform-generated-source)

QEMU_HW_CONFIG_DEFS_INCLUDES := $(intermediates)

# Second, define a function that needs to be called inside each module that contains
# a source file that includes the generated header file.
gen-hw-config-defs = \
  $(eval LOCAL_GENERATED_SOURCES += $(QEMU_HW_CONFIG_DEFS_H))\
  $(eval LOCAL_C_INCLUDES += $(QEMU_HW_CONFIG_DEFS_INCLUDES))

##############################################################################
##############################################################################
###
###  emulator-common: LIBRARY OF COMMON FUNCTIONS
###
###  THESE ARE POTENTIALLY USED BY ALL COMPONENTS
###

common_LOCAL_CFLAGS =
common_LOCAL_SRC_FILES =

EMULATOR_COMMON_CFLAGS :=

# Needed by everything about the host
EMULATOR_COMMON_CFLAGS += \
    -I$(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)

# add the build ID to the default macro definitions
ifeq ($(BUILD_STANDALONE_EMULATOR),)
EMULATOR_COMMON_CFLAGS += -DANDROID_BUILD_ID="$(strip $(BUILD_ID))-$(strip $(BUILD_NUMBER))"
endif

# For non-standalone builds, extract the major version number from the Android SDK
# tools revision number.
ifneq ($(BUILD_STANDALONE_EMULATOR),true)
    ANDROID_SDK_TOOLS_REVISION := $(shell awk -F= '/Pkg.Revision/ { print $$2; }' sdk/files/tools_source.properties)
endif

ANDROID_SDK_TOOLS_REVISION := $(strip $(ANDROID_SDK_TOOLS_REVISION))
ifdef ANDROID_SDK_TOOLS_REVISION
    EMULATOR_COMMON_CFLAGS += -DANDROID_SDK_TOOLS_REVISION=$(ANDROID_SDK_TOOLS_REVISION)
endif

# Enable large-file support (i.e. make off_t a 64-bit value)
ifeq ($(HOST_OS),linux)
EMULATOR_COMMON_CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
endif


###########################################################
# Zlib sources
#
EMULATOR_COMMON_CFLAGS += -I$(ZLIB_INCLUDES)

###########################################################
# GLib sources
#
GLIB_DIR := distrib/mini-glib
include $(LOCAL_PATH)/$(GLIB_DIR)/sources.make
EMULATOR_COMMON_CFLAGS += -I$(GLIB_INCLUDE_DIR)

common_LOCAL_SRC_FILES += $(GLIB_SOURCES)

###########################################################
# Android utility functions
#
common_LOCAL_SRC_FILES += \
	android/android-constants.c \
	android/async-console.c \
	android/async-utils.c \
	android/charmap.c \
	android/framebuffer.c \
	android/iolooper-select.c \
	android/keycode-array.c \
	android/avd/hw-config.c \
	android/avd/info.c \
	android/avd/util.c \
	android/sockets.c \
	android/sync-utils.c \
	android/base/containers/PodVector.cpp \
	android/base/containers/StringVector.cpp \
	android/base/files/PathUtils.cpp \
	android/base/Log.cpp \
	android/base/String.cpp \
	android/base/StringFormat.cpp \
	android/base/StringView.cpp \
	android/emulation/CpuAccelerator.cpp \
	android/filesystems/ext4_utils.cpp \
	android/filesystems/fstab_parser.cpp \
	android/filesystems/partition_types.cpp \
	android/filesystems/ramdisk_extractor.cpp \
	android/kernel/kernel_utils.cpp \
	android/utils/assert.c \
	android/utils/bufprint.c \
	android/utils/debug.c \
	android/utils/dll.c \
	android/utils/dirscanner.c \
	android/utils/eintr_wrapper.c \
	android/utils/filelock.c \
	android/utils/file_data.c \
	android/utils/host_bitness.c \
	android/utils/ini.c \
	android/utils/intmap.c \
	android/utils/lineinput.c \
	android/utils/mapfile.c \
	android/utils/misc.c \
	android/utils/panic.c \
	android/utils/path.c \
	android/utils/property_file.c \
	android/utils/reflist.c \
	android/utils/refset.c \
	android/utils/stralloc.c \
	android/utils/system.c \
	android/utils/tempfile.c \
	android/utils/uncompress.cpp \
	android/utils/vector.c \
	android/utils/win32_cmdline_quote.c \

common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)

common_LOCAL_CFLAGS += -I$(LIBEXT4_UTILS_INCLUDES)

## one for 32-bit
$(call start-emulator-library, emulator-common)
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hw-config-defs)
$(call end-emulator-library)

$(call start-emulator64-library, emulator64-common)
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hw-config-defs)
$(call end-emulator-library)

##############################################################################
##############################################################################
###
###  emulator-libui: LIBRARY OF UI-RELATED FUNCTIONS
###
###  THESE ARE USED BY 'emulator-ui' AND THE STANDALONE PROGRAMS
###

common_LOCAL_CFLAGS =
common_LOCAL_SRC_FILES =
common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)

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

EMULATOR_LIBUI_CFLAGS += \
    $(LIBPNG_CFLAGS) \
    -I$(LOCAL_PATH)/$(LIBPNG_DIR)

common_LOCAL_SRC_FILES += $(LIBPNG_SOURCES) android/loadpng.c

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

# Build SDL from sources except in certain cases where we use
# prebuilt libraries instead.
#
BUILD_SDL_FROM_SOURCES := true

# On linux-x86, using the prebuilts avoid installing all the X11
# development packages on our build servers. Note: When building 64-bit
# host binaries, don't use 32-bit SDL prebuilts.
ifeq ($(strip $(QEMU_HOST_TAG)$(HOST_IS_64_BIT)),linux-x86)
    BUILD_SDL_FROM_SOURCES := false
endif

# If we're building with android-configure.sh && make, always build from
# sources to catch regressions as soon as they happen.
#
ifeq ($(BUILD_STANDALONE_EMULATOR),true)
    BUILD_SDL_FROM_SOURCES := true
endif

# Except if we used android-configure.sh --sdl-config=<script>
#
ifneq ($(QEMU_SDL_CONFIG),)
   BUILD_SDL_FROM_SOURCES := false
   SDL_CONFIG := $(QEMU_SDL_CONFIG)
endif

ifneq ($(BUILD_SDL_FROM_SOURCES),true)

    SDL_CONFIG ?= prebuilts/tools/$(QEMU_HOST_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))

    # Circular dependencies between libSDL and libSDLmain
    # We repeat the libraries in the final link to work around it
    SDL_STATIC_LIBRARIES := libSDL libSDLmain libSDL libSDLmain
    SDL_STATIC_LIBRARIES_64 := lib64SDL lib64SDLmain lib64SDL lib64SDLmain

else # BUILD_SDL_FROM_SOURCES

    SDL_DIR := distrib/sdl-1.2.15
    include $(LOCAL_PATH)/$(SDL_DIR)/sources.make

    SDL_STATIC_LIBRARIES := emulator_libSDL emulator_libSDLmain emulator_libSDL emulator_libSDLmain
    SDL_STATIC_LIBRARIES_64 := emulator_lib64SDL emulator_lib64SDLmain emulator_lib64SDL emulator_lib64SDLmain

    EMULATOR_LIBUI_CFLAGS += \
        -I$(LOCAL_PATH)/$(SDL_DIR)/include

endif # BUILD_SDL_FROM_SOURCES

EMULATOR_LIBUI_CFLAGS += $(SDL_CFLAGS)
EMULATOR_LIBUI_LDLIBS += $(SDL_LDLIBS)

# The following is needed by SDL_LoadObject
ifneq ($(HOST_OS),windows)
    EMULATOR_LIBUI_LDLIBS += -ldl
endif

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

common_LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%)

common_LOCAL_SRC_FILES += \
             android/user-config.c \
             android/resource.c \
             android/qemulator.c \
             android/keycode.c \

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

common_LOCAL_CFLAGS += $(EMULATOR_LIBUI_CFLAGS)


## one for 32-bit
$(call start-emulator-library, emulator-libui)
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hw-config-defs)
$(call end-emulator-library)


$(call start-emulator64-library, emulator64-libui)
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hw-config-defs)
$(call end-emulator-library)


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

common_LOCAL_CFLAGS =
common_LOCAL_SRC_FILES =


EMULATOR_LIBQEMU_CFLAGS :=

common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)

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

common_LOCAL_CFLAGS += -Wall $(GCC_W_NO_MISSING_FIELD_INITIALIZERS)

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

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

ifeq ($(HOST_OS),linux)
  CONFIG_OSS  ?= yes
  CONFIG_ALSA ?= yes
  CONFIG_PULSEAUDIO ?= 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_PULSEAUDIO),yes)
  AUDIO_SOURCES += paaudio.c audio_pt_int.c
  AUDIO_CFLAGS  += -DCONFIG_PULSEAUDIO
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 := $(call sort,$(AUDIO_SOURCES:%=audio/%))

common_LOCAL_CFLAGS += -Wno-sign-compare \
                -fno-strict-aliasing -W -Wall -Wno-unused-parameter \

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

common_LOCAL_SRC_FILES += $(AUDIO_SOURCES)
common_LOCAL_SRC_FILES += \
    android/audio-test.c

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


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

common_LOCAL_CFLAGS += $(GCC_W_NO_MISSING_FIELD_INITIALIZERS)

# misc. sources
#
CORE_MISC_SOURCES = \
    aio-android.c \
    async.c \
    iohandler.c \
    ioport.c \
    migration-dummy-android.c \
    qemu-log.c \
    savevm.c \
    android/boot-properties.c \
    android/cbuffer.c \
    android/charpipe.c \
    android/config-file.c \
    android/core-init-utils.c   \
    android/gps.c \
    android/hw-kmsg.c \
    android/hw-lcd.c \
    android/hw-events.c \
    android/hw-control.c \
    android/hw-sensors.c \
    android/hw-qemud.c \
    android/looper-qemu.c \
    android/hw-pipe-net.c \
    android/qemu-setup.c \
    android/qemu-tcpdump.c \
    android/shaper.c \
    android/snapshot.c \
    android/async-socket-connector.c \
    android/async-socket.c \
    android/sdk-controller-socket.c \
    android/sensors-port.c \
    android/utils/timezone.c \
    android/camera/camera-format-converters.c \
    android/camera/camera-service.c \
    android/adb-server.c \
    android/adb-qemud.c \
    android/snaphost-android.c \
    android/multitouch-screen.c \
    android/multitouch-port.c \
    android/utils/jpeg-compress.c \
    net/net-android.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 \

ifeq ($(HOST_ARCH),x86)
    CORE_MISC_SOURCES += disas/i386.c
endif
ifeq ($(HOST_ARCH),x86_64)
    CORE_MISC_SOURCES += disas/i386.c
endif
ifeq ($(HOST_ARCH),ppc)
    CORE_MISC_SOURCES += disas/ppc.c \
                         util/cache-utils.c
endif

ifeq ($(HOST_OS),linux)
    CORE_MISC_SOURCES += util/compatfd.c \
                         util/qemu-thread-posix.c \
                         android/camera/camera-capture-linux.c
endif

ifeq ($(HOST_OS),windows)
  CORE_MISC_SOURCES   += tap-win32.c \
                         android/camera/camera-capture-windows.c \
                         util/qemu-thread-win32.c

else
  CORE_MISC_SOURCES   += posix-aio-compat.c
endif

ifeq ($(HOST_OS),darwin)
  CORE_MISC_SOURCES   += android/camera/camera-capture-mac.m \
                         util/compatfd.c \
                         util/qemu-thread-posix.c
endif

common_LOCAL_SRC_FILES += $(CORE_MISC_SOURCES)

# Required
common_LOCAL_CFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE=1 -I$(LOCAL_PATH)/distrib/jpeg-6b

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

common_LOCAL_SRC_FILES += $(SLIRP_SOURCES:%=slirp-android/%)
EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/slirp-android

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

common_LOCAL_SRC_FILES += $(PROXY_SOURCES:%=proxy/%)
EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/proxy

# include telephony stuff
#
TELEPHONY_SOURCES := \
    android_modem.c \
    modem_driver.c \
    gsm.c \
    sim_card.c \
    sysdeps_qemu.c \
    sms.c \
    remote_call.c

common_LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%)
EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/telephony

# QEMU's messy "object model" sources.
common_LOCAL_SRC_FILES += \
    qapi/qapi-dealloc-visitor.c \
    qapi/qapi-visit-core.c \
    qapi/qmp-input-visitor.c \
    qapi/qmp-output-visitor.c \
    qapi/string-input-visitor.c \
    qapi/string-output-visitor.c \
    qapi-auto-generated/qapi-types.c \
    qapi-auto-generated/qapi-visit.c \
    qobject/json-lexer.c \
    qobject/json-parser.c \
    qobject/json-streamer.c \
    qobject/qerror.c \
    qobject/qjson.c \
    qobject/qbool.c \
    qobject/qdict.c \
    qobject/qfloat.c \
    qobject/qint.c \
    qobject/qlist.c \
    qobject/qstring.c \
    qom/container.c \
    qom/object.c \
    qom/qom-qobject.c \

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

common_LOCAL_CFLAGS += $(EMULATOR_LIBQEMU_CFLAGS)


## one for 32-bit
$(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 intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true)
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_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hw-config-defs)
$(call end-emulator-library)


## another for 64-bit, see note in emulator64-common
$(call start-emulator64-library, emulator64-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 intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true)
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_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call gen-hw-config-defs)
$(call end-emulator-library)


# Block sources, we must compile them with each executable because they
# are only referenced by the rest of the code using constructor functions.
# If their object files are put in a static library, these are never compiled
# into the final linked executable that uses them.
#
# Normally, one would solve thus using LOCAL_WHOLE_STATIC_LIBRARIES, but
# the Darwin linker doesn't support -Wl,--whole-archive or equivalent :-(
#
BLOCK_SOURCES += \
    block.c \
    blockdev.c \
    block/qcow2.c \
    block/qcow2-refcount.c \
    block/qcow2-snapshot.c \
    block/qcow2-cluster.c \
    block/raw.c

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

BLOCK_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
BLOCK_CFLAGS += -DCONFIG_BDRV_WHITELIST=\"\"

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

common_LOCAL_CFLAGS =
common_LOCAL_SRC_FILES =

###########################################################
# Jpeg configuration
#
LIBJPEG_DIR := distrib/jpeg-6b
include $(LOCAL_PATH)/$(LIBJPEG_DIR)/sources.make

common_LOCAL_SRC_FILES += $(LIBJPEG_SOURCES)

common_LOCAL_CFLAGS += \
    $(LIBJPEG_CFLAGS) \
    -I$(LOCAL_PATH)/$(LIBJPEG_DIR)

## one for 32-bit
$(call start-emulator-library, emulator-libjpeg)
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(call end-emulator-library)


## another for 64-bit, see note in emulator64-common
$(call start-emulator64-library, emulator64-libjpeg)
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
$(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 intermediates-dir-for,$$(LOCAL_MODULE_CLASS),$$(LOCAL_MODULE),true)

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
