| # Rules to build QEMU2 for the Android emulator from sources. |
| # This file is included from external/qemu/Makefile or one of its sub-Makefiles. |
| |
| # NOTE: Previous versions of the build system defined HOST_OS and HOST_ARCH |
| # instead of BUILD_TARGET_OS and BUILD_TARGET_ARCH, so take care of these to |
| # ensure this continues to build with both versions. |
| # |
| # TODO: Remove this once the external/qemu build script changes are |
| # all submitted. |
| BUILD_TARGET_OS ?= $(HOST_OS) |
| BUILD_TARGET_ARCH ?= $(HOST_ARCH) |
| BUILD_TARGET_TAG ?= $(BUILD_TARGET_OS)-$(BUILD_TARGET_ARCH) |
| BUILD_TARGET_BITS ?= $(HOST_BITS) |
| |
| # Same for OBJS_DIR -> BUILD_OBJS_DIR |
| BUILD_OBJS_DIR ?= $(OBJS_DIR) |
| |
| QEMU2_OLD_LOCAL_PATH := $(LOCAL_PATH) |
| |
| # Assume this is under android-qemu2-glue/build/ so get up two directories |
| # to find the top-level one. |
| LOCAL_PATH := $(QEMU2_TOP_DIR) |
| |
| # If $(BUILD_TARGET_OS) is $1, then return $2, otherwise $3 |
| qemu2-if-os = $(if $(filter $1,$(BUILD_TARGET_OS)),$2,$3) |
| |
| # If $(BUILD_TARGET_ARCH) is $1, then return $2, otherwise $3 |
| qemu2-if-build-target-arch = $(if $(filter $1,$(BUILD_TARGET_ARCH)),$2,$3) |
| |
| # If $(BUILD_TARGET_OS) is not $1, then return $2, otherwise $3 |
| qemu2-ifnot-os = $(if $(filter-out $1,$(BUILD_TARGET_OS)),$2,$3) |
| |
| # If $(BUILD_TARGET_OS) is windows, return $1, otherwise $2 |
| qemu2-if-windows = $(call qemu2-if-os,windows,$1,$2) |
| |
| # If $(BUILD_TARGET_OS) is not windows, return $1, otherwise $2 |
| qemu2-if-posix = $(call qemu2-ifnot-os,windows,$1,$2) |
| |
| qemu2-if-darwin = $(call qemu2-if-os,darwin,$1,$2) |
| qemu2-if-linux = $(call qemu2-if-os,linux,$1,$2) |
| |
| QEMU2_AUTO_GENERATED_DIR := $(BUILD_OBJS_DIR)/build/qemu2-qapi-auto-generated |
| |
| QEMU2_DEPS_TOP_DIR := $(QEMU2_DEPS_PREBUILTS_DIR)/$(BUILD_TARGET_TAG) |
| QEMU2_DEPS_LDFLAGS := -L$(QEMU2_DEPS_TOP_DIR)/lib |
| |
| QEMU2_GLIB_INCLUDES := $(QEMU2_DEPS_TOP_DIR)/include/glib-2.0 \ |
| $(QEMU2_DEPS_TOP_DIR)/lib/glib-2.0/include |
| |
| QEMU2_GLIB_LDLIBS := \ |
| -lglib-2.0 \ |
| $(call qemu2-if-darwin, -liconv -lintl) \ |
| $(call qemu2-if-linux, -lpthread -lrt) \ |
| $(call qemu2-if-windows, -lole32) \ |
| |
| QEMU2_PIXMAN_INCLUDES := $(QEMU2_DEPS_TOP_DIR)/include/pixman-1 |
| QEMU2_PIXMAN_LDLIBS := -lpixman-1 |
| |
| # Ensure config-host.h can be found properly. |
| QEMU2_INCLUDES := $(LOCAL_PATH)/android-qemu2-glue/config/$(BUILD_TARGET_TAG) |
| |
| # Ensure QEMU2 headers are found. |
| QEMU2_INCLUDES += \ |
| $(LOCAL_PATH) \ |
| $(LOCAL_PATH)/include \ |
| $(QEMU2_AUTO_GENERATED_DIR) \ |
| $(ANDROID_EMU_INCLUDES) \ |
| |
| QEMU2_INCLUDES += $(QEMU2_GLIB_INCLUDES) $(QEMU2_PIXMAN_INCLUDES) |
| |
| QEMU2_CFLAGS := \ |
| $(EMULATOR_COMMON_CFLAGS) \ |
| $(call qemu2-if-windows,\ |
| -DWIN32_LEAN_AND_MEAN \ |
| -D__USE_MINGW_ANSI_STDIO=1 \ |
| -mms-bitfields) \ |
| -fno-strict-aliasing \ |
| -fno-common \ |
| $(LIBCURL_CFLAGS) \ |
| -D_GNU_SOURCE \ |
| -D_FILE_OFFSET_BITS=64 \ |
| -DCONFIG_ANDROID \ |
| $(call qemu2-if-darwin, -Wno-initializer-overrides) \ |
| |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-glue.mk |
| |
| #include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-qt.mk |
| |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-sources.mk |
| |
| # Custom fixes. |
| QEMU2_COMMON_SOURCES += \ |
| stubs/kvm.c |
| |
| # A static library containing target-independent code |
| $(call start-emulator-library,libqemu2_common) |
| |
| LOCAL_CFLAGS += $(QEMU2_CFLAGS) |
| |
| LOCAL_C_INCLUDES += \ |
| $(QEMU2_INCLUDES) \ |
| $(LOCAL_PATH)/slirp \ |
| $(LOCAL_PATH)/tcg \ |
| $(ZLIB_INCLUDES) \ |
| |
| LOCAL_SRC_FILES += \ |
| $(QEMU2_COMMON_SOURCES) \ |
| $(QEMU2_COMMON_SOURCES_$(BUILD_TARGET_TAG)) |
| |
| LOCAL_GENERATED_SOURCES += \ |
| $(QEMU2_AUTO_GENERATED_DIR)/qapi-event.c \ |
| $(QEMU2_AUTO_GENERATED_DIR)/qapi-types.c \ |
| $(QEMU2_AUTO_GENERATED_DIR)/qapi-visit.c \ |
| $(QEMU2_AUTO_GENERATED_DIR)/qmp-marshal.c \ |
| $(QEMU2_AUTO_GENERATED_DIR)/trace/generated-events.c \ |
| $(QEMU2_AUTO_GENERATED_DIR)/trace/generated-tracers.c \ |
| |
| # Stuff from libqemuutil, order follows util/Makefile.objs |
| LOCAL_SRC_FILES += \ |
| qapi/qapi-visit-core.c \ |
| qapi/qapi-dealloc-visitor.c \ |
| qapi/qmp-input-visitor.c \ |
| qapi/qmp-output-visitor.c \ |
| qapi/qmp-registry.c \ |
| qapi/qmp-dispatch.c \ |
| qapi/string-input-visitor.c \ |
| qapi/string-output-visitor.c \ |
| qapi/opts-visitor.c \ |
| qapi/qmp-event.c \ |
| qapi/qapi-util.c \ |
| qobject/qint.c \ |
| qobject/qstring.c \ |
| qobject/qdict.c \ |
| qobject/qlist.c \ |
| qobject/qfloat.c \ |
| qobject/qbool.c \ |
| qobject/qjson.c \ |
| qobject/json-lexer.c \ |
| qobject/json-streamer.c \ |
| qobject/json-parser.c \ |
| qobject/qerror.c \ |
| trace/control.c \ |
| trace/qmp.c \ |
| util/osdep.c \ |
| util/cutils.c \ |
| util/unicode.c \ |
| util/qemu-timer-common.c \ |
| $(call qemu2-if-windows, \ |
| util/oslib-win32.c \ |
| util/qemu-thread-win32.c \ |
| util/event_notifier-win32.c \ |
| ) \ |
| $(call qemu2-if-posix, \ |
| util/oslib-posix.c \ |
| util/qemu-thread-posix.c \ |
| util/event_notifier-posix.c \ |
| util/qemu-openpty.c \ |
| ) \ |
| util/envlist.c \ |
| util/path.c \ |
| util/module.c \ |
| $(call qemu2-if-build-target-arch,x86, util/host-utils.c) \ |
| util/bitmap.c \ |
| util/bitops.c \ |
| util/hbitmap.c \ |
| util/fifo8.c \ |
| util/acl.c \ |
| util/error.c \ |
| util/qemu-error.c \ |
| $(call qemu2-if-posix, \ |
| util/compatfd.c \ |
| ) \ |
| util/id.c \ |
| util/iov.c \ |
| util/aes.c \ |
| util/qemu-config.c \ |
| util/qemu-sockets.c \ |
| util/uri.c \ |
| util/notify.c \ |
| util/qemu-option.c \ |
| util/qemu-progress.c \ |
| util/hexdump.c \ |
| util/crc32c.c \ |
| util/throttle.c \ |
| util/getauxval.c \ |
| util/readline.c \ |
| util/rfifolock.c \ |
| $(call qemu2-if-windows, \ |
| util/shared-library-win32.c \ |
| ) \ |
| $(call qemu2-if-posix, \ |
| util/shared-library-posix.c \ |
| ) \ |
| |
| $(call gen-hw-config-defs) |
| QEMU2_INCLUDES += $(QEMU_HW_CONFIG_DEFS_INCLUDES) |
| |
| LOCAL_SRC_FILES += \ |
| $(QEMU2_GLUE_SOURCES) |
| |
| $(call end-emulator-library) |
| |
| # Special case, the following sources are only used by the arm64 |
| # target but cannot be part of libqemu2_aarch64 because they need |
| # to be compiled without NEED_CPU_H |
| $(call start-emulator-library,libqemu2_common_aarch64) |
| |
| LOCAL_CPP_EXTENSION := .cc |
| |
| LOCAL_C_INCLUDES += \ |
| $(QEMU2_INCLUDES) \ |
| $(LOCAL_PATH)/target-arm \ |
| $(LOCAL_PATH)/disas/libvixl |
| |
| LOCAL_CFLAGS += $(QEMU2_CFLAGS) |
| |
| LOCAL_SRC_FILES += \ |
| disas/arm-a64.cc \ |
| disas/libvixl/a64/decoder-a64.cc \ |
| disas/libvixl/a64/disasm-a64.cc \ |
| disas/libvixl/a64/instructions-a64.cc \ |
| disas/libvixl/utils.cc \ |
| |
| $(call end-emulator-library) |
| |
| QEMU2_TARGET := x86 |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-target.mk |
| |
| QEMU2_TARGET := x86_64 |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-target.mk |
| |
| QEMU2_TARGET := arm |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-target.mk |
| |
| QEMU2_TARGET := arm64 |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-target.mk |
| |
| QEMU2_TARGET := mips |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-target.mk |
| |
| QEMU2_TARGET := mips64 |
| include $(LOCAL_PATH)/android-qemu2-glue/build/Makefile.qemu2-target.mk |
| |
| LOCAL_PATH := $(QEMU2_OLD_LOCAL_PATH) |