blob: 4139226c513029684902fe69a146691ebbf2c856 [file] [log] [blame]
Jun Nakajima334ab472011-02-02 23:49:59 -08001ifneq (,$(filter $(TARGET_ARCH),arm x86))
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -08002LOCAL_PATH:= $(call my-dir)
3
Jun Nakajima334ab472011-02-02 23:49:59 -08004# determine the target cpu
5ifeq ($(TARGET_ARCH),arm)
6EMULATOR_TARGET_CPU := target-arm
7else
8EMULATOR_TARGET_CPU := target-i386
9endif
10
David 'Digit' Turner34d16512010-05-18 17:02:33 -070011# determine the host tag to use
12QEMU_HOST_TAG := $(HOST_PREBUILT_TAG)
13ifneq ($(USE_MINGW),)
14 QEMU_HOST_TAG := windows
15endif
16
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080017# determine the location of platform-specific directories
18#
19CONFIG_DIRS := \
David 'Digit' Turner34d16512010-05-18 17:02:33 -070020 $(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)
21
22ifeq ($(BUILD_STANDALONE_EMULATOR),true)
23 CONFIG_DIRS := $(LOCAL_PATH)/objs $(CONFIG_DIRS)
24endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080025
26CONFIG_INCLUDES := $(CONFIG_DIRS:%=-I%)
27
David 'Digit' Turner0a349b82011-03-02 12:49:26 +010028MY_CC := $(HOST_CC)
29MY_CXX := $(HOST_CXX)
30MY_AR := $(HOST_AR)
Kenny Root095cd0f2009-09-19 18:32:44 -050031
David 'Digit' Turner5d8f37a2009-09-14 14:32:27 -070032MY_OPTIM := -O2 -g -fno-PIC -falign-functions=0 -fomit-frame-pointer
33ifeq ($(BUILD_DEBUG_EMULATOR),true)
34 MY_OPTIM := -O0 -g
35endif
36
David 'Digit' Turner9a0f1fb2010-02-25 14:22:29 -080037MY_CFLAGS := $(CONFIG_INCLUDES) $(MY_OPTIM)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080038
David 'Digit' Turner466f5482009-07-30 15:50:19 +020039# 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
David 'Digit' Turnerb95f8922009-08-21 23:10:16 -070046MY_LDLIBS :=
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080047
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 -mno-cygwin
59 # we need Win32 features that are available since Windows 2000 Professional/Server (NT 5.0)
60 MY_CFLAGS += -DWINVER=0x501
61endif
62
63ifeq ($(HOST_ARCH),ppc)
64 MY_CFLAGS += -D__powerpc__
65endif
66
67ifeq ($(HOST_OS),darwin)
David 'Digit' Turner747f7d12011-01-06 22:24:26 +010068 MY_CFLAGS += -mdynamic-no-pic -D_DARWIN_C_SOURCE=1
David Turnerbba461c2009-06-03 10:48:15 -070069
70 # When building on Leopard or above, we need to use the 10.4 SDK
71 # or the generated binary will not run on Tiger.
72 DARWIN_VERSION := $(strip $(shell sw_vers -productVersion))
Jeff Hamiltond0d97342010-05-27 11:41:41 -050073 ifneq ($(filter 10.1 10.2 10.3 10.1.% 10.2.% 10.3.% 10.4 10.4.%,$(DARWIN_VERSION)),)
74 $(error Building the Android emulator requires OS X 10.5 or above)
David Turnerbba461c2009-06-03 10:48:15 -070075 endif
Jeff Hamiltond0d97342010-05-27 11:41:41 -050076 ifeq ($(filter 10.5 10.5.%,$(DARWIN_VERSION)),)
77 # We are on Snow Leopard or above
78 LEOPARD_SDK := /Developer/SDKs/MacOSX10.5.sdk
79 ifeq ($(strip $(wildcard $(LEOPARD_SDK))),)
80 $(info Please install the 10.5 SDK on this machine at $(LEOPARD_SDK))
David Turnerbba461c2009-06-03 10:48:15 -070081 $(error Aborting the build.)
82 endif
Jeff Hamiltond0d97342010-05-27 11:41:41 -050083 MY_CFLAGS += -isysroot $(LEOPARD_SDK) -mmacosx-version-min=10.5 -DMACOSX_DEPLOYMENT_TARGET=10.5
84 MY_LDLIBS += -isysroot $(LEOPARD_SDK) -Wl,-syslibroot,$(LEOPARD_SDK) -mmacosx-version-min=10.5
David Turnerbba461c2009-06-03 10:48:15 -070085 endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080086endif
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080087
88# BUILD_STANDALONE_EMULATOR is only defined when building with
89# the android-rebuild.sh script. The script will also provide
90# adequate values for HOST_CC
91#
92ifneq ($(BUILD_STANDALONE_EMULATOR),true)
David 'Digit' Turneraff94b82011-02-07 18:10:54 +010093 # On Linux, use our custom 32-bit host toolchain, which contains the
94 # relevant headers and 32-bit libraries for audio (The host 64-bit Lucid
95 # doesn't provide these anymore, only their 64-bit versions).
96 ifeq ($(HOST_OS),linux)
97 HOST_SDK_TOOLCHAIN_PREFIX := prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/bin/i686-linux
98 # Don't do anything if the toolchain is not there
99 ifneq (,$(strip $(wildcard $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc)))
David 'Digit' Turnerb580d262011-03-02 09:49:06 +0100100 MY_CC := $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc
101 MY_CXX := $(HOST_SDK_TOOLCHAIN_PREFIX)-g++
102 MY_AR := $(HOST_SDK_TOOLCHAIN_PREFIX)-ar
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100103 endif # $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc exists
104 endif # HOST_OS == linux
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800105
106 ifneq ($(USE_CCACHE),)
Ying Wang7bf9d7f2010-10-07 15:12:11 -0700107 ccache := prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache
David 'Digit' Turner4ed818f2011-03-12 13:05:15 +0100108 ccache := $(strip $(wildcard $(ccache)))
Ying Wang7bf9d7f2010-10-07 15:12:11 -0700109 ifneq ($(ccache),$(firstword $(MY_CC)))
110 MY_CC := $(ccache) $(MY_CC)
111 endif
112 ccache :=
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800113 endif
114endif
115
116
117ifneq ($(combo_target)$(TARGET_SIMULATOR),HOST_true)
118 ifneq ($(HOST_ARCH),x86_64)
David 'Digit' Turnerb95f8922009-08-21 23:10:16 -0700119 MY_CFLAGS += -m32
120 MY_LDLIBS += -m32
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800121 endif
122endif
123
David 'Digit' Turner4e024bb2010-09-22 14:19:28 +0200124# Enable warning, except those related to missing field initializers
125# (the QEMU coding style loves using these).
126#
127MY_CFLAGS += -Wall -Wno-missing-field-initializers
128
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100129# Needed to build fpu/softfloat-native.h properly
130MY_CFLAGS += -D_GNU_SOURCE=1
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800131
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100132# A useful function that can be used to start the declaration of a host
133# module. Avoids repeating the same stuff again and again.
134# Usage:
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800135#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100136# $(call start-emulator-library, <module-name>)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800137#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100138# ... declarations
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800139#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100140# $(call end-emulator-library)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800141#
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100142start-emulator-library = \
143 $(eval include $(CLEAR_VARS)) \
144 $(eval LOCAL_NO_DEFAULT_COMPILER_FLAGS := true) \
145 $(eval LOCAL_CC := $(MY_CC)) \
David 'Digit' Turnerb580d262011-03-02 09:49:06 +0100146 $(eval LOCAL_CXX := $(MY_CXX)) \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100147 $(eval LOCAL_CFLAGS := $(MY_CFLAGS)) \
David 'Digit' Turnerb580d262011-03-02 09:49:06 +0100148 $(eval LOCAL_AR := $(MY_AR)) \
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100149 $(eval LOCAL_LDLIBS := $(MY_LDLIBS)) \
150 $(eval LOCAL_MODULE_TAGS := debug) \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200151 $(eval LOCAL_MODULE := $1) \
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800152
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100153# Used with start-emulator-library
154end-emulator-library = \
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200155 $(eval include $(BUILD_HOST_STATIC_LIBRARY)) \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200156 $(eval EMULATOR_MODULE_TYPE := STATIC_LIBRARY)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800157
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100158# A variant of start-emulator-library to start the definition of a host
159# program instead. Use with end-emulator-program
David 'Digit' Turner088edf82011-05-09 15:59:28 +0200160start-emulator-program = \
161 $(call start-emulator-library,$1) \
David 'Digit' Turner317c9d52011-05-10 06:38:21 +0200162 $(eval EMULATOR_MODULE_TYPE := EXECUTABLES)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800163
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100164# A varient of end-emulator-library for host programs instead
165end-emulator-program = \
166 $(eval LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)) \
167 $(eval include $(BUILD_HOST_EXECUTABLE))
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800168
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700169
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700170# The common libraries
171#
172QEMU_SYSTEM_LDLIBS := -lm
173ifeq ($(HOST_OS),windows)
174 QEMU_SYSTEM_LDLIBS += -mno-cygwin -mwindows -mconsole
175endif
176
177ifeq ($(HOST_OS),freebsd)
178 QEMU_SYSTEM_LDLIBS += -L/usr/local/lib -lpthread -lX11 -lutil
179endif
180
181ifeq ($(HOST_OS),linux)
182 QEMU_SYSTEM_LDLIBS += -lutil -lrt
183endif
184
185ifeq ($(HOST_OS),windows)
186 QEMU_SYSTEM_LDLIBS += -lwinmm -lws2_32 -liphlpapi
187else
188 QEMU_SYSTEM_LDLIBS += -lpthread
189endif
190
David 'Digit' Turner393c0f12010-07-28 12:20:56 -0700191ifeq ($(HOST_OS),darwin)
192 QEMU_SYSTEM_LDLIBS += -Wl,-framework,Cocoa
193endif
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700194
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100195include $(LOCAL_PATH)/Makefile.common
196
197# We want to build all variants of the emulator binaries. This makes
198# it easier to catch target-specific regressions during emulator development.
199EMULATOR_TARGET_ARCH := arm
200include $(LOCAL_PATH)/Makefile.target
201
202EMULATOR_TARGET_ARCH := x86
203include $(LOCAL_PATH)/Makefile.target
Vladimir Chtchetkineba1f57f2010-07-27 14:14:15 -0700204
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800205##############################################################################
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100206##############################################################################
207###
David 'Digit' Turner2d238fd2011-03-25 10:34:47 +0100208### emulator: LAUNCHER FOR TARGET-SPECIFIC EMULATOR
209###
210###
211$(call start-emulator-program, emulator)
212
213LOCAL_SRC_FILES := android/main-emulator.c
214LOCAL_STATIC_LIBRARIES := emulator-common
215
216$(call end-emulator-program)
217
218##############################################################################
219##############################################################################
220###
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100221### emulator-ui: UI FRONT-END PROGRAM
222###
223###
224$(call start-emulator-program, emulator-ui)
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800225
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100226LOCAL_STATIC_LIBRARIES := \
227 emulator-common \
228 emulator-libui \
229 emulator-common \
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800230
231
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100232LOCAL_CFLAGS += -DCONFIG_STANDALONE_UI=1
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800233
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100234LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) $(EMULATOR_LIBUI_CFLAGS)
235LOCAL_LDLIBS += $(EMULATOR_COMMON_LDLIBS) $(EMULATOR_LIBUI_LDLIBS)
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800236
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100237LOCAL_SRC_FILES := \
238 android/cmdline-option.c \
239 android/config.c \
240 android/help.c \
241 android/looper-generic.c \
242 android/snapshot.c \
243 android/main-common.c \
244 android/main.c \
245 vl-android-ui.c \
246 android/protocol/core-connection.c \
247 android/protocol/attach-ui-impl.c \
248 android/protocol/fb-updates-impl.c \
249 android/protocol/ui-commands-impl.c \
250 android/protocol/core-commands-proxy.c \
251 android/protocol/user-events-proxy.c \
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800252
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800253LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
254
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800255LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
256
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100257$(call end-emulator-program)
Xavier Ducrohetfc8ed802011-02-09 18:04:23 -0800258
David 'Digit' Turneraff94b82011-02-07 18:10:54 +0100259## VOILA!!
David 'Digit' Turnerf59442f2010-10-08 16:22:10 +0200260
Jun Nakajima334ab472011-02-02 23:49:59 -0800261endif # TARGET_ARCH == arm || TARGET_ARCH == x86