aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@android.com>2011-02-07 18:10:54 +0100
committerDavid 'Digit' Turner <digit@android.com>2011-02-24 01:15:23 +0100
commitaff94b88c4ec057f20950d5e7a88b90cc4d97dce (patch)
tree589c82139a6575bec8202eb4bb4c792729a870de
parent02f10347d2244c192de8da96a6d6a6a66c394721 (diff)
downloadexternal_qemu-aff94b88c4ec057f20950d5e7a88b90cc4d97dce.zip
external_qemu-aff94b88c4ec057f20950d5e7a88b90cc4d97dce.tar.gz
external_qemu-aff94b88c4ec057f20950d5e7a88b90cc4d97dce.tar.bz2
Build arm and x86 binaries at the same time.
This patch modifies the way we build the emulator's various programs. It reduces the number of static libraries generated, and better segregates between common, ui, qemu and target-specific code. Note that we build both the arm and x86 binaries at the same time in all build scenarios for now. This is done to catch build regressions as soon as possible. Change-Id: I6240705041e137e32f207e1e2444c614c52aaf05
-rw-r--r--Makefile12
-rw-r--r--Makefile.android1271
-rw-r--r--Makefile.common613
-rw-r--r--Makefile.target353
-rw-r--r--android/build/definitions.make8
-rw-r--r--android/config/config.h18
-rw-r--r--android/config/target-arm/config.h5
-rw-r--r--android/config/target-x86/config.h3
8 files changed, 1072 insertions, 1211 deletions
diff --git a/Makefile b/Makefile
index 9bb69f3..053525c 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,16 @@
# limitations under the License.
#
+# disable implicit rules
+.SUFFIXES:
+%:: %,v
+%:: RCS/%
+%:: RCS/%,v
+%:: s.%
+%:: SCCS/s.%
+%.c: %.w %.ch
+
+
# this is a set of definitions that allow the usage of Makefile.android
# even if we're not using the Android build system.
#
@@ -24,7 +34,7 @@ CONFIG_MAKE := $(OBJS_DIR)/config.make
CONFIG_H := $(OBJS_DIR)/config-host.h
ifeq ($(wildcard $(CONFIG_MAKE)),)
- $(error "The configuration file '$(CONFIG_MAKE)' doesnt' exist, please run the "rebuilt.sh" script)
+ $(error "The configuration file '$(CONFIG_MAKE)' doesnt' exist, please run the "android-configure.sh" script)
endif
include $(CONFIG_MAKE)
diff --git a/Makefile.android b/Makefile.android
index a6dd83a..095524a 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -17,7 +17,6 @@ endif
# determine the location of platform-specific directories
#
CONFIG_DIRS := \
- $(LOCAL_PATH)/android/config \
$(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)
ifeq ($(BUILD_STANDALONE_EMULATOR),true)
@@ -42,13 +41,6 @@ ifeq ($(BUILD_DEBUG_EMULATOR),true)
-fno-PIC -falign-functions=0
endif
-MY_CFLAGS += -DCONFIG_MEMCHECK
-
-# prepare config.h for x86
-ifeq ($(TARGET_ARCH),x86)
-MY_CFLAGS += -DARCH_FLAGS_x86
-endif
-
MY_LDLIBS :=
# this is needed to build the emulator on 64-bit Linux systems
@@ -96,6 +88,19 @@ endif
# adequate values for HOST_CC
#
ifneq ($(BUILD_STANDALONE_EMULATOR),true)
+ # On Linux, use our custom 32-bit host toolchain, which contains the
+ # relevant headers and 32-bit libraries for audio (The host 64-bit Lucid
+ # doesn't provide these anymore, only their 64-bit versions).
+ ifeq ($(HOST_OS),linux)
+ HOST_SDK_TOOLCHAIN_PREFIX := prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/bin/i686-linux
+ # Don't do anything if the toolchain is not there
+ ifneq (,$(strip $(wildcard $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc)))
+ HOST_CC := $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc
+ HOST_CXX := $(HOST_SDK_TOOLCHAIN_PREFIX)-g++
+ HOST_AR := $(HOST_SDK_TOOLCHAIN_PREFIX)-ar
+ MY_CC := $(HOST_CC)
+ endif # $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc exists
+ endif # HOST_OS == linux
ifneq ($(USE_CCACHE),)
ccache := prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache
@@ -119,751 +124,41 @@ endif
#
MY_CFLAGS += -Wall -Wno-missing-field-initializers
-include $(CLEAR_VARS)
-
-###########################################################
-# Zlib configuration
-#
-ZLIB_DIR := distrib/zlib-1.2.3
-include $(LOCAL_PATH)/$(ZLIB_DIR)/sources.make
-
-###########################################################
-# Libpng configuration
-#
-LIBPNG_DIR := distrib/libpng-1.2.19
-include $(LOCAL_PATH)/$(LIBPNG_DIR)/sources.make
-
-###############################################################################
-# build the TCG code generator
-#
-include $(CLEAR_VARS)
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS)
-LOCAL_LDLIBS := $(MY_LDLIBS)
-LOCAL_MODULE := emulator-tcg
-
-TCG_TARGET := $(HOST_ARCH)
-ifeq ($(TCG_TARGET),x86)
- TCG_TARGET := i386
-endif
-
-TCG_CFLAGS := -I$(LOCAL_PATH)/tcg -I$(LOCAL_PATH)/tcg/$(TCG_TARGET)
-
-LOCAL_CFLAGS += $(TCG_CFLAGS) -DNEED_CPU_H \
- -I$(LOCAL_PATH)/$(EMULATOR_TARGET_CPU) \
- -I$(LOCAL_PATH)/fpu \
-
-LOCAL_SRC_FILES := \
- tcg/tcg.c \
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-##############################################################################
-# build the HW emulation support
-#
-include $(CLEAR_VARS)
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_LDLIBS := $(MY_LDLIBS)
-LOCAL_MODULE := emulator-hw
-
-HW_CFLAGS := -I$(LOCAL_PATH)/hw
-
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) -DNEED_CPU_H
-LOCAL_CFLAGS += -I$(LOCAL_PATH)/$(EMULATOR_TARGET_CPU) -I$(LOCAL_PATH)/fpu $(HW_CFLAGS)
-LOCAL_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
-
-HW_SOURCES := \
- bt.c \
- bt-hci.c \
- bt-hid.c \
- bt-l2cap.c \
- bt-sdp.c \
- cdrom.c \
- dma.c \
- irq.c \
- goldfish_device.c \
- goldfish_events_device.c \
- goldfish_fb.c \
- goldfish_battery.c \
- goldfish_mmc.c \
- goldfish_memlog.c \
- goldfish_nand.c \
- goldfish_tty.c \
- msmouse.c \
- pci.c \
- qdev.c \
- scsi-disk.c \
- sysbus.c \
- usb-hid.c \
- usb-hub.c \
- usb-msd.c \
- usb-ohci.c \
- usb.c \
- watchdog.c \
-
-ifeq ($(TARGET_ARCH),arm)
-HW_SOURCES += android_arm.c \
- arm_pic.c \
- smc91c111.c \
- goldfish_audio.c \
- goldfish_interrupt.c \
- goldfish_switch.c \
- goldfish_timer.c \
- goldfish_trace.c \
-
-endif
-
-ifeq ($(TARGET_ARCH),x86)
-HW_SOURCES += pc.c \
- apic.c \
- i8259.c \
- mc146818rtc.c \
- piix_pci.c \
- i8254.c \
- ne2000.c \
- pckbd.c \
- ioapic.c \
- ps2.c \
- smbios.c \
- fw_cfg.c \
-
-endif
-
-LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%)
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-##############################################################################
-# build the ELF/DWARF stuff
-# This library is used by emulator's memory checker to extract debug information
-# from the symbol files when reporting memory allocation violations. In
-# particular, this library is used to extract routine name and source file
-# location for the code address where violation has been detected.
-#
-include $(CLEAR_VARS)
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_LDLIBS := $(MY_LDLIBS)
-LOCAL_MODULE := emulator-elff
-LOCAL_CPP_EXTENSION := .cc
-
-ELFF_CFLAGS := -I$(LOCAL_PATH)/elff
-
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) -fno-exceptions
-LOCAL_CFLAGS += -I$(LOCAL_PATH)/$(EMULATOR_TARGET_CPU) -I$(LOCAL_PATH)/fpu $(ELFF_CFLAGS)
-LOCAL_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
-
-ELFF_SOURCES := \
- dwarf_cu.cc \
- dwarf_die.cc \
- dwarf_utils.cc \
- elf_alloc.cc \
- elf_file.cc \
- elf_mapped_section.cc \
- elff_api.cc \
-
-LOCAL_SRC_FILES += $(ELFF_SOURCES:%=elff/%)
-ELFF_LDLIBS := -lstdc++
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-##############################################################################
-# build the memory access checking support
-# Memory access checker uses information collected by instrumented code in
-# libc.so in order to keep track of memory blocks allocated from heap. Memory
-# checker then uses this information to make sure that every access to allocated
-# memory is within allocated block. This information also allows detecting
-# memory leaks and attempts to free/realloc invalid pointers.
-#
-include $(CLEAR_VARS)
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_LDLIBS := $(MY_LDLIBS)
-LOCAL_MODULE := emulator-memcheck
-
-MCHK_CFLAGS := -I$(LOCAL_PATH)/memcheck -I$(LOCAL_PATH)/elff
-
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) -DNEED_CPU_H
-LOCAL_CFLAGS += -I$(LOCAL_PATH)/$(EMULATOR_TARGET_CPU) -I$(LOCAL_PATH)/fpu $(MCHK_CFLAGS)
-LOCAL_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
-
-MCHK_SOURCES := \
- memcheck.c \
- memcheck_proc_management.c \
- memcheck_malloc_map.c \
- memcheck_mmrange_map.c \
- memcheck_util.c \
-
-LOCAL_SRC_FILES += $(MCHK_SOURCES:%=memcheck/%)
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-##############################################################################
-# build the CPU-specific emulation engine sources
-#
-include $(CLEAR_VARS)
-
-ifeq ($(TARGET_ARCH),arm)
-LOCAL_MODULE := emulator-arm
-endif
-ifeq ($(TARGET_ARCH),x86)
-LOCAL_MODULE := emulator-i386
-LOCAL_MODULE_TAGS := optional
-endif
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_MODULE := $(LOCAL_MODULE)
-LOCAL_LDLIBS := $(MY_LDLIBS)
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS)
-LOCAL_STATIC_LIBRARIES := emulator-hw
-
-LOCAL_CFLAGS := -fno-PIC -fomit-frame-pointer -Wno-sign-compare
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS)
-
-LOCAL_CFLAGS += -I$(LOCAL_PATH) \
- -I$(LOCAL_PATH)/$(EMULATOR_TARGET_CPU) \
- -I$(LOCAL_PATH)/fpu \
- $(TCG_CFLAGS) \
- $(HW_CFLAGS) \
- -DNEED_CPU_H \
-
-ifeq ($(HOST_ARCH),ppc)
- LOCAL_CFLAGS += -D__powerpc__
-endif
-
-ifeq ($(TARGET_ARCH),arm)
-LOCAL_SRC_FILES += exec.c cpu-exec.c \
- $(EMULATOR_TARGET_CPU)/op_helper.c \
- $(EMULATOR_TARGET_CPU)/iwmmxt_helper.c \
- $(EMULATOR_TARGET_CPU)/neon_helper.c \
- $(EMULATOR_TARGET_CPU)/helper.c \
- $(EMULATOR_TARGET_CPU)/translate.c \
- $(EMULATOR_TARGET_CPU)/machine.c \
- translate-all.c \
- hw/armv7m.c \
- hw/armv7m_nvic.c \
- arm-semi.c \
- trace.c \
- varint.c \
- dcache.c \
- softmmu_outside_jit.c \
-
-LOCAL_SRC_FILES += fpu/softfloat.c
-endif
-
-ifeq ($(TARGET_ARCH), x86)
-LOCAL_SRC_FILES += exec.c cpu-exec.c \
- $(EMULATOR_TARGET_CPU)/op_helper.c \
- $(EMULATOR_TARGET_CPU)/helper.c \
- $(EMULATOR_TARGET_CPU)/translate.c \
- $(EMULATOR_TARGET_CPU)/machine.c \
- translate-all.c \
- trace.c \
- varint.c \
- dcache.c \
- softmmu_outside_jit.c \
-
-LOCAL_SRC_FILES += fpu/softfloat-native.c
-endif
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-##############################################################################
-# SDL-related definitions
-#
-
-# Build SDL from sources except on linux-x86, to avoid installing all
-# the X11 development packages on our build servers.
-#
-BUILD_SDL_FROM_SOURCES := true
-ifeq ($(QEMU_HOST_TAG),linux-x86)
- BUILD_SDL_FROM_SOURCES := false
-endif
-ifeq ($(QEMU_HOST_TAG),darwin-x86)
- BUILD_SDL_FROM_SOURCES := false
-endif
-ifeq ($(BUILD_STANDALONE_EMULATOR),true)
- BUILD_SDL_FROM_SOURCES := true
-endif
-
-ifneq ($(SDL_CONFIG),)
- BUILD_SDL_FROM_SOURCES := false
-endif
-
-ifneq ($(BUILD_SDL_FROM_SOURCES),true)
-
-SDL_CONFIG ?= prebuilt/$(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
-
-else # !BUILD_STANDALONE_EMULATOR
-
-SDL_DIR := distrib/sdl-1.2.12
-include $(LOCAL_PATH)/$(SDL_DIR)/sources.make
-
-endif # !BUILD_STANDALONE_EMULATOR
-
-##############################################################################
-# determine audio sources, build the prebuilt audio-library if needed
-#
-
-# determine AUDIO sources based on current configuration
-#
-AUDIO_SOURCES := audio.c noaudio.c wavaudio.c wavcapture.c mixeng.c
-AUDIO_CFLAGS := -I$(LOCAL_PATH)/audio -DHAS_AUDIO
-AUDIO_LDLIBS :=
-
-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
+# Needed to build fpu/softfloat-native.h properly
+MY_CFLAGS += -D_GNU_SOURCE=1
-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/%))
-
-# determine whether we're going to use the prebuilt
-# audio library (this is useful on Linux to avoid requiring
-# all sound-related development packages to be installed on
-# the build and developer machines).
+# A useful function that can be used to start the declaration of a host
+# module. Avoids repeating the same stuff again and again.
+# Usage:
#
-# note that you can define BUILD_QEMU_AUDIO_LIB to true
-# in your environment to force recompilation.
+# $(call start-emulator-library, <module-name>)
#
-QEMU_AUDIO_LIB :=
-
-ifneq ($(BUILD_STANDALONE_EMULATOR),true)
- QEMU_AUDIO_LIB := $(wildcard \
- prebuilt/$(QEMU_HOST_TAG)/emulator/libqemu-audio.a)
-endif
-
-ifeq ($(BUILD_QEMU_AUDIO_LIB),true)
- include $(CLEAR_VARS)
- LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
- LOCAL_CC := $(MY_CC)
- LOCAL_MODULE := libqemu-audio
- LOCAL_LDLIBS := $(MY_LDLIBS)
-
- LOCAL_CFLAGS := -Wno-sign-compare \
- -fno-strict-aliasing -W -Wall -Wno-unused-parameter \
- -I$(LOCAL_PATH) \
- -I$(LOCAL_PATH)/$(EMULATOR_TARGET_CPU) \
- -I$(LOCAL_PATH)/fpu \
-
- # this is very important, otherwise the generated binaries may
- # not link properly on our build servers
- ifeq ($(HOST_OS),linux)
- LOCAL_CFLAGS += -fno-stack-protector
- endif
-
- LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(AUDIO_CFLAGS)
-
- LOCAL_CFLAGS += $(SDL_CFLAGS)
-
- LOCAL_SRC_FILES += $(AUDIO_SOURCES)
-
- include $(BUILD_HOST_STATIC_LIBRARY)
- QEMU_AUDIO_LIB := $(LOCAL_BUILT_MODULE)
-
-endif # !QEMU_AUDIO_LIB
-
-##############################################################################
-# Common CFLAGS for UI and Core builds
-
-# add the build ID to the default macro definitions
-UI_AND_CORE_CFLAGS := -DANDROID_BUILD_ID="$(strip $(BUILD_ID))-$(strip $(BUILD_NUMBER))"
-
-# 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
- UI_AND_CORE_CFLAGS += -DANDROID_SDK_TOOLS_REVISION=$(ANDROID_SDK_TOOLS_REVISION)
-endif
-
-UI_AND_CORE_CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-
-
-##############################################################################
-# Build emulator core library.
-# This library contains "pure" emulation code separated from the intricacies
-# of the UI.
+# ... declarations
#
-include $(CLEAR_VARS)
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_LDLIBS := $(MY_LDLIBS)
-LOCAL_MODULE := emulator-core
-
-# don't remove the -fno-strict-aliasing, or you'll break things
-# (e.g. slirp-android/network support)
-#
-EMULATOR_CORE_CFLAGS := -fno-PIC -Wno-sign-compare \
- -fno-strict-aliasing -g -W -Wall -Wno-unused-parameter
-
-# Needed by the upstream code
-EMULATOR_CORE_CFLAGS += -DNEED_CPU_H
-
-# Common includes for the emulator
-EMULATOR_CORE_CFLAGS += -I$(LOCAL_PATH)/ \
- -I$(LOCAL_PATH)/$(EMULATOR_TARGET_CPU) \
- -I$(LOCAL_PATH)/fpu \
- $(TCG_CFLAGS) \
- $(HW_CFLAGS) \
-
-# Required by block.c, default value is empty in upstream
-EMULATOR_CORE_CFLAGS += -DCONFIG_BDRV_WHITELIST=""
-
-# Required
-EMULATOR_CORE_CFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE=1
-# include slirp-android code, i.e. the user-level networking stuff
-#
-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
-
-LOCAL_SRC_FILES += $(SLIRP_SOURCES:%=slirp-android/%)
-EMULATOR_CORE_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 \
-
-LOCAL_SRC_FILES += $(PROXY_SOURCES:%=proxy/%)
-EMULATOR_CORE_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
-LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%)
-EMULATOR_CORE_CFLAGS += -I$(LOCAL_PATH)/telephony
-
-# include android related stuff
-#
-ANDROID_SOURCES := qemu-setup.c
-LOCAL_SRC_FILES += $(ANDROID_SOURCES:%=android/%)
-
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS)
-LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS)
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-##############################################################################
-# Build emulator UI library.
-# This library contains some emulator related UI components.
-#
-include $(CLEAR_VARS)
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_LDLIBS := $(MY_LDLIBS)
-LOCAL_MODULE := emulator-uilib
-
-EMULATOR_UI_CFLAGS :=
-
-# include the SDL sources
+# $(call end-emulator-library)
#
+start-emulator-library = \
+ $(eval include $(CLEAR_VARS)) \
+ $(eval LOCAL_NO_DEFAULT_COMPILER_FLAGS := true) \
+ $(eval LOCAL_CC := $(MY_CC)) \
+ $(eval LOCAL_CFLAGS := $(MY_CFLAGS)) \
+ $(eval LOCAL_LDLIBS := $(MY_LDLIBS)) \
+ $(eval LOCAL_MODULE_TAGS := debug) \
+ $(eval LOCAL_MODULE := $1)
-# IMPORTANT: Normally, we should add SDLMAIN_SOURCES here, however this breaks
-# the Linux mingw32 build. Apparently, the i586-mingw32-ld wants the
-# implementation of _WinMain@16 to be in an object file on the final
-# link command used to generate the executable, and will not search
-# in the static libraries that are used to build it.
-#
-LOCAL_SRC_FILES += $(SDL_SOURCES) #$(SDLMAIN_SOURCES)
-EMULATOR_UI_CFLAGS += $(SDL_CFLAGS) -I$(LOCAL_PATH)/$(SDL_DIR)/include
-
-# 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 \
-
-LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%)
-EMULATOR_UI_CFLAGS += -I$(LOCAL_PATH)/skin
-
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS) $(EMULATOR_UI_CFLAGS)
-
-LOCAL_MODULE_TAGS := debug
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-##############################################################################
-# lists of source files used to build the emulator core
-#
-
-# block sources
-#
-CORE_BLOCK_SOURCES = block.c \
- blockdev.c \
- block/qcow.c \
- block/qcow2.c \
- block/qcow2-refcount.c \
- block/qcow2-snapshot.c \
- block/qcow2-cluster.c \
- block/cloop.c \
- block/dmg.c \
- block/vvfat.c \
- block/raw.c
-ifeq ($(HOST_OS),windows)
- CORE_BLOCK_SOURCES += block/raw-win32.c
-else
- CORE_BLOCK_SOURCES += block/raw-posix.c
-endif
+# Used with start-emulator-library
+end-emulator-library = \
+ $(eval include $(BUILD_HOST_STATIC_LIBRARY))
-# hw sources
-#
-ifeq ($(TARGET_ARCH),arm)
-CORE_HW_SOURCES = hw/arm_boot.c \
- hw/android_arm.c
-endif
+# A variant of start-emulator-library to start the definition of a host
+# program instead. Use with end-emulator-program
+start-emulator-program = $(call start-emulator-library,$1)
-ifeq ($(TARGET_ARCH),x86)
-CORE_HW_SOURCES = hw/pc.c
-endif
+# A varient of end-emulator-library for host programs instead
+end-emulator-program = \
+ $(eval LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)) \
+ $(eval include $(BUILD_HOST_EXECUTABLE))
-# migration sources
-#
-CORE_MIGRATION_SOURCES = iolooper-select.c
-ifeq ($(HOST_OS),windows)
- CORE_MIGRATION_SOURCES += migration-dummy-android.c
-else
- CORE_MIGRATION_SOURCES += migration.c \
- migration-exec.c \
- migration-tcp-android.c
-endif
-
-# misc. sources
-#
-CORE_MISC_SOURCES = vl-android.c \
- async.c \
- console.c \
- qemu-malloc.c \
- cutils.c \
- osdep.c \
- loader.c \
- monitor.c \
- readline.c \
- qemu-char-android.c \
- outputchannel.c \
- qemu-error.c \
- qerror.c \
- disas.c \
- aes.c \
- d3des.c \
- vnc-android.c \
- acl.c \
- keymaps.c \
- buffered_file.c \
- cbuffer.c \
- gdbstub.c \
- input.c \
- ioport.c \
- notify.c \
- path.c \
- shaper.c \
- charpipe.c \
- tcpdump.c \
- qemu-option.c \
- savevm.c \
- net-android.c \
- aio-android.c \
- dma-helpers.c \
- qemu-config.c \
- qemu-sockets-android.c \
- bt-host.c \
- bt-vhci.c \
- module.c \
- qemu-timer.c \
- android/boot-properties.c \
- android/hw-kmsg.c \
- android/hw-lcd.c \
- android/gps.c \
- android/hw-events.c \
- android/hw-control.c \
- android/console.c \
- android/hw-sensors.c \
- android/hw-qemud.c \
- android/core-init-utils.c \
- android/config.c \
- android/snapshot.c \
- android/utils/timezone.c \
-
-ifeq ($(TARGET_ARCH),arm)
- CORE_MISC_SOURCES += arm-dis.c
-endif
-
-ifeq ($(HOST_ARCH),x86)
- CORE_MISC_SOURCES += i386-dis.c
-endif
-ifeq ($(HOST_ARCH),x86_64)
- CORE_MISC_SOURCES += i386-dis.c
-endif
-ifeq ($(HOST_ARCH),ppc)
- CORE_MISC_SOURCES += ppc-dis.c \
- cache-utils.c
-endif
-
-ifeq ($(HOST_OS),linux)
- CORE_MISC_SOURCES += usb-linux.c \
- qemu-thread.c
-else
- CORE_MISC_SOURCES += usb-dummy-android.c
-endif
-
-ifeq ($(HOST_OS),windows)
- CORE_MISC_SOURCES += tap-win32.c
-else
- CORE_MISC_SOURCES += posix-aio-compat.c
-endif
-
-# sources inherited from upstream, but not fully
-# integrated into android emulator
-#
-CORE_UPSTREAM_SOURCES = json-lexer.c \
- json-parser.c \
- json-streamer.c \
- qjson.c \
- qbool.c \
- qdict.c \
- qfloat.c \
- qint.c \
- qlist.c \
- qstring.c \
-
-
-CORE_SOURCES = $(CORE_BLOCK_SOURCES) $(CORE_HW_SOURCES)
-CORE_SOURCES += $(CORE_MIGRATION_SOURCES) $(CORE_MISC_SOURCES)
-CORE_SOURCES += $(CORE_UPSTREAM_SOURCES)
-
-CORE_SOURCES += android/audio-test.c
-
-##############################################################################
-# lists of source files used to build the emulator UI
-#
-
-UI_SOURCES = loadpng.c \
- android/user-config.c \
- android/resource.c \
- android/qemulator.c \
- android/keycode.c \
- android/help.c \
- android/avd/info.c \
-
-##############################################################################
-# lists of source files used by both, emulator UI and emulator core
-#
-
-UI_AND_CORE_SOURCES = \
- sockets.c \
- android/keycode-array.c \
- android/charmap.c \
- android/async-utils.c \
- android/sync-utils.c \
- android/async-console.c \
- android/utils/assert.c \
- android/utils/bufprint.c \
- android/utils/debug.c \
- android/utils/path.c \
- android/utils/dirscanner.c \
- android/utils/filelock.c \
- android/utils/mapfile.c \
- android/utils/misc.c \
- android/utils/panic.c \
- android/utils/reflist.c \
- android/utils/refset.c \
- android/utils/stralloc.c \
- android/utils/system.c \
- android/utils/tempfile.c \
- android/utils/vector.c \
- android/avd/hw-config.c \
- android/utils/ini.c \
-
-# include the Zlib sources
-#
-UI_AND_CORE_SOURCES += $(ZLIB_SOURCES)
-UI_AND_CORE_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
-
-# include the Libpng sources
-#
-UI_AND_CORE_SOURCES += $(LIBPNG_SOURCES)
-UI_AND_CORE_CFLAGS += $(LIBPNG_CFLAGS) -I$(LOCAL_PATH)/$(LIBPNG_DIR)
# The common libraries
#
@@ -890,471 +185,57 @@ ifeq ($(HOST_OS),darwin)
QEMU_SYSTEM_LDLIBS += -Wl,-framework,Cocoa
endif
+include $(LOCAL_PATH)/Makefile.common
-##############################################################################
-# now build the emulator itself
-#
-include $(CLEAR_VARS)
-
-LOCAL_GENERATED_SOURCES :=
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_MODULE := emulator
-ifeq ($(TARGET_ARCH),arm)
-LOCAL_STATIC_LIBRARIES := emulator-memcheck emulator-hw emulator-arm emulator-tcg
-endif
-ifeq ($(TARGET_ARCH),x86)
-LOCAL_STATIC_LIBRARIES := emulator-memcheck emulator-hw emulator-i386 emulator-tcg
-endif
-LOCAL_STATIC_LIBRARIES += emulator-elff
-LOCAL_STATIC_LIBRARIES += emulator-core emulator-uilib
-LOCAL_LDLIBS := $(MY_LDLIBS)
-
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS) $(EMULATOR_UI_CFLAGS)
-
-# add the build ID to the default macro definitions
-LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS)
-
-# include sound support source files. we first try to see if we have a prebuilt audio
-# library. if not, we build things the "hard" way.
-#
-# note that to generate the prebuilt audio library, you should do the following:
-#
-# cd tools/qemu
-# ./android-rebuild.sh
-# distrib/update-audio.sh
-#
-ifeq ($(QEMU_AUDIO_LIB),)
- LOCAL_SRC_FILES += $(AUDIO_SOURCES)
-endif # !QEMU_AUDIO_LIB
+# We want to build all variants of the emulator binaries. This makes
+# it easier to catch target-specific regressions during emulator development.
+EMULATOR_TARGET_ARCH := arm
+include $(LOCAL_PATH)/Makefile.target
-LOCAL_CFLAGS += $(AUDIO_CFLAGS)
-LOCAL_LDLIBS += $(AUDIO_LDLIBS)
-
-# the linux-user sources, I doubt we really need these
-#
-#LINUX_SOURCES := main.c elfload.c mmap.c signal.c path.c syscall.c
-#LOCAL_SRC_FILES += $(LINUX_SOURCES:%=linux-user/%)
-
-ifeq ($(HOST_ARCH),x86)
-# enable MMX code for our skin scaler
-LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx -DNEED_CPU_H
-endif
-
-# include other sources
-#
-VL_SOURCES := android/framebuffer.c \
- user-events-qemu.c \
- android/cmdline-option.c \
- android/display.c \
- android/looper-qemu.c \
- android/protocol/ui-commands-qemu.c \
- android/protocol/core-commands-qemu.c \
- android/main-common.c \
- android/main.c \
-
-# Add common system libraries
-#
-LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)
-
-LOCAL_SRC_FILES += $(VL_SOURCES) $(CORE_SOURCES) $(UI_SOURCES) $(UI_AND_CORE_SOURCES)
-
-# add SDL-specific flags
-#
-LOCAL_CFLAGS += $(SDL_CFLAGS)
-LOCAL_LDLIBS += $(SDL_LDLIBS)
-LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
-
-# add ELFF-specific flags
-#
-LOCAL_LDLIBS += $(ELFF_LDLIBS)
-
-# on Windows, link the icon file as well into the executable
-# unfortunately, our build system doesn't help us much, so we need
-# to use some weird pathnames to make this work...
-#
-ifeq ($(HOST_OS),windows)
-
-# Locate windres executable
-WINDRES := windres
-ifneq ($(USE_MINGW),)
- # When building the Windows emulator under Linux, use the MinGW one
- WINDRES := i586-mingw32msvc-windres
-endif
-
-INTERMEDIATE := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
-ANDROID_ICON_OBJ := android_icon.o
-ANDROID_ICON_PATH := $(LOCAL_PATH)/images
-$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc
- $(WINDRES) $< -I $(ANDROID_ICON_PATH) -o $@
-
-# seems to be the only way to add an object file that was not generated from
-# a C/C++/Java source file to our build system. and very unfortunately,
-# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
-# us to put the object file in the source directory...
-#
-LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ)
-endif
-
-# qemu-options.h is generated from qemu-options.hx with the "hxtool" shell script
-#
-intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
-
-QEMU_OPTIONS_H := $(intermediates)/qemu-options.h
-$(QEMU_OPTIONS_H): PRIVATE_PATH := $(LOCAL_PATH)
-$(QEMU_OPTIONS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
-$(QEMU_OPTIONS_H): $(LOCAL_PATH)/qemu-options.hx $(LOCAL_PATH)/hxtool
- $(transform-generated-source)
-
-$(intermediates)/vl-android.o: $(QEMU_OPTIONS_H)
-
-LOCAL_GENERATED_SOURCES += $(QEMU_OPTIONS_H)
-
-# qemu-monitor.h is generated from qemu-monitor.hx with the "hxtool" shell script
-#
-intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
-
-QEMU_MONITOR_H := $(intermediates)/qemu-monitor.h
-$(QEMU_MONITOR_H): PRIVATE_PATH := $(LOCAL_PATH)
-$(QEMU_MONITOR_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
-$(QEMU_MONITOR_H): $(LOCAL_PATH)/qemu-monitor.hx $(LOCAL_PATH)/hxtool
- $(transform-generated-source)
-
-$(intermediates)/vl-android.o: $(QEMU_MONITOR_H)
-
-LOCAL_GENERATED_SOURCES += $(QEMU_MONITOR_H)
-
-
-# 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.
-#
-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
-
-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)
-
-$(intermediates)/vl-android.o: $(QEMU_GDBSTUB_XML_C)
-
-LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
-
-# hw-config-defs.h is generated from android/avd/hardware-properties.ini
-#
-QEMU_HARDWARE_PROPERTIES_INI := $(LOCAL_PATH)/android/avd/hardware-properties.ini
-QEMU_HW_CONFIG_DEFS_H := $(LOCAL_PATH)/android/avd/hw-config-defs.h
-$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_PATH := $(LOCAL_PATH)
-$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_SOURCES := $(QEMU_HARDWARE_PROPERTIES_INI)
-$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/android/tools/gen-hw-config.py $(QEMU_HARDWARE_PROPERTIES_INI) $@
-$(QEMU_HW_CONFIG_DEFS_H): $(QEMU_HARDWARE_PROPERTIES_INI) $(LOCAL_PATH)/android/tools/gen-hw-config.py
- $(hide) rm -f $@
- $(transform-generated-source)
-
-$(LOCAL_PATH)/android/avd/hw-config.h: $(QEMU_HW_CONFIG_DEFS_H)
-
-LOCAL_GENERATED_SOURCES += $(QEMU_HW_CONFIG_DEFS_H)
-
-# this is already done by the Android build system, but is done for the
-# benefit of the stand-alone one.
-#
-ifeq ($(BUILD_STANDALONE_EMULATOR),true)
- LOCAL_CFLAGS += -I$(intermediates)
-endif
-
-LOCAL_LDLIBS += $(QEMU_AUDIO_LIB)
-
-# Generate a completely static executable if needed.
-# Note that this means no sound and graphics on Linux.
-#
-ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
- LOCAL_SRC_FILES += dynlink-static.c
- LOCAL_LDLIBS += -static
-endif
-
-LOCAL_MODULE := emulator
-
-# See comment about SDLMAIN_SOURCES in the 'emulator-uilib' module declarations.
-LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
-
-include $(BUILD_HOST_EXECUTABLE)
+EMULATOR_TARGET_ARCH := x86
+include $(LOCAL_PATH)/Makefile.target
##############################################################################
-# Build standalone emulator core.
-#
-include $(CLEAR_VARS)
-
-LOCAL_GENERATED_SOURCES :=
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_MODULE := qemu-android-$(TARGET_ARCH)
-ifeq ($(TARGET_ARCH),arm)
-LOCAL_STATIC_LIBRARIES := emulator-memcheck emulator-hw emulator-arm emulator-tcg
-endif
-ifeq ($(TARGET_ARCH),x86)
-LOCAL_STATIC_LIBRARIES := emulator-memcheck emulator-hw emulator-i386 emulator-tcg
-endif
-
-LOCAL_STATIC_LIBRARIES += emulator-elff
-LOCAL_STATIC_LIBRARIES += emulator-core
-LOCAL_LDLIBS := $(MY_LDLIBS)
-
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS)
-LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS) -DCONFIG_STANDALONE_CORE
-
-# include sound support source files. we first try to see if we have a prebuilt audio
-# library. if not, we build things the "hard" way.
-#
-# note that to generate the prebuilt audio library, you should do the following:
-#
-# cd tools/qemu
-# ./android-rebuild.sh
-# distrib/update-audio.sh
-#
-ifeq ($(QEMU_AUDIO_LIB),)
- LOCAL_SRC_FILES += $(AUDIO_SOURCES)
-endif # !QEMU_AUDIO_LIB
-
-LOCAL_CFLAGS += $(AUDIO_CFLAGS)
-LOCAL_LDLIBS += $(AUDIO_LDLIBS)
-
-# the linux-user sources, I doubt we really need these
-#
-#LINUX_SOURCES := main.c elfload.c mmap.c signal.c path.c syscall.c
-#LOCAL_SRC_FILES += $(LINUX_SOURCES:%=linux-user/%)
-
-# include other sources
-#
-VL_SOURCES := android/framebuffer.c \
- user-events-qemu.c \
- android/looper-qemu.c \
- android/looper-generic.c \
- android/display-core.c \
- android/protocol/attach-ui-proxy.c \
- android/protocol/fb-updates-proxy.c \
- android/protocol/user-events-impl.c \
- android/protocol/ui-commands-proxy.c \
- android/protocol/core-commands-impl.c \
-
-# Add common system libraries
-#
-LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)
-
-LOCAL_SRC_FILES += $(VL_SOURCES) $(CORE_SOURCES) $(UI_AND_CORE_SOURCES)
-
-# add ELFF-specific flags
-#
-LOCAL_LDLIBS += $(ELFF_LDLIBS)
-
-# on Windows, link the icon file as well into the executable
-# unfortunately, our build system doesn't help us much, so we need
-# to use some weird pathnames to make this work...
-#
-ifeq ($(HOST_OS),windows)
-
-# Locate windres executable
-WINDRES := windres
-ifneq ($(USE_MINGW),)
- # When building the Windows emulator under Linux, use the MinGW one
- WINDRES := i586-mingw32msvc-windres
-endif
-
-INTERMEDIATE := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
-ANDROID_ICON_OBJ := android_icon.o
-ANDROID_ICON_PATH := $(LOCAL_PATH)/images
-$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc
- $(WINDRES) $< -I $(ANDROID_ICON_PATH) -o $@
-
-# seems to be the only way to add an object file that was not generated from
-# a C/C++/Java source file to our build system. and very unfortunately,
-# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
-# us to put the object file in the source directory...
-#
-LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ)
-endif
-
-# qemu-options.h is generated from qemu-options.hx with the "hxtool" shell script
-#
-intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
-
-QEMU_OPTIONS_H := $(intermediates)/qemu-options.h
-$(QEMU_OPTIONS_H): PRIVATE_PATH := $(LOCAL_PATH)
-$(QEMU_OPTIONS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
-$(QEMU_OPTIONS_H): $(LOCAL_PATH)/qemu-options.hx $(LOCAL_PATH)/hxtool
- $(transform-generated-source)
-
-$(intermediates)/vl-android.o: $(QEMU_OPTIONS_H)
-
-LOCAL_GENERATED_SOURCES += $(QEMU_OPTIONS_H)
-
-# qemu-monitor.h is generated from qemu-monitor.hx with the "hxtool" shell script
-#
-intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
-
-QEMU_MONITOR_H := $(intermediates)/qemu-monitor.h
-$(QEMU_MONITOR_H): PRIVATE_PATH := $(LOCAL_PATH)
-$(QEMU_MONITOR_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
-$(QEMU_MONITOR_H): $(LOCAL_PATH)/qemu-monitor.hx $(LOCAL_PATH)/hxtool
- $(transform-generated-source)
-
-$(intermediates)/vl-android.o: $(QEMU_MONITOR_H)
-
-LOCAL_GENERATED_SOURCES += $(QEMU_MONITOR_H)
-
-
-# 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.
-#
-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
-
-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)
-
-$(intermediates)/vl-android.o: $(QEMU_GDBSTUB_XML_C)
-
-LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
-
-# this is already done by the Android build system, but is done for the
-# benefit of the stand-alone one.
-#
-ifeq ($(BUILD_STANDALONE_EMULATOR),true)
- LOCAL_CFLAGS += -I$(intermediates)
-endif
-
-# other flags
-ifneq ($(HOST_OS),windows)
- LOCAL_LDLIBS += -ldl
-endif
-
-LOCAL_LDLIBS += $(QEMU_AUDIO_LIB)
-
-ifeq ($(HOST_OS),darwin)
- FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit
- LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%)
-endif
-
-# Generate a completely static executable if needed.
-# Note that this means no sound and graphics on Linux.
-#
-ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
- LOCAL_SRC_FILES += dynlink-static.c
- LOCAL_LDLIBS += -static
-endif
-
-LOCAL_MODULE_TAGS := debug
-
-include $(BUILD_HOST_EXECUTABLE)
-
##############################################################################
-# now build the emulator UI
-#
-include $(CLEAR_VARS)
-
-LOCAL_GENERATED_SOURCES :=
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-LOCAL_CC := $(MY_CC)
-LOCAL_MODULE := emulator-ui
-LOCAL_STATIC_LIBRARIES := emulator-uilib
-LOCAL_LDLIBS := $(MY_LDLIBS)
+###
+### emulator-ui: UI FRONT-END PROGRAM
+###
+###
+$(call start-emulator-program, emulator-ui)
-LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_UI_CFLAGS) $(EMULATOR_CORE_CFLAGS)
+LOCAL_STATIC_LIBRARIES := \
+ emulator-common \
+ emulator-libui \
+ emulator-common \
-# add the build ID to the default macro definitions
-LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS) -DCONFIG_STANDALONE_UI
-ifeq ($(HOST_ARCH),x86)
-# enable MMX code for our skin scaler
-LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx
-endif
+LOCAL_CFLAGS += -DCONFIG_STANDALONE_UI=1
-# include other sources
-#
-VL_SOURCES := android/framebuffer.c \
- android/cmdline-option.c \
- android/config.c \
- android/looper-generic.c \
- android/snapshot.c \
- android/main-common.c \
- android/main.c \
- vl-android-ui.c \
- iolooper-select.c \
- android/protocol/core-connection.c \
- android/protocol/attach-ui-impl.c \
- android/protocol/fb-updates-impl.c \
- android/protocol/ui-commands-impl.c \
- android/protocol/core-commands-proxy.c \
- android/protocol/user-events-proxy.c \
+LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) $(EMULATOR_LIBUI_CFLAGS)
+LOCAL_LDLIBS += $(EMULATOR_COMMON_LDLIBS) $(EMULATOR_LIBUI_LDLIBS)
-# Add common system libraries
-#
-LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)
+LOCAL_SRC_FILES := \
+ android/cmdline-option.c \
+ android/config.c \
+ android/help.c \
+ android/looper-generic.c \
+ android/snapshot.c \
+ android/main-common.c \
+ android/main.c \
+ vl-android-ui.c \
+ android/protocol/core-connection.c \
+ android/protocol/attach-ui-impl.c \
+ android/protocol/fb-updates-impl.c \
+ android/protocol/ui-commands-impl.c \
+ android/protocol/core-commands-proxy.c \
+ android/protocol/user-events-proxy.c \
-LOCAL_SRC_FILES += $(VL_SOURCES) $(UI_SOURCES) $(UI_AND_CORE_SOURCES)
+LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
-# add SDL-specific flags
-#
-LOCAL_CFLAGS += $(SDL_CFLAGS)
-LOCAL_LDLIBS += $(SDL_LDLIBS)
LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
-# on Windows, link the icon file as well into the executable
-# unfortunately, our build system doesn't help us much, so we need
-# to use some weird pathnames to make this work...
-#
-ifeq ($(HOST_OS),windows)
-
-# Locate windres executable
-WINDRES := windres
-ifneq ($(USE_MINGW),)
- # When building the Windows emulator under Linux, use the MinGW one
- WINDRES := i586-mingw32msvc-windres
-endif
-
-INTERMEDIATE := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
-ANDROID_ICON_OBJ := android_icon.o
-ANDROID_ICON_PATH := $(LOCAL_PATH)/images
-$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc
- $(WINDRES) $< -I $(ANDROID_ICON_PATH) -o $@
-
-# seems to be the only way to add an object file that was not generated from
-# a C/C++/Java source file to our build system. and very unfortunately,
-# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
-# us to put the object file in the source directory...
-#
-LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ)
-endif
-
-# this is already done by the Android build system, but is done for the
-# benefit of the stand-alone one.
-#
-ifeq ($(BUILD_STANDALONE_EMULATOR),true)
- LOCAL_CFLAGS += -I$(intermediates)
-endif
-
-# Generate a completely static executable if needed.
-# Note that this means no sound and graphics on Linux.
-#
-ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
- LOCAL_SRC_FILES += dynlink-static.c
- LOCAL_LDLIBS += -static
-endif
-
-# See comment about SDLMAIN_SOURCES in the 'emulator-uilib' module declarations.
-LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
+$(call end-emulator-program)
-include $(BUILD_HOST_EXECUTABLE)
+## VOILA!!
endif # TARGET_ARCH == arm || TARGET_ARCH == x86
diff --git a/Makefile.common b/Makefile.common
new file mode 100644
index 0000000..e872734
--- /dev/null
+++ b/Makefile.common
@@ -0,0 +1,613 @@
+# 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.
+#
+
+##############################################################################
+##############################################################################
+###
+### emulator-common: LIBRARY OF COMMON FUNCTIONS
+###
+### THESE ARE POTENTIALLY USED BY ALL COMPONENTS
+###
+
+$(call start-emulator-library, emulator-common)
+
+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
+#
+ZLIB_DIR := distrib/zlib-1.2.3
+include $(LOCAL_PATH)/$(ZLIB_DIR)/sources.make
+EMULATOR_COMMON_CFLAGS += -I$(LOCAL_PATH)/$(ZLIB_DIR)
+
+LOCAL_SRC_FILES += $(ZLIB_SOURCES)
+
+###########################################################
+# Android utility functions
+#
+LOCAL_SRC_FILES += \
+ sockets.c \
+ iolooper-select.c \
+ android/async-console.c \
+ android/async-utils.c \
+ android/charmap.c \
+ android/framebuffer.c \
+ android/keycode-array.c \
+ android/avd/hw-config.c \
+ android/avd/info.c \
+ android/sync-utils.c \
+ android/utils/assert.c \
+ android/utils/bufprint.c \
+ android/utils/debug.c \
+ android/utils/dirscanner.c \
+ android/utils/filelock.c \
+ android/utils/ini.c \
+ android/utils/mapfile.c \
+ android/utils/misc.c \
+ android/utils/panic.c \
+ android/utils/path.c \
+ android/utils/reflist.c \
+ android/utils/refset.c \
+ android/utils/stralloc.c \
+ android/utils/system.c \
+ android/utils/tempfile.c \
+ android/utils/vector.c \
+
+LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
+
+$(call end-emulator-library)
+
+##############################################################################
+##############################################################################
+###
+### emulator-libui: LIBRARY OF UI-RELATED FUNCTIONS
+###
+### THESE ARE USED BY 'emulator-ui' AND THE STANDALONE PROGRAMS
+###
+
+$(call start-emulator-library, emulator-libui)
+
+EMULATOR_LIBUI_CFLAGS :=
+
+LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
+
+###########################################################
+# Libpng configuration
+#
+LIBPNG_DIR := distrib/libpng-1.2.19
+include $(LOCAL_PATH)/$(LIBPNG_DIR)/sources.make
+
+EMULATOR_LIBUI_CFLAGS += \
+ $(LIBPNG_CFLAGS) \
+ -I$(LOCAL_PATH)/$(LIBPNG_DIR)
+
+LOCAL_SRC_FILES += $(LIBPNG_SOURCES) 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.
+#
+ifeq ($(QEMU_HOST_TAG),linux-x86)
+ BUILD_SDL_FROM_SOURCES := false
+endif
+
+# On darwin-x86, a bug in the Android build system prevents the compilation
+# of Objective-C sources. Fixed recently in AOSP, but we still use the
+# prebuilts for the benefit of older platform branches.
+#
+ifeq ($(QEMU_HOST_TAG),darwin-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 ($(SDL_CONFIG),)
+ BUILD_SDL_FROM_SOURCES := false
+endif
+
+ifneq ($(BUILD_SDL_FROM_SOURCES),true)
+
+ SDL_CONFIG ?= prebuilt/$(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
+
+else # BUILD_SDL_FROM_SOURCES
+
+ SDL_DIR := distrib/sdl-1.2.12
+ include $(LOCAL_PATH)/$(SDL_DIR)/sources.make
+ LOCAL_SRC_FILES += $(SDL_SOURCES)
+
+ EMULATOR_LIBUI_CFLAGS += \
+ -I$(LOCAL_PATH)/$(SDL_DIR)/include
+
+ SDL_STATIC_LIBRARIES :=
+
+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 \
+
+LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%)
+
+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)
+LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx
+endif
+
+LOCAL_CFLAGS += $(EMULATOR_LIBUI_CFLAGS)
+
+$(call end-emulator-library)
+
+##############################################################################
+##############################################################################
+###
+### emulator-libqemu: TARGET-INDEPENDENT QEMU FUNCTIONS
+###
+### THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui'
+###
+
+$(call start-emulator-library, emulator-libqemu)
+
+EMULATOR_LIBQEMU_CFLAGS :=
+
+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 :=
+
+LOCAL_CFLAGS += -Wall -Wno-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/%))
+
+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)
+LOCAL_CFLAGS += -fno-stack-protector
+endif
+
+LOCAL_SRC_FILES += $(AUDIO_SOURCES)
+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)
+
+LOCAL_CFLAGS += -Wno-missing-field-initializers
+
+# migration sources
+#
+ifeq ($(HOST_OS),windows)
+ LOCAL_SRC_FILES += migration-dummy-android.c
+else
+ LOCAL_SRC_FILES += migration.c \
+ migration-exec.c \
+ migration-tcp-android.c
+endif
+
+# misc. sources
+#
+CORE_MISC_SOURCES = \
+ acl.c \
+ aes.c \
+ aio-android.c \
+ async.c \
+ bt-host.c \
+ bt-vhci.c \
+ buffered_file.c \
+ cbuffer.c \
+ charpipe.c \
+ console.c \
+ cutils.c \
+ d3des.c \
+ input.c \
+ ioport.c \
+ module.c \
+ net-android.c \
+ notify.c \
+ osdep.c \
+ outputchannel.c \
+ path.c \
+ qemu-char-android.c \
+ qemu-config.c \
+ qemu-error.c \
+ qemu-malloc.c \
+ qemu-option.c \
+ qemu-sockets-android.c \
+ qerror.c \
+ readline.c \
+ savevm.c \
+ shaper.c \
+ tcpdump.c \
+ vnc-android.c \
+ android/boot-properties.c \
+ android/config.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/qemu-setup.c \
+ android/snapshot.c \
+ android/utils/timezone.c \
+
+ifeq ($(HOST_ARCH),x86)
+ CORE_MISC_SOURCES += i386-dis.c
+endif
+ifeq ($(HOST_ARCH),x86_64)
+ CORE_MISC_SOURCES += i386-dis.c
+endif
+ifeq ($(HOST_ARCH),ppc)
+ CORE_MISC_SOURCES += ppc-dis.c \
+ cache-utils.c
+endif
+
+ifeq ($(HOST_OS),linux)
+ CORE_MISC_SOURCES += usb-linux.c \
+ qemu-thread.c
+else
+ CORE_MISC_SOURCES += usb-dummy-android.c
+endif
+
+ifeq ($(HOST_OS),windows)
+ CORE_MISC_SOURCES += tap-win32.c
+else
+ CORE_MISC_SOURCES += posix-aio-compat.c
+endif
+
+LOCAL_SRC_FILES += $(CORE_MISC_SOURCES)
+
+# Required
+LOCAL_CFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE=1
+
+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
+
+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 \
+
+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
+
+LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%)
+EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/telephony
+
+# sources inherited from upstream, but not fully
+# integrated into android emulator
+#
+LOCAL_SRC_FILES += \
+ json-lexer.c \
+ json-parser.c \
+ json-streamer.c \
+ qjson.c \
+ qbool.c \
+ qdict.c \
+ qfloat.c \
+ qint.c \
+ qlist.c \
+ qstring.c \
+
+# hw-config-defs.h is generated from android/avd/hardware-properties.ini
+#
+QEMU_HARDWARE_PROPERTIES_INI := $(LOCAL_PATH)/android/avd/hardware-properties.ini
+QEMU_HW_CONFIG_DEFS_H := $(LOCAL_PATH)/android/avd/hw-config-defs.h
+$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_PATH := $(LOCAL_PATH)
+$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_SOURCES := $(QEMU_HARDWARE_PROPERTIES_INI)
+$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/android/tools/gen-hw-config.py $(QEMU_HARDWARE_PROPERTIES_INI) $@
+$(QEMU_HW_CONFIG_DEFS_H): $(QEMU_HARDWARE_PROPERTIES_INI) $(LOCAL_PATH)/android/tools/gen-hw-config.py
+ $(hide) rm -f $@
+ $(transform-generated-source)
+
+$(LOCAL_PATH)/android/avd/hw-config.h: $(QEMU_HW_CONFIG_DEFS_H)
+
+# 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)
+
+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
+
+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)
+
+EMULATOR_LIBQEMU_CFLAGS += -I$(intermediates)
+
+LOCAL_CFLAGS += $(EMULATOR_LIBQEMU_CFLAGS)
+
+$(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/qcow.c \
+ block/qcow2.c \
+ block/qcow2-refcount.c \
+ block/qcow2-snapshot.c \
+ block/qcow2-cluster.c \
+ block/cloop.c \
+ block/dmg.c \
+ block/vvfat.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-libelff: TARGET-INDEPENDENT ELF/DWARD PARSER
+###
+### THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui', BUT WE CANNOT PUT
+### THEM IN emulator-libqemu SINCE THE SOURCES ARE C++
+###
+
+$(call start-emulator-library, emulator-libelff)
+
+LOCAL_CPP_EXTENSION := .cc
+
+ELFF_CFLAGS := -I$(LOCAL_PATH)/elff
+ELFF_LDLIBS := -lstdc++
+
+ELFF_SOURCES := \
+ dwarf_cu.cc \
+ dwarf_die.cc \
+ dwarf_utils.cc \
+ elf_alloc.cc \
+ elf_file.cc \
+ elf_mapped_section.cc \
+ elff_api.cc \
+
+LOCAL_SRC_FILES += $(ELFF_SOURCES:%=elff/%)
+
+LOCAL_CFLAGS += \
+ -fno-exceptions \
+ $(ELFF_CFLAGS) \
+
+$(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>,<source-files>)
+###
+### Where: <input> is the input file, with a .hx suffix (e.g. foo.hx)
+### <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,EXECUTABLES,$$(LOCAL_MODULE),true)
+
+QEMU_HEADER_H := $$(intermediates)/$$(1:%.hx=%.h)
+$$(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)
+_objects := $$(patsubst %,$$(intermediates)/%,$$(2:.c=.o))
+$$(_objects): $$(QEMU_HEADER_H)
+endef
+
diff --git a/Makefile.target b/Makefile.target
new file mode 100644
index 0000000..ab263bd
--- /dev/null
+++ b/Makefile.target
@@ -0,0 +1,353 @@
+# This file is included several times to build target-specific
+# modules for the Android emulator. It will be called several times
+# (e.g. once for the arm target, and once for the x86 target).
+#
+
+ifndef EMULATOR_TARGET_ARCH
+$(error EMULATOR_TARGET_ARCH is not defined!)
+endif
+
+EMULATOR_TARGET_CPU := $(EMULATOR_TARGET_ARCH)
+ifeq ($(EMULATOR_TARGET_CPU),x86)
+ EMULATOR_TARGET_CPU := i386
+endif
+
+##############################################################################
+##############################################################################
+###
+### emulator-target-$CPU: target-specific emulation code.
+###
+### Used by both the core and standalone programs.
+###
+
+# Common compiler flags for all target-dependent libraries
+EMULATOR_TARGET_CFLAGS := \
+ -I$(LOCAL_PATH)/android/config/$(HOST_PREBUILT_TAG) \
+ -I$(LOCAL_PATH)/android/config/target-$(EMULATOR_TARGET_ARCH) \
+ -I$(LOCAL_PATH)/target-$(EMULATOR_TARGET_CPU) \
+ -I$(LOCAL_PATH)/fpu \
+ -DNEED_CPU_H \
+
+TCG_TARGET := $(HOST_ARCH)
+ifeq ($(TCG_TARGET),x86)
+ TCG_TARGET := i386
+endif
+
+EMULATOR_TARGET_CFLAGS += \
+ -I$(LOCAL_PATH)/tcg \
+ -I$(LOCAL_PATH)/tcg/$(TCG_TARGET) \
+ -DTARGET_ARCH=\"$(EMULATOR_TARGET_ARCH)\"
+
+
+$(call start-emulator-library, emulator-target-$(EMULATOR_TARGET_CPU))
+
+# The following is to ensure that "config.h" will map to a target-specific
+# configuration file header.
+LOCAL_CFLAGS += $(EMULATOR_TARGET_CFLAGS)
+
+LOCAL_SRC_FILES += \
+ tcg/tcg.c \
+
+##############################################################################
+# Emulated hardware devices.
+#
+
+HW_SOURCES := \
+ bt.c \
+ bt-hci.c \
+ bt-hid.c \
+ bt-l2cap.c \
+ bt-sdp.c \
+ cdrom.c \
+ dma.c \
+ irq.c \
+ goldfish_device.c \
+ goldfish_events_device.c \
+ goldfish_fb.c \
+ goldfish_battery.c \
+ goldfish_mmc.c \
+ goldfish_memlog.c \
+ goldfish_nand.c \
+ goldfish_tty.c \
+ msmouse.c \
+ pci.c \
+ qdev.c \
+ scsi-disk.c \
+ sysbus.c \
+ usb-hid.c \
+ usb-hub.c \
+ usb-msd.c \
+ usb-ohci.c \
+ usb.c \
+ watchdog.c
+
+ifeq ($(EMULATOR_TARGET_ARCH),arm)
+HW_SOURCES += android_arm.c \
+ arm_pic.c \
+ goldfish_audio.c \
+ goldfish_interrupt.c \
+ goldfish_switch.c \
+ goldfish_timer.c \
+ goldfish_trace.c \
+ arm_boot.c \
+
+# The following sources must be compiled with the final executables
+# because they contain device_init() or machine_init() statements.
+HW_OBJ_SOURCES := hw/smc91c111.c
+HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS)
+
+LOCAL_SRC_FILES += arm-dis.c
+
+# smc91c111.c requires <zlib.h>
+LOCAL_CFLAGS += $(ZLIB_CFLAGS)
+endif
+
+ifeq ($(EMULATOR_TARGET_ARCH),x86)
+HW_SOURCES += \
+ apic.c \
+ i8259.c \
+ mc146818rtc.c \
+ piix_pci.c \
+ i8254.c \
+ pckbd.c \
+ ioapic.c \
+ ps2.c \
+ smbios.c \
+ fw_cfg.c
+
+# The following sources must be compiled with the final executables
+# because they contain device_init() or machine_init() statements.
+HW_OBJ_SOURCES := \
+ hw/ne2000.c \
+ hw/pc.c
+
+HW_OBJ_CFLAGS := $(EMULATOR_TARGET_CFLAGS)
+
+endif
+
+LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%)
+
+LOCAL_SRC_FILES += \
+ exec.c \
+ cpu-exec.c \
+ translate-all.c \
+ trace.c \
+ varint.c \
+ dcache.c \
+ softmmu_outside_jit.c \
+
+##############################################################################
+# CPU-specific emulation.
+#
+LOCAL_CFLAGS += -fno-PIC -fomit-frame-pointer -Wno-sign-compare
+
+ifeq ($(HOST_ARCH),ppc)
+ LOCAL_CFLAGS += -D__powerpc__
+endif
+
+ifeq ($(EMULATOR_TARGET_ARCH),arm)
+LOCAL_SRC_FILES += \
+ target-arm/op_helper.c \
+ target-arm/iwmmxt_helper.c \
+ target-arm/neon_helper.c \
+ target-arm/helper.c \
+ target-arm/translate.c \
+ target-arm/machine.c \
+ hw/armv7m.c \
+ hw/armv7m_nvic.c \
+ arm-semi.c \
+
+LOCAL_SRC_FILES += fpu/softfloat.c
+endif
+
+ifeq ($(EMULATOR_TARGET_ARCH), x86)
+LOCAL_SRC_FILES += \
+ target-i386/op_helper.c \
+ target-i386/helper.c \
+ target-i386/translate.c \
+ target-i386/machine.c \
+
+LOCAL_SRC_FILES += fpu/softfloat-native.c
+endif
+
+##############################################################################
+# Memory-access checking support.
+# Memory access checker uses information collected by instrumented code in
+# libc.so in order to keep track of memory blocks allocated from heap. Memory
+# checker then uses this information to make sure that every access to allocated
+# memory is within allocated block. This information also allows detecting
+# memory leaks and attempts to free/realloc invalid pointers.
+#
+LOCAL_CFLAGS += \
+ -I$(LOCAL_PATH)/memcheck \
+ -I$(LOCAL_PATH)/elff
+
+MCHK_SOURCES := \
+ memcheck.c \
+ memcheck_proc_management.c \
+ memcheck_malloc_map.c \
+ memcheck_mmrange_map.c \
+ memcheck_util.c \
+
+LOCAL_SRC_FILES += $(MCHK_SOURCES:%=memcheck/%)
+
+
+$(call end-emulator-library)
+
+##############################################################################
+##############################################################################
+###
+### qemu-android-$CPU: headless emulator core program
+###
+###
+$(call start-emulator-program, qemu-android-$(EMULATOR_TARGET_ARCH))
+
+LOCAL_CFLAGS += \
+ $(EMULATOR_COMMON_CFLAGS) \
+ $(ELFF_CFLAGS) \
+ $(EMULATOR_LIBQEMU_CFLAGS) \
+ $(EMULATOR_TARGET_CFLAGS) \
+ -DCONFIG_STANDALONE_CORE \
+
+LOCAL_CFLAGS += -Wno-missing-field-initializers
+
+
+LOCAL_STATIC_LIBRARIES := \
+ emulator-libqemu \
+ emulator-target-$(EMULATOR_TARGET_CPU) \
+ emulator-libelff \
+ emulator-common \
+
+
+LOCAL_LDLIBS += \
+ $(EMULATOR_COMMON_LDLIBS) \
+ $(EMULATOR_LIBQEMU_LDLIBS) \
+ $(ELFF_LDLIBS) \
+
+LOCAL_SRC_FILES := \
+ audio/audio.c \
+ disas.c \
+ dma-helpers.c \
+ gdbstub.c \
+ keymaps.c \
+ loader.c \
+ monitor.c \
+ qemu-timer.c \
+ user-events-qemu.c \
+ vl-android.c \
+ android/console.c \
+ android/display-core.c \
+ android/protocol/attach-ui-proxy.c \
+ android/protocol/fb-updates-proxy.c \
+ android/protocol/user-events-impl.c \
+ android/protocol/ui-commands-proxy.c \
+ android/protocol/core-commands-impl.c \
+ android/protocol/core-commands-qemu.c \
+
+$(call gen-hx-header,qemu-monitor.hx,monitor.c)
+$(call gen-hx-header,qemu-options.hx,vl-android.c)
+
+ifeq ($(HOST_OS),darwin)
+ FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit
+ LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%)
+endif
+
+# Generate a completely static executable if needed.
+# Note that this means no sound and graphics on Linux.
+#
+ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
+ LOCAL_SRC_FILES += dynlink-static.c
+ LOCAL_LDLIBS += -static
+endif
+
+# The following files cannot be in static libraries because they contain
+# constructor functions that are otherwise stripped by the final linker
+LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
+LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
+
+LOCAL_SRC_FILES += $(BLOCK_SOURCES)
+LOCAL_CFLAGS += $(BLOCK_CFLAGS)
+
+LOCAL_MODULE_TAGS := debug
+
+$(call end-emulator-program)
+
+##############################################################################
+##############################################################################
+###
+### emulator-$ARCH: Standalone emulator program
+###
+###
+
+# Special case, "emulator-arm" is named "emulator" for now.
+ifeq ($(EMULATOR_TARGET_ARCH),arm)
+$(call start-emulator-program, emulator)
+else
+$(call start-emulator-program, emulator-$(EMULATOR_TARGET_ARCH))
+endif
+
+LOCAL_STATIC_LIBRARIES := \
+ emulator-libui \
+ emulator-libqemu \
+ emulator-target-$(EMULATOR_TARGET_CPU) \
+ emulator-libelff \
+ emulator-common \
+
+LOCAL_LDLIBS += \
+ $(EMULATOR_COMMON_LDLIBS) \
+ $(EMULATOR_LIBQEMU_LDLIBS) \
+ $(EMULATOR_LIBUI_LDLIBS) \
+ $(ELFF_LDLIBS) \
+
+LOCAL_CFLAGS += \
+ $(EMULATOR_TARGET_CFLAGS) \
+ $(EMULATOR_COMMON_CFLAGS) \
+ $(EMULATOR_LIBQEMU_CFLAGS) \
+ $(EMULATOR_LIBUI_CFLAGS)
+
+LOCAL_SRC_FILES := \
+ audio/audio.c \
+ disas.c \
+ dma-helpers.c \
+ gdbstub.c \
+ keymaps.c \
+ loader.c \
+ monitor.c \
+ qemu-timer.c \
+ user-events-qemu.c \
+ vl-android.c \
+ android/cmdline-option.c \
+ android/console.c \
+ android/display.c \
+ android/display-core.c \
+ android/help.c \
+ android/main-common.c \
+ android/main.c \
+ android/protocol/core-commands-qemu.c \
+ android/protocol/ui-commands-qemu.c \
+ android/
+
+$(call gen-hx-header,qemu-monitor.hx,monitor.c)
+$(call gen-hx-header,qemu-options.hx,vl-android.c)
+
+# The following files cannot be in static libraries because they contain
+# constructor functions that are otherwise stripped by the final linker
+LOCAL_SRC_FILES += $(HW_OBJ_SOURCES)
+LOCAL_CFLAGS += $(HW_OBJ_CFLAGS)
+
+LOCAL_SRC_FILES += $(BLOCK_SOURCES)
+LOCAL_CFLAGS += $(BLOCK_CFLAGS)
+
+LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
+
+# Generate a completely static executable if needed.
+# Note that this means no sound and graphics on Linux.
+#
+ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
+ LOCAL_SRC_FILES += dynlink-static.c
+ LOCAL_LDLIBS += -static
+endif
+
+LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
+
+$(call end-emulator-program)
diff --git a/android/build/definitions.make b/android/build/definitions.make
index 663899d..e31131b 100644
--- a/android/build/definitions.make
+++ b/android/build/definitions.make
@@ -55,7 +55,7 @@ SRC:=$(1)
OBJ:=$$(LOCAL_OBJS_DIR)/$$(SRC:%.c=%.o)
LOCAL_OBJECTS += $$(OBJ)
DEPENDENCY_DIRS += $$(dir $$(OBJ))
-$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(OBJS_DIR)
+$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR)
$$(OBJ): PRIVATE_CC := $$(LOCAL_CC)
$$(OBJ): PRIVATE_OBJ := $$(OBJ)
$$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE)
@@ -75,7 +75,7 @@ SRC:=$(1)
OBJ:=$$(LOCAL_OBJS_DIR)/$$(SRC:%$(LOCAL_CPP_EXTENSION)=%.o)
LOCAL_OBJECTS += $$(OBJ)
DEPENDENCY_DIRS += $$(dir $$(OBJ))
-$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(OBJS_DIR)
+$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR)
$$(OBJ): PRIVATE_CXX := $$(LOCAL_CC)
$$(OBJ): PRIVATE_OBJ := $$(OBJ)
$$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE)
@@ -95,7 +95,7 @@ SRC:=$(1)
OBJ:=$$(LOCAL_OBJS_DIR)/$$(notdir $$(SRC:%.m=%.o))
LOCAL_OBJECTS += $$(OBJ)
DEPENDENCY_DIRS += $$(dir $$(OBJ))
-$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(OBJS_DIR)
+$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR)
$$(OBJ): PRIVATE_CC := $$(LOCAL_CC)
$$(OBJ): PRIVATE_OBJ := $$(OBJ)
$$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE)
@@ -115,7 +115,7 @@ SRC:=$(1)
OBJ:=$$(LOCAL_OBJS_DIR)/$$(notdir $$(SRC:%.c=%.o))
LOCAL_OBJECTS += $$(OBJ)
DEPENDENCY_DIRS += $$(dir $$(OBJ))
-$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(OBJS_DIR)
+$$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR)
$$(OBJ): PRIVATE_CC := $$(LOCAL_CC)
$$(OBJ): PRIVATE_OBJ := $$(OBJ)
$$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE)
diff --git a/android/config/config.h b/android/config/config.h
index fdfbe31..e07cc2c 100644
--- a/android/config/config.h
+++ b/android/config/config.h
@@ -1,4 +1,9 @@
-/* Automatically generated by configure - do not modify */
+/* This file is included by target-specific files under
+ * android/config/target-$ARCH/config.h, but contains all config
+ * definitions that are independent of the target CPU.
+ *
+ * Do not include directly.
+ */
#include "config-host.h"
#define TARGET_PHYS_ADDR_BITS 32
@@ -11,13 +16,4 @@
#define CONFIG_NAND_LIMITS 1
#endif
#define CONFIG_ANDROID_SNAPSHOTS 1
-
-#ifdef ARCH_FLAGS_x86
-#define TARGET_ARCH "x86"
-#define TARGET_I386 1
-#else
-#define TARGET_ARCH "arm"
-#define TARGET_ARM 1
-#define CONFIG_SOFTFLOAT 1
-#endif
-
+#define CONFIG_MEMCHECK 1
diff --git a/android/config/target-arm/config.h b/android/config/target-arm/config.h
new file mode 100644
index 0000000..d6da04f
--- /dev/null
+++ b/android/config/target-arm/config.h
@@ -0,0 +1,5 @@
+/* ARM-specific configuration */
+#include "android/config/config.h"
+
+#define TARGET_ARM 1
+#define CONFIG_SOFTFLOAT 1
diff --git a/android/config/target-x86/config.h b/android/config/target-x86/config.h
new file mode 100644
index 0000000..ea31c39
--- /dev/null
+++ b/android/config/target-x86/config.h
@@ -0,0 +1,3 @@
+/* x86-specific configuration */
+#include "android/config/config.h"
+#define TARGET_I386 1