| # 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_OLD_LOCAL_PATH := $(LOCAL_PATH) |
| |
| LOCAL_PATH := $(call my-dir) |
| |
| 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) \ |
| $(ANDROID_EMU_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 \ |
| |
| 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 |
| |
| LOCAL_PATH := $(QEMU1_OLD_LOCAL_PATH) |