blob: 6888173b7c6fc835394864372d83cce689fa47ad [file] [log] [blame]
ifneq (,$(filter $(TARGET_ARCH),arm x86))
LOCAL_PATH:= $(call my-dir)
# determine the target cpu
ifeq ($(TARGET_ARCH),arm)
EMULATOR_TARGET_CPU := target-arm
else
EMULATOR_TARGET_CPU := target-i386
endif
# determine the host tag to use
QEMU_HOST_TAG := $(HOST_PREBUILT_TAG)
ifneq ($(USE_MINGW),)
QEMU_HOST_TAG := windows
endif
# determine the location of platform-specific directories
#
CONFIG_DIRS := \
$(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)
ifeq ($(BUILD_STANDALONE_EMULATOR),true)
CONFIG_DIRS := $(LOCAL_PATH)/objs $(CONFIG_DIRS)
endif
CONFIG_INCLUDES := $(CONFIG_DIRS:%=-I%)
MY_CC := $(HOST_CC)
MY_CXX := $(HOST_CXX)
MY_AR := $(HOST_AR)
MY_OPTIM := -O2 -g -fno-PIC -falign-functions=0 -fomit-frame-pointer
ifeq ($(BUILD_DEBUG_EMULATOR),true)
MY_OPTIM := -O0 -g
endif
MY_CFLAGS := $(CONFIG_INCLUDES) $(MY_OPTIM)
# Overwrite configuration for debug builds.
#
ifeq ($(BUILD_DEBUG_EMULATOR),true)
MY_CFLAGS := $(CONFIG_INCLUDES) -O0 -g \
-fno-PIC -falign-functions=0
endif
MY_LDLIBS :=
# this is needed to build the emulator on 64-bit Linux systems
ifeq ($(HOST_OS)-$(HOST_ARCH),linux-x86)
MY_CFLAGS += -Wa,--32
endif
ifeq ($(HOST_OS),freebsd)
MY_CFLAGS += -Wa,--32 -I /usr/local/include
endif
ifeq ($(HOST_OS),windows)
MY_CFLAGS += -D_WIN32
# we need Win32 features that are available since Windows 2000 Professional/Server (NT 5.0)
MY_CFLAGS += -DWINVER=0x501
MY_LDLIBS += -lvfw32
endif
ifeq ($(HOST_ARCH),ppc)
MY_CFLAGS += -D__powerpc__
endif
ifeq ($(HOST_OS),darwin)
MY_CFLAGS += -mdynamic-no-pic -D_DARWIN_C_SOURCE=1
# When building on Leopard or above, we need to use the 10.4 SDK
# or the generated binary will not run on Tiger.
DARWIN_VERSION := $(strip $(shell sw_vers -productVersion))
ifneq ($(filter 10.1 10.2 10.3 10.1.% 10.2.% 10.3.% 10.4 10.4.%,$(DARWIN_VERSION)),)
$(error Building the Android emulator requires OS X 10.5 or above)
endif
ifeq ($(filter 10.5 10.5.%,$(DARWIN_VERSION)),)
# We are on Snow Leopard or above
LEOPARD_SDK := /Developer/SDKs/MacOSX10.5.sdk
ifeq ($(strip $(wildcard $(LEOPARD_SDK))),)
$(info Please install the 10.5 SDK on this machine at $(LEOPARD_SDK))
$(error Aborting the build.)
endif
MY_CFLAGS += -isysroot $(LEOPARD_SDK) -mmacosx-version-min=10.5 -DMACOSX_DEPLOYMENT_TARGET=10.5
MY_LDLIBS += -isysroot $(LEOPARD_SDK) -Wl,-syslibroot,$(LEOPARD_SDK) -mmacosx-version-min=10.5
endif
endif
# BUILD_STANDALONE_EMULATOR is only defined when building with
# the android-rebuild.sh script. The script will also provide
# 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)))
MY_CC := $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc
MY_CXX := $(HOST_SDK_TOOLCHAIN_PREFIX)-g++
MY_AR := $(HOST_SDK_TOOLCHAIN_PREFIX)-ar
endif # $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc exists
endif # HOST_OS == linux
ifneq ($(USE_CCACHE),)
ccache := prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache
ccache := $(strip $(wildcard $(ccache)))
ifneq ($(ccache),$(firstword $(MY_CC)))
MY_CC := $(ccache) $(MY_CC)
endif
ccache :=
endif
endif
ifneq ($(combo_target)$(TARGET_SIMULATOR),HOST_true)
ifneq ($(HOST_ARCH),x86_64)
MY_CFLAGS += -m32
MY_LDLIBS += -m32
endif
endif
# Enable warning, except those related to missing field initializers
# (the QEMU coding style loves using these).
#
MY_CFLAGS += -Wall -Wno-missing-field-initializers
# Needed to build fpu/softfloat-native.h properly
MY_CFLAGS += -D_GNU_SOURCE=1
# A useful function that can be used to start the declaration of a host
# module. Avoids repeating the same stuff again and again.
# Usage:
#
# $(call start-emulator-library, <module-name>)
#
# ... declarations
#
# $(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_CXX := $(MY_CXX)) \
$(eval LOCAL_CFLAGS := $(MY_CFLAGS)) \
$(eval LOCAL_AR := $(MY_AR)) \
$(eval LOCAL_LDLIBS := $(MY_LDLIBS)) \
$(eval LOCAL_MODULE_TAGS := debug) \
$(eval LOCAL_MODULE := $1) \
$(eval LOCAL_MODULE_CLASS := STATIC_LIBRARIES)
# Used with start-emulator-library
end-emulator-library = \
$(eval include $(BUILD_HOST_STATIC_LIBRARY))
# 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) \
$(eval LOCAL_MODULE_CLASS := EXECUTABLES)
# A varient of end-emulator-library for host programs instead
end-emulator-program = \
$(eval LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)) \
$(eval include $(BUILD_HOST_EXECUTABLE))
# The common libraries
#
QEMU_SYSTEM_LDLIBS := -lm
ifeq ($(HOST_OS),windows)
QEMU_SYSTEM_LDLIBS += -mno-cygwin -mwindows -mconsole
endif
ifeq ($(HOST_OS),freebsd)
QEMU_SYSTEM_LDLIBS += -L/usr/local/lib -lpthread -lX11 -lutil
endif
ifeq ($(HOST_OS),linux)
QEMU_SYSTEM_LDLIBS += -lutil -lrt
endif
ifeq ($(HOST_OS),windows)
QEMU_SYSTEM_LDLIBS += -lwinmm -lws2_32 -liphlpapi
else
QEMU_SYSTEM_LDLIBS += -lpthread
endif
ifeq ($(HOST_OS),darwin)
QEMU_SYSTEM_LDLIBS += -Wl,-framework,Cocoa
endif
include $(LOCAL_PATH)/Makefile.common
# 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
EMULATOR_TARGET_ARCH := x86
include $(LOCAL_PATH)/Makefile.target
##############################################################################
##############################################################################
###
### emulator: LAUNCHER FOR TARGET-SPECIFIC EMULATOR
###
###
$(call start-emulator-program, emulator)
LOCAL_SRC_FILES := android/main-emulator.c
LOCAL_STATIC_LIBRARIES := emulator-common
$(call end-emulator-program)
##############################################################################
##############################################################################
###
### emulator-ui: UI FRONT-END PROGRAM
###
###
$(call start-emulator-program, emulator-ui)
LOCAL_STATIC_LIBRARIES := \
emulator-common \
emulator-libui \
emulator-common \
LOCAL_CFLAGS += -DCONFIG_STANDALONE_UI=1
LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) $(EMULATOR_LIBUI_CFLAGS)
LOCAL_LDLIBS += $(EMULATOR_COMMON_LDLIBS) $(EMULATOR_LIBUI_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 \
android/opengles.c \
android/utils/setenv.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 \
$(call gen-hw-config-defs,android/main-common.c)
LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
$(call end-emulator-program)
## VOILA!!
endif # TARGET_ARCH == arm || TARGET_ARCH == x86