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