blob: 51f943cfc970d9707442f5dd96df3c9a8ed6d92c [file] [log] [blame]
# 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 \
-Wall \
$(GCC_W_NO_MISSING_FIELD_INITIALIZERS) \
-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/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