• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1ifneq (,$(filter $(TARGET_ARCH),arm x86))
2LOCAL_PATH:= $(call my-dir)
3
4# determine the target cpu
5ifeq ($(TARGET_ARCH),arm)
6EMULATOR_TARGET_CPU := target-arm
7else
8EMULATOR_TARGET_CPU := target-i386
9endif
10
11# determine the host tag to use
12QEMU_HOST_TAG := $(HOST_PREBUILT_TAG)
13ifneq ($(USE_MINGW),)
14    QEMU_HOST_TAG := windows
15endif
16
17# determine the location of platform-specific directories
18#
19CONFIG_DIRS     := \
20    $(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)
21
22ifeq ($(BUILD_STANDALONE_EMULATOR),true)
23    CONFIG_DIRS := $(LOCAL_PATH)/objs $(CONFIG_DIRS)
24endif
25
26CONFIG_INCLUDES := $(CONFIG_DIRS:%=-I%)
27
28MY_CC  := $(HOST_CC)
29MY_CXX := $(HOST_CXX)
30MY_AR  := $(HOST_AR)
31
32MY_OPTIM := -O2 -g -fno-PIC -falign-functions=0 -fomit-frame-pointer
33ifeq ($(BUILD_DEBUG_EMULATOR),true)
34    MY_OPTIM := -O0 -g
35endif
36
37MY_CFLAGS := $(CONFIG_INCLUDES) $(MY_OPTIM)
38
39# Overwrite configuration for debug builds.
40#
41ifeq ($(BUILD_DEBUG_EMULATOR),true)
42    MY_CFLAGS := $(CONFIG_INCLUDES) -O0 -g \
43                 -fno-PIC -falign-functions=0
44endif
45
46MY_LDLIBS :=
47
48# this is needed to build the emulator on 64-bit Linux systems
49ifeq ($(HOST_OS)-$(HOST_ARCH),linux-x86)
50  MY_CFLAGS += -Wa,--32
51endif
52
53ifeq ($(HOST_OS),freebsd)
54  MY_CFLAGS += -Wa,--32 -I /usr/local/include
55endif
56
57ifeq ($(HOST_OS),windows)
58  MY_CFLAGS += -D_WIN32
59  # we need Win32 features  that are available since Windows 2000 Professional/Server (NT 5.0)
60  MY_CFLAGS += -DWINVER=0x501
61  MY_LDLIBS += -lvfw32
62endif
63
64ifeq ($(HOST_ARCH),ppc)
65    MY_CFLAGS += -D__powerpc__
66endif
67
68ifeq ($(HOST_OS),darwin)
69    MY_CFLAGS += -mdynamic-no-pic -D_DARWIN_C_SOURCE=1
70
71    # When building on Leopard or above, we need to use the 10.4 SDK
72    # or the generated binary will not run on Tiger.
73    DARWIN_VERSION := $(strip $(shell sw_vers -productVersion))
74    ifneq ($(filter 10.1 10.2 10.3 10.1.% 10.2.% 10.3.% 10.4 10.4.%,$(DARWIN_VERSION)),)
75        $(error Building the Android emulator requires OS X 10.5 or above)
76    endif
77    ifeq ($(filter 10.5 10.5.%,$(DARWIN_VERSION)),)
78        # We are on Snow Leopard or above
79        LEOPARD_SDK := /Developer/SDKs/MacOSX10.5.sdk
80        ifeq ($(strip $(wildcard $(LEOPARD_SDK))),)
81            $(info  Please install the 10.5 SDK on this machine at $(LEOPARD_SDK))
82            $(error Aborting the build.)
83        endif
84        MY_CFLAGS += -isysroot $(LEOPARD_SDK) -mmacosx-version-min=10.5 -DMACOSX_DEPLOYMENT_TARGET=10.5
85        MY_LDLIBS += -isysroot $(LEOPARD_SDK) -Wl,-syslibroot,$(LEOPARD_SDK) -mmacosx-version-min=10.5
86    endif
87endif
88
89# BUILD_STANDALONE_EMULATOR is only defined when building with
90# the android-rebuild.sh script. The script will also provide
91# adequate values for HOST_CC
92#
93ifneq ($(BUILD_STANDALONE_EMULATOR),true)
94  # On Linux, use our custom 32-bit host toolchain, which contains the
95  # relevant headers and 32-bit libraries for audio (The host 64-bit Lucid
96  # doesn't provide these anymore, only their 64-bit versions).
97  ifeq ($(HOST_OS),linux)
98    HOST_SDK_TOOLCHAIN_PREFIX := prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/bin/i686-linux
99    # Don't do anything if the toolchain is not there
100    ifneq (,$(strip $(wildcard $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc)))
101      MY_CC  := $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc
102      MY_CXX := $(HOST_SDK_TOOLCHAIN_PREFIX)-g++
103      MY_AR  := $(HOST_SDK_TOOLCHAIN_PREFIX)-ar
104    endif # $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc exists
105  endif # HOST_OS == linux
106
107  ifneq ($(USE_CCACHE),)
108    ccache := prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache
109    ccache := $(strip $(wildcard $(ccache)))
110    ifneq ($(ccache),$(firstword $(MY_CC)))
111      MY_CC := $(ccache) $(MY_CC)
112    endif
113    ccache :=
114  endif
115endif
116
117
118ifneq ($(combo_target)$(TARGET_SIMULATOR),HOST_true)
119  ifneq ($(HOST_ARCH),x86_64)
120    MY_CFLAGS += -m32
121    MY_LDLIBS += -m32
122  endif
123endif
124
125# Enable warning, except those related to missing field initializers
126# (the QEMU coding style loves using these).
127#
128MY_CFLAGS += -Wall -Wno-missing-field-initializers
129
130# Needed to build fpu/softfloat-native.h properly
131MY_CFLAGS += -D_GNU_SOURCE=1
132
133# A useful function that can be used to start the declaration of a host
134# module. Avoids repeating the same stuff again and again.
135# Usage:
136#
137#  $(call start-emulator-library, <module-name>)
138#
139#  ... declarations
140#
141#  $(call end-emulator-library)
142#
143start-emulator-library = \
144    $(eval include $(CLEAR_VARS)) \
145    $(eval LOCAL_NO_DEFAULT_COMPILER_FLAGS := true) \
146    $(eval LOCAL_CC := $(MY_CC)) \
147    $(eval LOCAL_CXX := $(MY_CXX)) \
148    $(eval LOCAL_CFLAGS := $(MY_CFLAGS)) \
149    $(eval LOCAL_AR := $(MY_AR)) \
150    $(eval LOCAL_LDLIBS := $(MY_LDLIBS)) \
151    $(eval LOCAL_MODULE_TAGS := debug) \
152    $(eval LOCAL_MODULE := $1) \
153    $(eval LOCAL_MODULE_CLASS := STATIC_LIBRARIES)
154
155# Used with start-emulator-library
156end-emulator-library = \
157    $(eval include $(BUILD_HOST_STATIC_LIBRARY))
158
159# A variant of start-emulator-library to start the definition of a host
160# program instead. Use with end-emulator-program
161start-emulator-program = \
162    $(call start-emulator-library,$1) \
163    $(eval LOCAL_MODULE_CLASS := EXECUTABLES)
164
165# A varient of end-emulator-library for host programs instead
166end-emulator-program = \
167    $(eval LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)) \
168    $(eval include $(BUILD_HOST_EXECUTABLE))
169
170
171# The common libraries
172#
173QEMU_SYSTEM_LDLIBS := -lm
174ifeq ($(HOST_OS),windows)
175  QEMU_SYSTEM_LDLIBS += -mno-cygwin -mwindows -mconsole
176endif
177
178ifeq ($(HOST_OS),freebsd)
179    QEMU_SYSTEM_LDLIBS += -L/usr/local/lib -lpthread -lX11 -lutil
180endif
181
182ifeq ($(HOST_OS),linux)
183  QEMU_SYSTEM_LDLIBS += -lutil -lrt
184endif
185
186ifeq ($(HOST_OS),windows)
187  QEMU_SYSTEM_LDLIBS += -lwinmm -lws2_32 -liphlpapi
188else
189  QEMU_SYSTEM_LDLIBS += -lpthread
190endif
191
192ifeq ($(HOST_OS),darwin)
193  QEMU_SYSTEM_LDLIBS += -Wl,-framework,Cocoa
194endif
195
196include $(LOCAL_PATH)/Makefile.common
197
198# We want to build all variants of the emulator binaries. This makes
199# it easier to catch target-specific regressions during emulator development.
200EMULATOR_TARGET_ARCH := arm
201include $(LOCAL_PATH)/Makefile.target
202
203EMULATOR_TARGET_ARCH := x86
204include $(LOCAL_PATH)/Makefile.target
205
206##############################################################################
207##############################################################################
208###
209###  emulator: LAUNCHER FOR TARGET-SPECIFIC EMULATOR
210###
211###
212$(call start-emulator-program, emulator)
213
214LOCAL_SRC_FILES := android/main-emulator.c
215LOCAL_STATIC_LIBRARIES := emulator-common
216
217$(call end-emulator-program)
218
219##############################################################################
220##############################################################################
221###
222###  emulator-ui: UI FRONT-END PROGRAM
223###
224###
225$(call start-emulator-program, emulator-ui)
226
227LOCAL_STATIC_LIBRARIES := \
228    emulator-common \
229    emulator-libui \
230    emulator-common \
231
232
233LOCAL_CFLAGS += -DCONFIG_STANDALONE_UI=1
234
235LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) $(EMULATOR_LIBUI_CFLAGS)
236LOCAL_LDLIBS += $(EMULATOR_COMMON_LDLIBS) $(EMULATOR_LIBUI_LDLIBS)
237
238LOCAL_SRC_FILES := \
239    android/cmdline-option.c \
240    android/config.c \
241    android/help.c \
242    android/looper-generic.c \
243    android/snapshot.c \
244    android/main-common.c \
245    android/main.c \
246    android/opengles.c \
247    android/utils/setenv.c \
248    vl-android-ui.c \
249    android/protocol/core-connection.c \
250    android/protocol/attach-ui-impl.c \
251    android/protocol/fb-updates-impl.c \
252    android/protocol/ui-commands-impl.c \
253    android/protocol/core-commands-proxy.c \
254    android/protocol/user-events-proxy.c \
255
256$(call gen-hw-config-defs,android/main-common.c)
257
258LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
259
260LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
261
262$(call end-emulator-program)
263
264## VOILA!!
265
266endif  # TARGET_ARCH == arm || TARGET_ARCH == x86
267