blob: 1f91b6471752b35eacb9cd58b0fa8146e0d60d6f [file] [log] [blame]
Joe Onoratoedb86c32012-07-25 14:28:40 -07001ifeq ($(BUILD_EMULATOR),true)
2
Bhanu Chetlapalli741dc132012-05-08 17:16:03 -07003ifneq (,$(filter $(TARGET_ARCH),arm x86 mips))
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -08004LOCAL_PATH:= $(call my-dir)
5
Jun Nakajima334ab472011-02-02 23:49:59 -08006# determine the target cpu
7ifeq ($(TARGET_ARCH),arm)
8EMULATOR_TARGET_CPU := target-arm
Bhanu Chetlapalli741dc132012-05-08 17:16:03 -07009endif
10ifeq ($(TARGET_ARCH),x86)
Jun Nakajima334ab472011-02-02 23:49:59 -080011EMULATOR_TARGET_CPU := target-i386
12endif
Bhanu Chetlapalli741dc132012-05-08 17:16:03 -070013ifeq ($(TARGET_ARCH),mips)
14EMULATOR_TARGET_CPU := target-mips
15endif
Jun Nakajima334ab472011-02-02 23:49:59 -080016
David 'Digit' Turner34d16512010-05-18 17:02:33 -070017# determine the host tag to use
18QEMU_HOST_TAG := $(HOST_PREBUILT_TAG)
19ifneq ($(USE_MINGW),)
20 QEMU_HOST_TAG := windows
21endif
22
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080023# determine the location of platform-specific directories
24#
25CONFIG_DIRS := \
David 'Digit' Turner34d16512010-05-18 17:02:33 -070026 $(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)
27
28ifeq ($(BUILD_STANDALONE_EMULATOR),true)
29 CONFIG_DIRS := $(LOCAL_PATH)/objs $(CONFIG_DIRS)
30endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080031
32CONFIG_INCLUDES := $(CONFIG_DIRS:%=-I%)
33
David 'Digit' Turner0a349b82011-03-02 12:49:26 +010034MY_CC := $(HOST_CC)
35MY_CXX := $(HOST_CXX)
36MY_AR := $(HOST_AR)
Kenny Root095cd0f2009-09-19 18:32:44 -050037
David 'Digit' Turner5d8f37a2009-09-14 14:32:27 -070038MY_OPTIM := -O2 -g -fno-PIC -falign-functions=0 -fomit-frame-pointer
39ifeq ($(BUILD_DEBUG_EMULATOR),true)
40 MY_OPTIM := -O0 -g
41endif
42
David 'Digit' Turner9a0f1fb2010-02-25 14:22:29 -080043MY_CFLAGS := $(CONFIG_INCLUDES) $(MY_OPTIM)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080044
David 'Digit' Turner466f5482009-07-30 15:50:19 +020045# Overwrite configuration for debug builds.
46#
47ifeq ($(BUILD_DEBUG_EMULATOR),true)
Iliyan Malchevd00f7c42012-03-30 10:54:20 -070048 MY_CFLAGS := $(CONFIG_INCLUDES)
49 MY_CFLAGS += -O0 -g
50 MY_CFLAGS += -fno-PIC -falign-functions=0
David 'Digit' Turner466f5482009-07-30 15:50:19 +020051endif
52
David 'Digit' Turnerb95f8922009-08-21 23:10:16 -070053MY_LDLIBS :=
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080054
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080055ifeq ($(HOST_OS),freebsd)
Andrew Hsiehc7389bd2012-03-13 02:13:40 -070056 MY_CFLAGS += -I /usr/local/include
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080057endif
58
59ifeq ($(HOST_OS),windows)
Andrew Hsiehc7389bd2012-03-13 02:13:40 -070060 # we need Win32 features that are available since Windows 2000 Professional/Server (NT 5.0)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080061 MY_CFLAGS += -DWINVER=0x501
Andrew Hsiehc7389bd2012-03-13 02:13:40 -070062 MY_CFLAGS += -D_WIN32
63 ifneq ($(BUILD_HOST_64bit),)
64 # Microsoft 64-bit compiler define both _WIN32 and _WIN64
65 MY_CFLAGS += -D_WIN64
66 # amd64-mingw32msvc- toolchain still name it vfw32. May change it once amd64-mingw32msvc-
67 # is stabilized
68 MY_LDLIBS += -lvfw32
69 else
70 MY_LDLIBS += -lvfw32
71 endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080072endif
73
74ifeq ($(HOST_ARCH),ppc)
75 MY_CFLAGS += -D__powerpc__
76endif
77
78ifeq ($(HOST_OS),darwin)
David 'Digit' Turner747f7d12011-01-06 22:24:26 +010079 MY_CFLAGS += -mdynamic-no-pic -D_DARWIN_C_SOURCE=1
David Turnerbba461c2009-06-03 10:48:15 -070080
SangWook Han08c1bde2012-07-26 08:06:58 +090081 MY_CFLAGS += -isysroot $(mac_sdk_root) -mmacosx-version-min=$(mac_sdk_version) -DMACOSX_DEPLOYMENT_TARGET=$(mac_sdk_version)
82 MY_LDLIBS += -isysroot $(mac_sdk_root) -Wl,-syslibroot,$(mac_sdk_root) -mmacosx-version-min=$(mac_sdk_version)
Andrew Hsiehc2f0b962012-08-09 18:21:33 +080083
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080084endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080085
86# BUILD_STANDALONE_EMULATOR is only defined when building with
87# the android-rebuild.sh script. The script will also provide
88# adequate values for HOST_CC
89#
90ifneq ($(BUILD_STANDALONE_EMULATOR),true)
Andrew Hsiehc7389bd2012-03-13 02:13:40 -070091 # On Linux, use our custom 32-bit host toolchain (unless BUILD_HOST_64bit=1)
92 # which contains the relevant headers and 32-bit libraries for audio (The host 64-bit
93 # Lucid doesn't provide these anymore, only their 64-bit versions).
David 'Digit' Turneraff94b82011-02-07 18:10:54 +010094 ifeq ($(HOST_OS),linux)
Andrew Hsiehd0f2ab62012-03-23 17:35:11 +080095 HOST_SDK_TOOLCHAIN_PREFIX := prebuilts/tools/gcc-sdk
David 'Digit' Turneraff94b82011-02-07 18:10:54 +010096 # Don't do anything if the toolchain is not there
Andrew Hsiehd0f2ab62012-03-23 17:35:11 +080097 ifneq (,$(strip $(wildcard $(HOST_SDK_TOOLCHAIN_PREFIX)/gcc)))
98 MY_CC := $(HOST_SDK_TOOLCHAIN_PREFIX)/gcc
99 MY_CXX := $(HOST_SDK_TOOLCHAIN_PREFIX)/g++
100 MY_AR := $(HOST_SDK_TOOLCHAIN_PREFIX)/ar
101 endif # $(HOST_SDK_TOOLCHAIN_PREFIX)/gcc exists
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100102 endif # HOST_OS == linux
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800103
104 ifneq ($(USE_CCACHE),)
Ying Wang762d5de2012-01-09 11:53:58 -0800105 ccache := prebuilts/misc/$(HOST_PREBUILT_TAG)/ccache/ccache
David 'Digit' Turner4ed818f2011-03-12 13:05:15 +0100106 ccache := $(strip $(wildcard $(ccache)))
Ying Wang7bf9d7f2010-10-07 15:12:11 -0700107 ifneq ($(ccache),$(firstword $(MY_CC)))
108 MY_CC := $(ccache) $(MY_CC)
Andrew Hsiehc7389bd2012-03-13 02:13:40 -0700109 MY_CXX := $(ccache) $(MY_CXX)
Ying Wang7bf9d7f2010-10-07 15:12:11 -0700110 endif
111 ccache :=
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800112 endif
Jesse Hall183e9272012-04-26 15:13:27 -0700113
114 QEMU_OPENGLES_INCLUDE := sdk/emulator/opengl/host/include
115 QEMU_OPENGLES_LIBS := $(HOST_OUT)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800116endif
117
118
119ifneq ($(combo_target)$(TARGET_SIMULATOR),HOST_true)
Andrew Hsiehc7389bd2012-03-13 02:13:40 -0700120 ifneq ($(BUILD_HOST_64bit),)
121 MY_CFLAGS += -m64
122 MY_LDLIBS += -m64
123 else
124 ifneq ($(HOST_ARCH),x86_64)
125 MY_CFLAGS += -m32
126 MY_LDLIBS += -m32
127 endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800128 endif
Andrew Hsieh632a0e12012-04-28 00:48:53 +0800129
130 ifneq ($(BUILD_HOST_static),)
131 MY_LDLIBS += -static
132 endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800133endif
134
David 'Digit' Turner4e024bb2010-09-22 14:19:28 +0200135# Enable warning, except those related to missing field initializers
136# (the QEMU coding style loves using these).
137#
138MY_CFLAGS += -Wall -Wno-missing-field-initializers
139
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100140# Needed to build fpu/softfloat-native.h properly
141MY_CFLAGS += -D_GNU_SOURCE=1
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800142
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100143# A useful function that can be used to start the declaration of a host
144# module. Avoids repeating the same stuff again and again.
145# Usage:
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800146#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100147# $(call start-emulator-library, <module-name>)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800148#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100149# ... declarations
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800150#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100151# $(call end-emulator-library)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800152#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100153start-emulator-library = \
154 $(eval include $(CLEAR_VARS)) \
155 $(eval LOCAL_NO_DEFAULT_COMPILER_FLAGS := true) \
156 $(eval LOCAL_CC := $(MY_CC)) \
David 'Digit' Turnerb580d262011-03-02 09:49:06 +0100157 $(eval LOCAL_CXX := $(MY_CXX)) \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100158 $(eval LOCAL_CFLAGS := $(MY_CFLAGS)) \
David 'Digit' Turnerb580d262011-03-02 09:49:06 +0100159 $(eval LOCAL_AR := $(MY_AR)) \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100160 $(eval LOCAL_LDLIBS := $(MY_LDLIBS)) \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200161 $(eval LOCAL_MODULE := $1) \
David 'Digit' Turner42fc4492011-06-29 13:16:16 +0200162 $(eval LOCAL_MODULE_CLASS := STATIC_LIBRARIES)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800163
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100164# Used with start-emulator-library
165end-emulator-library = \
David 'Digit' Turner42fc4492011-06-29 13:16:16 +0200166 $(eval include $(BUILD_HOST_STATIC_LIBRARY))
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800167
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100168# A variant of start-emulator-library to start the definition of a host
169# program instead. Use with end-emulator-program
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200170start-emulator-program = \
171 $(call start-emulator-library,$1) \
David 'Digit' Turner42fc4492011-06-29 13:16:16 +0200172 $(eval LOCAL_MODULE_CLASS := EXECUTABLES)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800173
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100174# A varient of end-emulator-library for host programs instead
175end-emulator-program = \
176 $(eval LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)) \
177 $(eval include $(BUILD_HOST_EXECUTABLE))
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800178
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700179
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700180# The common libraries
181#
182QEMU_SYSTEM_LDLIBS := -lm
183ifeq ($(HOST_OS),windows)
184 QEMU_SYSTEM_LDLIBS += -mno-cygwin -mwindows -mconsole
185endif
186
187ifeq ($(HOST_OS),freebsd)
188 QEMU_SYSTEM_LDLIBS += -L/usr/local/lib -lpthread -lX11 -lutil
189endif
190
191ifeq ($(HOST_OS),linux)
192 QEMU_SYSTEM_LDLIBS += -lutil -lrt
193endif
194
195ifeq ($(HOST_OS),windows)
Andrew Hsiehc7389bd2012-03-13 02:13:40 -0700196 # amd64-mingw32msvc- toolchain still name it ws2_32. May change it once amd64-mingw32msvc-
197 # is stabilized
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700198 QEMU_SYSTEM_LDLIBS += -lwinmm -lws2_32 -liphlpapi
199else
200 QEMU_SYSTEM_LDLIBS += -lpthread
201endif
202
David 'Digit' Turner393c0f12010-07-28 12:20:56 -0700203ifeq ($(HOST_OS),darwin)
Vladimir Chtchetkine955a9972011-10-12 15:40:17 -0700204 QEMU_SYSTEM_LDLIBS += -Wl,-framework,Cocoa,-framework,QTKit,-framework,CoreVideo
Andrew Hsiehc2f0b962012-08-09 18:21:33 +0800205
206 # SDK 10.6+ doesn't have __dyld_func_lookup anymore. Dynamic library lookup symbols
207 # are instead resolved at runtime
208 OSX_VERSION_MAJOR := $(shell echo $(mac_sdk_version) | cut -d . -f 2)
209 OSX_VERSION_MAJOR_GREATER_THAN_OR_EQUAL_TO_6 := $(shell [ $(OSX_VERSION_MAJOR) -ge 6 ] && echo true)
210 ifeq ($(OSX_VERSION_MAJOR_GREATER_THAN_OR_EQUAL_TO_6),true)
Al Sutton49dd3f32012-01-04 15:19:05 -0800211 QEMU_SYSTEM_LDLIBS += -undefined dynamic_lookup
Al Suttonc3c9c6f2011-12-21 13:16:22 -0800212 endif
David 'Digit' Turner393c0f12010-07-28 12:20:56 -0700213endif
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700214
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100215include $(LOCAL_PATH)/Makefile.common
216
Raphael Mollcdbea232012-05-04 15:04:27 -0700217ifeq ($(HOST_OS),windows)
218 # on Windows, link the icon file as well into the executable
219 # unfortunately, our build system doesn't help us much, so we need
220 # to use some weird pathnames to make this work...
221
222 # Locate windres executable
223 WINDRES := windres
224 ifneq ($(USE_MINGW),)
225 # When building the Windows emulator under Linux, use the MinGW one
226 WINDRES := i586-mingw32msvc-windres
227 endif
228
229 # Usage: $(eval $(call insert-windows-icon))
230 define insert-windows-icon
231 LOCAL_PREBUILT_OBJ_FILES += images/emulator_icon.o
232 endef
233
234# This seems to be the only way to add an object file that was not generated from
235# a C/C++/Java source file to our build system. and very unfortunately,
236# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
237# us to put the object file in the source directory.
238$(LOCAL_PATH)/images/emulator_icon.o: $(LOCAL_PATH)/images/android_icon.rc
239 $(WINDRES) $< -I $(LOCAL_PATH)/images -o $@
240endif
241
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100242# We want to build all variants of the emulator binaries. This makes
243# it easier to catch target-specific regressions during emulator development.
244EMULATOR_TARGET_ARCH := arm
245include $(LOCAL_PATH)/Makefile.target
246
247EMULATOR_TARGET_ARCH := x86
248include $(LOCAL_PATH)/Makefile.target
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700249
Bhanu Chetlapalli741dc132012-05-08 17:16:03 -0700250EMULATOR_TARGET_ARCH := mips
251include $(LOCAL_PATH)/Makefile.target
252
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800253##############################################################################
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100254##############################################################################
255###
David 'Digit' Turner2d238fd2011-03-25 10:34:47 +0100256### emulator: LAUNCHER FOR TARGET-SPECIFIC EMULATOR
257###
258###
259$(call start-emulator-program, emulator)
260
261LOCAL_SRC_FILES := android/main-emulator.c
262LOCAL_STATIC_LIBRARIES := emulator-common
263
Raphael Mollcdbea232012-05-04 15:04:27 -0700264ifeq ($(HOST_OS),windows)
265$(eval $(call insert-windows-icon))
266endif
267
David 'Digit' Turner2d238fd2011-03-25 10:34:47 +0100268$(call end-emulator-program)
269
270##############################################################################
271##############################################################################
272###
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100273### emulator-ui: UI FRONT-END PROGRAM
274###
275###
276$(call start-emulator-program, emulator-ui)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800277
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100278LOCAL_STATIC_LIBRARIES := \
279 emulator-common \
280 emulator-libui \
281 emulator-common \
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800282
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100283LOCAL_CFLAGS += -DCONFIG_STANDALONE_UI=1
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800284
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100285LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) $(EMULATOR_LIBUI_CFLAGS)
286LOCAL_LDLIBS += $(EMULATOR_COMMON_LDLIBS) $(EMULATOR_LIBUI_LDLIBS)
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800287
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100288LOCAL_SRC_FILES := \
289 android/cmdline-option.c \
290 android/config.c \
291 android/help.c \
292 android/looper-generic.c \
293 android/snapshot.c \
294 android/main-common.c \
295 android/main.c \
David 'Digit' Turnercb88e792011-08-26 01:35:14 +0200296 android/opengles.c \
David 'Digit' Turnerf816a752011-06-23 18:40:11 +0200297 android/utils/setenv.c \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100298 vl-android-ui.c \
299 android/protocol/core-connection.c \
300 android/protocol/attach-ui-impl.c \
301 android/protocol/fb-updates-impl.c \
302 android/protocol/ui-commands-impl.c \
303 android/protocol/core-commands-proxy.c \
304 android/protocol/user-events-proxy.c \
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800305
David 'Digit' Turner42fc4492011-06-29 13:16:16 +0200306$(call gen-hw-config-defs,android/main-common.c)
307
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800308LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
309
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800310LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
311
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100312$(call end-emulator-program)
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800313
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100314## VOILA!!
David 'Digit' Turnerf59442f2010-10-08 16:22:10 +0200315
Bhanu Chetlapalli741dc132012-05-08 17:16:03 -0700316endif # TARGET_ARCH == arm || TARGET_ARCH == x86 || TARGET_ARCH == mips
Joe Onoratoedb86c32012-07-25 14:28:40 -0700317endif # BUILD_EMULATOR