Makefile.android revision 79949d6df58f424c1d9c6526457d5760eb3c2c83
1ifeq ($(TARGET_ARCH),arm)
2LOCAL_PATH:= $(call my-dir)
3
4# determine the host tag to use
5QEMU_HOST_TAG := $(HOST_PREBUILT_TAG)
6ifneq ($(USE_MINGW),)
7    QEMU_HOST_TAG := windows
8endif
9
10# determine the location of platform-specific directories
11#
12CONFIG_DIRS     := \
13    $(LOCAL_PATH)/android/config \
14    $(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)
15
16ifeq ($(BUILD_STANDALONE_EMULATOR),true)
17    CONFIG_DIRS := $(LOCAL_PATH)/objs $(CONFIG_DIRS)
18endif
19
20CONFIG_INCLUDES := $(CONFIG_DIRS:%=-I%)
21
22MY_CC := $(HOST_CC)
23
24MY_OPTIM := -O2 -g -fno-PIC -falign-functions=0 -fomit-frame-pointer
25ifeq ($(BUILD_DEBUG_EMULATOR),true)
26    MY_OPTIM := -O0 -g
27endif
28
29MY_CFLAGS := $(CONFIG_INCLUDES) $(MY_OPTIM)
30
31# Overwrite configuration for debug builds.
32#
33ifeq ($(BUILD_DEBUG_EMULATOR),true)
34    MY_CFLAGS := $(CONFIG_INCLUDES) -O0 -g \
35                 -fno-PIC -falign-functions=0
36endif
37
38MY_CFLAGS += -DCONFIG_MEMCHECK
39
40MY_LDLIBS :=
41
42# this is needed to build the emulator on 64-bit Linux systems
43ifeq ($(HOST_OS)-$(HOST_ARCH),linux-x86)
44  MY_CFLAGS += -Wa,--32
45endif
46
47ifeq ($(HOST_OS),freebsd)
48  MY_CFLAGS += -Wa,--32 -I /usr/local/include
49endif
50
51ifeq ($(HOST_OS),windows)
52  MY_CFLAGS += -D_WIN32 -mno-cygwin
53  # we need Win32 features  that are available since Windows 2000 Professional/Server (NT 5.0)
54  MY_CFLAGS += -DWINVER=0x501
55endif
56
57ifeq ($(HOST_ARCH),ppc)
58    MY_CFLAGS += -D__powerpc__
59endif
60
61ifeq ($(HOST_OS),darwin)
62    MY_CFLAGS += -mdynamic-no-pic
63
64    # When building on Leopard or above, we need to use the 10.4 SDK
65    # or the generated binary will not run on Tiger.
66    DARWIN_VERSION := $(strip $(shell sw_vers -productVersion))
67    ifneq ($(filter 10.1 10.2 10.3 10.1.% 10.2.% 10.3.% 10.4 10.4.%,$(DARWIN_VERSION)),)
68        $(error Building the Android emulator requires OS X 10.5 or above)
69    endif
70    ifeq ($(filter 10.5 10.5.%,$(DARWIN_VERSION)),)
71        # We are on Snow Leopard or above
72        LEOPARD_SDK := /Developer/SDKs/MacOSX10.5.sdk
73        ifeq ($(strip $(wildcard $(LEOPARD_SDK))),)
74            $(info  Please install the 10.5 SDK on this machine at $(LEOPARD_SDK))
75            $(error Aborting the build.)
76        endif
77        MY_CFLAGS += -isysroot $(LEOPARD_SDK) -mmacosx-version-min=10.5 -DMACOSX_DEPLOYMENT_TARGET=10.5
78        MY_LDLIBS += -isysroot $(LEOPARD_SDK) -Wl,-syslibroot,$(LEOPARD_SDK) -mmacosx-version-min=10.5
79    endif
80endif
81
82# BUILD_STANDALONE_EMULATOR is only defined when building with
83# the android-rebuild.sh script. The script will also provide
84# adequate values for HOST_CC
85#
86ifneq ($(BUILD_STANDALONE_EMULATOR),true)
87
88  ifneq ($(USE_CCACHE),)
89    ccache := prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache
90    ifneq ($(ccache),$(firstword $(MY_CC)))
91      MY_CC := $(ccache) $(MY_CC)
92    endif
93    ccache :=
94  endif
95endif
96
97
98ifneq ($(combo_target)$(TARGET_SIMULATOR),HOST_true)
99  ifneq ($(HOST_ARCH),x86_64)
100    MY_CFLAGS += -m32
101    MY_LDLIBS += -m32
102  endif
103endif
104
105# Enable warning, except those related to missing field initializers
106# (the QEMU coding style loves using these).
107#
108MY_CFLAGS += -Wall -Wno-missing-field-initializers
109
110include $(CLEAR_VARS)
111
112###########################################################
113# Zlib configuration
114#
115ZLIB_DIR := distrib/zlib-1.2.3
116include $(LOCAL_PATH)/$(ZLIB_DIR)/sources.make
117
118###########################################################
119# Libpng configuration
120#
121LIBPNG_DIR := distrib/libpng-1.2.19
122include $(LOCAL_PATH)/$(LIBPNG_DIR)/sources.make
123
124###############################################################################
125# build the TCG code generator
126#
127include $(CLEAR_VARS)
128
129LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
130LOCAL_CC                        := $(MY_CC)
131LOCAL_CFLAGS                    := $(MY_CFLAGS) $(LOCAL_CFLAGS)
132LOCAL_LDLIBS                    := $(MY_LDLIBS)
133LOCAL_MODULE                    := emulator-tcg
134
135TCG_TARGET := $(HOST_ARCH)
136ifeq ($(TCG_TARGET),x86)
137  TCG_TARGET := i386
138endif
139
140TCG_CFLAGS := -I$(LOCAL_PATH)/tcg -I$(LOCAL_PATH)/tcg/$(TCG_TARGET)
141
142LOCAL_CFLAGS += $(TCG_CFLAGS) -DNEED_CPU_H \
143                -I$(LOCAL_PATH)/target-arm \
144                -I$(LOCAL_PATH)/fpu \
145
146LOCAL_SRC_FILES := \
147    tcg/tcg.c \
148
149include $(BUILD_HOST_STATIC_LIBRARY)
150
151##############################################################################
152# build the HW emulation support
153#
154include $(CLEAR_VARS)
155
156LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
157LOCAL_CC                        := $(MY_CC)
158LOCAL_LDLIBS                    := $(MY_LDLIBS)
159LOCAL_MODULE                    := emulator-hw
160
161HW_CFLAGS    := -I$(LOCAL_PATH)/hw
162
163LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) -DNEED_CPU_H
164LOCAL_CFLAGS += -I$(LOCAL_PATH)/target-arm -I$(LOCAL_PATH)/fpu $(HW_CFLAGS)
165LOCAL_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
166
167HW_SOURCES := \
168    android_arm.c \
169    arm_pic.c \
170    bt.c \
171    bt-hci.c \
172    bt-hid.c \
173    bt-l2cap.c \
174    bt-sdp.c \
175    cdrom.c \
176    dma.c \
177    irq.c \
178    goldfish_audio.c \
179    goldfish_battery.c \
180    goldfish_device.c \
181    goldfish_events_device.c \
182    goldfish_fb.c \
183    goldfish_interrupt.c \
184    goldfish_memlog.c \
185    goldfish_mmc.c \
186    goldfish_nand.c  \
187    goldfish_switch.c \
188    goldfish_timer.c \
189    goldfish_trace.c \
190    goldfish_tty.c \
191    msmouse.c \
192    pci.c \
193    qdev.c \
194    scsi-disk.c \
195    smc91c111.c \
196    sysbus.c \
197    usb-hid.c \
198    usb-hub.c \
199    usb-msd.c \
200    usb-ohci.c \
201    usb.c \
202    watchdog.c \
203
204LOCAL_SRC_FILES += $(HW_SOURCES:%=hw/%)
205
206include $(BUILD_HOST_STATIC_LIBRARY)
207
208##############################################################################
209# build the ELF/DWARF stuff
210# This library is used by emulator's memory checker to extract debug information
211# from the symbol files when reporting memory allocation violations. In
212# particular, this library is used to extract routine name and source file
213# location for the code address where violation has been detected.
214#
215include $(CLEAR_VARS)
216
217LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
218LOCAL_CC                        := $(MY_CC)
219LOCAL_LDLIBS                    := $(MY_LDLIBS)
220LOCAL_MODULE                    := emulator-elff
221LOCAL_CPP_EXTENSION             := .cc
222
223ELFF_CFLAGS    := -I$(LOCAL_PATH)/elff
224
225LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) -fno-exceptions
226LOCAL_CFLAGS += -I$(LOCAL_PATH)/target-arm -I$(LOCAL_PATH)/fpu $(ELFF_CFLAGS)
227LOCAL_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
228
229ELFF_SOURCES := \
230    dwarf_cu.cc \
231    dwarf_die.cc \
232    dwarf_utils.cc \
233    elf_alloc.cc \
234    elf_file.cc \
235    elf_mapped_section.cc \
236    elff_api.cc \
237
238LOCAL_SRC_FILES += $(ELFF_SOURCES:%=elff/%)
239ELFF_LDLIBS := -lstdc++
240
241include $(BUILD_HOST_STATIC_LIBRARY)
242
243##############################################################################
244# build the memory access checking support
245# Memory access checker uses information collected by instrumented code in
246# libc.so in order to keep track of memory blocks allocated from heap. Memory
247# checker then uses this information to make sure that every access to allocated
248# memory is within allocated block. This information also allows detecting
249# memory leaks and attempts to free/realloc invalid pointers.
250#
251include $(CLEAR_VARS)
252
253LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
254LOCAL_CC                        := $(MY_CC)
255LOCAL_LDLIBS                    := $(MY_LDLIBS)
256LOCAL_MODULE                    := emulator-memcheck
257
258MCHK_CFLAGS    := -I$(LOCAL_PATH)/memcheck -I$(LOCAL_PATH)/elff
259
260LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) -DNEED_CPU_H
261LOCAL_CFLAGS += -I$(LOCAL_PATH)/target-arm -I$(LOCAL_PATH)/fpu $(MCHK_CFLAGS)
262LOCAL_CFLAGS += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
263
264MCHK_SOURCES := \
265    memcheck.c \
266    memcheck_proc_management.c \
267    memcheck_malloc_map.c \
268    memcheck_mmrange_map.c \
269    memcheck_util.c \
270
271LOCAL_SRC_FILES += $(MCHK_SOURCES:%=memcheck/%)
272
273include $(BUILD_HOST_STATIC_LIBRARY)
274
275##############################################################################
276# build the ARM-specific emulation engine sources
277#
278include $(CLEAR_VARS)
279
280LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
281LOCAL_CC                        := $(MY_CC)
282LOCAL_MODULE                    := emulator-arm
283LOCAL_LDLIBS                    := $(MY_LDLIBS)
284LOCAL_CFLAGS                    := $(MY_CFLAGS) $(LOCAL_CFLAGS)
285LOCAL_STATIC_LIBRARIES          := emulator-hw
286
287LOCAL_CFLAGS := -fno-PIC -fomit-frame-pointer -Wno-sign-compare
288LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS)
289
290LOCAL_CFLAGS += -I$(LOCAL_PATH) \
291                -I$(LOCAL_PATH)/target-arm \
292                -I$(LOCAL_PATH)/fpu \
293                $(TCG_CFLAGS) \
294                $(HW_CFLAGS) \
295                -DNEED_CPU_H \
296
297ifeq ($(HOST_ARCH),ppc)
298    LOCAL_CFLAGS += -D__powerpc__
299endif
300
301LOCAL_SRC_FILES += exec.c cpu-exec.c  \
302                   target-arm/op_helper.c \
303                   target-arm/iwmmxt_helper.c \
304                   target-arm/neon_helper.c \
305                   target-arm/helper.c \
306                   target-arm/translate.c \
307                   target-arm/machine.c \
308                   translate-all.c \
309                   hw/armv7m.c \
310                   hw/armv7m_nvic.c \
311                   arm-semi.c \
312                   trace.c \
313                   varint.c \
314                   dcache.c \
315                   softmmu_outside_jit.c \
316
317LOCAL_SRC_FILES += fpu/softfloat.c
318
319include $(BUILD_HOST_STATIC_LIBRARY)
320
321##############################################################################
322# SDL-related definitions
323#
324
325# Build SDL from sources except on linux-x86, to avoid installing all
326# the X11 development packages on our build servers.
327#
328BUILD_SDL_FROM_SOURCES := true
329ifeq ($(QEMU_HOST_TAG),linux-x86)
330    BUILD_SDL_FROM_SOURCES := false
331endif
332ifeq ($(QEMU_HOST_TAG),darwin-x86)
333    BUILD_SDL_FROM_SOURCES := false
334endif
335ifeq ($(BUILD_STANDALONE_EMULATOR),true)
336    BUILD_SDL_FROM_SOURCES := true
337endif
338
339ifneq ($(SDL_CONFIG),)
340    BUILD_SDL_FROM_SOURCES := false
341endif
342
343ifneq ($(BUILD_SDL_FROM_SOURCES),true)
344
345SDL_CONFIG ?= prebuilt/$(QEMU_HOST_TAG)/sdl/bin/sdl-config
346SDL_CFLAGS := $(shell $(SDL_CONFIG) --cflags)
347
348# We need to filter out the _GNU_SOURCE variable because it breaks recent
349# releases of Cygwin when using the -mno-cygwin option. Moreover, we don't
350# need this macro at all to build the Android emulator.
351SDL_CFLAGS := $(filter-out -D_GNU_SOURCE=1,$(SDL_CFLAGS))
352SDL_LDLIBS := $(filter-out %.a %.lib,$(shell $(SDL_CONFIG) --static-libs))
353
354# Circular dependencies between libSDL and libSDLmain;
355# We repeat the libraries in the final link to work around it.
356SDL_STATIC_LIBRARIES := libSDL libSDLmain libSDL libSDLmain
357
358else   # !BUILD_STANDALONE_EMULATOR
359
360SDL_DIR := distrib/sdl-1.2.12
361include $(LOCAL_PATH)/$(SDL_DIR)/sources.make
362
363endif  # !BUILD_STANDALONE_EMULATOR
364
365##############################################################################
366# determine audio sources, build the prebuilt audio-library if needed
367#
368
369# determine AUDIO sources based on current configuration
370#
371AUDIO_SOURCES := audio.c noaudio.c wavaudio.c wavcapture.c mixeng.c
372AUDIO_CFLAGS  := -I$(LOCAL_PATH)/audio -DHAS_AUDIO
373AUDIO_LDLIBS  :=
374
375ifeq ($(HOST_OS),darwin)
376  CONFIG_COREAUDIO ?= yes
377  AUDIO_CFLAGS += -DHOST_BSD=1
378endif
379
380ifeq ($(HOST_OS),windows)
381  CONFIG_WINAUDIO ?= yes
382endif
383
384ifeq ($(HOST_OS),linux)
385  CONFIG_OSS  ?= yes
386  CONFIG_ALSA ?= yes
387  CONFIG_PULSEAUDIO ?= yes
388  CONFIG_ESD  ?= yes
389endif
390
391ifeq ($(HOST_OS),freebsd)
392  CONFIG_OSS ?= yes
393endif
394
395ifeq ($(CONFIG_COREAUDIO),yes)
396  AUDIO_SOURCES += coreaudio.c
397  AUDIO_CFLAGS  += -DCONFIG_COREAUDIO
398  AUDIO_LDLIBS  += -Wl,-framework,CoreAudio
399endif
400
401ifeq ($(CONFIG_WINAUDIO),yes)
402  AUDIO_SOURCES += winaudio.c
403  AUDIO_CFLAGS  += -DCONFIG_WINAUDIO
404endif
405
406ifeq ($(CONFIG_PULSEAUDIO),yes)
407  AUDIO_SOURCES += paaudio.c audio_pt_int.c
408  AUDIO_CFLAGS  += -DCONFIG_PULSEAUDIO
409endif
410
411ifeq ($(CONFIG_ALSA),yes)
412  AUDIO_SOURCES += alsaaudio.c audio_pt_int.c
413  AUDIO_CFLAGS  += -DCONFIG_ALSA
414endif
415
416ifeq ($(CONFIG_ESD),yes)
417  AUDIO_SOURCES += esdaudio.c
418  AUDIO_CFLAGS  += -DCONFIG_ESD
419endif
420
421ifeq ($(CONFIG_OSS),yes)
422  AUDIO_SOURCES += ossaudio.c
423  AUDIO_CFLAGS  += -DCONFIG_OSS
424endif
425
426AUDIO_SOURCES := $(call sort,$(AUDIO_SOURCES:%=audio/%))
427
428# determine whether we're going to use the prebuilt
429# audio library (this is useful on Linux to avoid requiring
430# all sound-related development packages to be installed on
431# the build and developer machines).
432#
433# note that you can define BUILD_QEMU_AUDIO_LIB to true
434# in your environment to force recompilation.
435#
436QEMU_AUDIO_LIB :=
437
438ifneq ($(BUILD_STANDALONE_EMULATOR),true)
439  QEMU_AUDIO_LIB := $(wildcard \
440	prebuilt/$(QEMU_HOST_TAG)/emulator/libqemu-audio.a)
441endif
442
443ifeq ($(BUILD_QEMU_AUDIO_LIB),true)
444  include $(CLEAR_VARS)
445  LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
446  LOCAL_CC                        := $(MY_CC)
447  LOCAL_MODULE                    := libqemu-audio
448  LOCAL_LDLIBS                    := $(MY_LDLIBS)
449
450  LOCAL_CFLAGS := -Wno-sign-compare \
451                  -fno-strict-aliasing -W -Wall -Wno-unused-parameter \
452                  -I$(LOCAL_PATH) \
453                  -I$(LOCAL_PATH)/target-arm \
454                  -I$(LOCAL_PATH)/fpu \
455
456  # this is very important, otherwise the generated binaries may
457  # not link properly on our build servers
458  ifeq ($(HOST_OS),linux)
459    LOCAL_CFLAGS += -fno-stack-protector
460  endif
461
462  LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(AUDIO_CFLAGS)
463
464  LOCAL_CFLAGS += $(SDL_CFLAGS)
465
466  LOCAL_SRC_FILES += $(AUDIO_SOURCES)
467
468  include $(BUILD_HOST_STATIC_LIBRARY)
469  QEMU_AUDIO_LIB := $(LOCAL_BUILT_MODULE)
470
471endif  # !QEMU_AUDIO_LIB
472
473##############################################################################
474# Common CFLAGS for UI and Core builds
475
476# add the build ID to the default macro definitions
477UI_AND_CORE_CFLAGS := -DANDROID_BUILD_ID="$(strip $(BUILD_ID))-$(strip $(BUILD_NUMBER))"
478
479# For non-standalone builds, extract the major version number from the Android SDK
480# tools revision number.
481ifneq ($(BUILD_STANDALONE_EMULATOR),true)
482    ANDROID_SDK_TOOLS_REVISION := $(shell awk -F= '/Pkg.Revision/ { print $$2; }' sdk/files/tools_source.properties)
483endif
484
485ANDROID_SDK_TOOLS_REVISION := $(strip $(ANDROID_SDK_TOOLS_REVISION))
486ifdef ANDROID_SDK_TOOLS_REVISION
487    UI_AND_CORE_CFLAGS += -DANDROID_SDK_TOOLS_REVISION=$(ANDROID_SDK_TOOLS_REVISION)
488endif
489
490UI_AND_CORE_CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
491
492
493##############################################################################
494# Build emulator core library.
495# This library contains "pure" emulation code separated from the intricacies
496# of the UI.
497#
498include $(CLEAR_VARS)
499
500LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
501LOCAL_CC                        := $(MY_CC)
502LOCAL_LDLIBS                    := $(MY_LDLIBS)
503LOCAL_MODULE                    := emulator-core
504
505# don't remove the -fno-strict-aliasing, or you'll break things
506# (e.g. slirp-android/network support)
507#
508EMULATOR_CORE_CFLAGS := -fno-PIC -Wno-sign-compare \
509                -fno-strict-aliasing -g -W -Wall -Wno-unused-parameter
510
511# Needed by the upstream code
512EMULATOR_CORE_CFLAGS += -DNEED_CPU_H
513
514# Common includes for the emulator
515EMULATOR_CORE_CFLAGS += -I$(LOCAL_PATH)/ \
516                        -I$(LOCAL_PATH)/target-arm \
517                        -I$(LOCAL_PATH)/fpu \
518                        $(TCG_CFLAGS) \
519                        $(HW_CFLAGS) \
520
521# include slirp-android code, i.e. the user-level networking stuff
522#
523SLIRP_SOURCES := bootp.c     cksum.c      debug.c  if.c     ip_icmp.c  ip_input.c   ip_output.c  \
524                 mbuf.c      misc.c       sbuf.c   slirp.c  socket.c   tcp_input.c  tcp_output.c \
525                 tcp_subr.c  tcp_timer.c  tftp.c   udp.c
526
527LOCAL_SRC_FILES += $(SLIRP_SOURCES:%=slirp-android/%)
528EMULATOR_CORE_CFLAGS += -I$(LOCAL_PATH)/slirp-android
529
530# socket proxy support
531#
532PROXY_SOURCES := \
533    proxy_common.c \
534    proxy_http.c \
535    proxy_http_connector.c \
536    proxy_http_rewriter.c \
537
538LOCAL_SRC_FILES += $(PROXY_SOURCES:%=proxy/%)
539EMULATOR_CORE_CFLAGS += -I$(LOCAL_PATH)/proxy
540
541# include telephony stuff
542#
543TELEPHONY_SOURCES := android_modem.c modem_driver.c gsm.c sim_card.c sysdeps_qemu.c sms.c remote_call.c
544LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%)
545EMULATOR_CORE_CFLAGS += -I$(LOCAL_PATH)/telephony
546
547# include android related stuff
548#
549ANDROID_SOURCES := qemu-setup.c
550LOCAL_SRC_FILES += $(ANDROID_SOURCES:%=android/%)
551
552LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS)
553LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS)
554
555include $(BUILD_HOST_STATIC_LIBRARY)
556
557##############################################################################
558# Build emulator UI library.
559# This library contains some emulator related UI components.
560#
561include $(CLEAR_VARS)
562
563LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
564LOCAL_CC                        := $(MY_CC)
565LOCAL_LDLIBS                    := $(MY_LDLIBS)
566LOCAL_MODULE                    := emulator-uilib
567
568EMULATOR_UI_CFLAGS :=
569
570# include the SDL sources
571#
572
573# IMPORTANT: Normally, we should add SDLMAIN_SOURCES here, however this breaks
574#            the Linux mingw32 build. Apparently, the i586-mingw32-ld wants the
575#            implementation of _WinMain@16 to be in an object file on the final
576#            link command used to generate the executable, and will not search
577#            in the static libraries that are used to build it.
578#
579LOCAL_SRC_FILES += $(SDL_SOURCES) #$(SDLMAIN_SOURCES)
580EMULATOR_UI_CFLAGS += $(SDL_CFLAGS) -I$(LOCAL_PATH)/$(SDL_DIR)/include
581
582# the skin support sources
583#
584SKIN_SOURCES := rect.c \
585                region.c \
586                image.c \
587                trackball.c \
588                keyboard.c \
589                keyset.c \
590                file.c \
591                window.c \
592                scaler.c \
593                composer.c \
594                surface.c \
595
596LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%)
597EMULATOR_UI_CFLAGS += -I$(LOCAL_PATH)/skin
598
599LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS) $(EMULATOR_UI_CFLAGS)
600
601LOCAL_MODULE_TAGS := debug
602
603include $(BUILD_HOST_STATIC_LIBRARY)
604
605##############################################################################
606# lists of source files used to build the emulator core
607#
608
609# block sources
610#
611CORE_BLOCK_SOURCES = block.c \
612                     block/qcow.c \
613                     block/qcow2.c \
614                     block/qcow2-refcount.c \
615                     block/qcow2-snapshot.c \
616                     block/qcow2-cluster.c \
617                     block/cloop.c \
618                     block/dmg.c \
619                     block/vvfat.c
620ifeq ($(HOST_OS),windows)
621  CORE_BLOCK_SOURCES += block/raw-win32.c
622else
623  CORE_BLOCK_SOURCES += block/raw-posix.c
624endif
625
626# hw sources
627#
628CORE_HW_SOURCES = hw/arm_boot.c \
629                  hw/android_arm.c
630
631# migration sources
632#
633CORE_MIGRATION_SOURCES = iolooper-select.c
634ifeq ($(HOST_OS),windows)
635  CORE_MIGRATION_SOURCES += migration-dummy-android.c
636else
637  CORE_MIGRATION_SOURCES += migration.c \
638                            migration-exec.c \
639                            migration-tcp-android.c
640endif
641
642# misc. sources
643#
644CORE_MISC_SOURCES = vl-android.c \
645                    console.c \
646                    qemu-malloc.c \
647                    cutils.c \
648                    osdep.c \
649                    loader.c \
650                    monitor.c \
651                    readline.c \
652                    qemu-char-android.c \
653                    qemu-error.c \
654                    qerror.c \
655                    disas.c \
656                    arm-dis.c \
657                    aes.c \
658                    d3des.c \
659                    vnc-android.c \
660                    acl.c \
661                    keymaps.c \
662                    buffered_file.c \
663                    cbuffer.c \
664                    gdbstub.c \
665                    input.c \
666                    ioport.c \
667                    notify.c \
668                    path.c \
669                    shaper.c \
670                    charpipe.c \
671                    tcpdump.c \
672                    qemu-option.c \
673                    savevm.c \
674                    net-android.c \
675                    aio-android.c \
676                    dma-helpers.c \
677                    qemu-config.c \
678                    qemu-sockets-android.c \
679                    bt-host.c \
680                    bt-vhci.c \
681                    module.c \
682                    qemu-timer.c \
683                    android/boot-properties.c \
684                    android/display.c \
685                    android/hw-kmsg.c \
686                    android/hw-lcd.c \
687                    android/gps.c \
688                    android/hw-events.c \
689                    android/hw-control.c \
690                    android/console.c \
691                    android/hw-sensors.c \
692                    android/hw-qemud.c \
693                    android/core-init-utils.c   \
694                    android/config.c \
695
696ifeq ($(HOST_ARCH),x86)
697    CORE_MISC_SOURCES += i386-dis.c
698endif
699ifeq ($(HOST_ARCH),x86_64)
700    CORE_MISC_SOURCES += i386-dis.c
701endif
702ifeq ($(HOST_ARCH),ppc)
703    CORE_MISC_SOURCES += ppc-dis.c
704endif
705
706ifeq ($(HOST_OS),linux)
707    CORE_MISC_SOURCES += usb-linux.c \
708                         qemu-thread.c
709else
710    CORE_MISC_SOURCES += usb-dummy-android.c
711endif
712
713ifeq ($(HOST_OS),windows)
714  CORE_MISC_SOURCES   += tap-win32.c
715endif
716
717# sources inherited from upstream, but not fully
718# integrated into android emulator
719#
720CORE_UPSTREAM_SOURCES = json-lexer.c \
721                        json-parser.c \
722                        json-streamer.c \
723                        qjson.c \
724                        qbool.c \
725                        qdict.c \
726                        qfloat.c \
727                        qint.c \
728                        qlist.c \
729                        qstring.c \
730
731
732CORE_SOURCES = $(CORE_BLOCK_SOURCES) $(CORE_HW_SOURCES)
733CORE_SOURCES += $(CORE_MIGRATION_SOURCES) $(CORE_MISC_SOURCES)
734CORE_SOURCES += $(CORE_UPSTREAM_SOURCES)
735
736##############################################################################
737# lists of source files used to build the emulator UI
738#
739
740UI_SOURCES = loadpng.c \
741             android/user-config.c \
742             android/resource.c \
743             android/qemulator.c \
744             android/keycode.c \
745             android/help.c \
746
747##############################################################################
748# lists of source files used by both, emulator UI and emulator core
749#
750
751UI_AND_CORE_SOURCES = \
752                      sockets.c \
753                      android/keycode-array.c \
754                      android/charmap.c \
755                      android/utils/bufprint.c \
756                      android/utils/debug.c \
757                      android/utils/path.c \
758                      android/utils/dirscanner.c \
759                      android/utils/filelock.c \
760                      android/utils/misc.c \
761                      android/utils/reflist.c \
762                      android/utils/stralloc.c \
763                      android/utils/system.c \
764                      android/utils/tempfile.c \
765                      android/utils/timezone.c \
766                      android/utils/mapfile.c \
767                      android/avd/hw-config.c \
768                      android/avd/info.c \
769                      android/utils/ini.c \
770
771# include the Zlib sources
772#
773UI_AND_CORE_SOURCES += $(ZLIB_SOURCES)
774UI_AND_CORE_CFLAGS  += $(ZLIB_CFLAGS) -I$(LOCAL_PATH)/$(ZLIB_DIR)
775
776# include the Libpng sources
777#
778UI_AND_CORE_SOURCES += $(LIBPNG_SOURCES)
779UI_AND_CORE_CFLAGS  += $(LIBPNG_CFLAGS) -I$(LOCAL_PATH)/$(LIBPNG_DIR)
780
781# temp files used to collect UI->Core exchange protocol.
782UI_AND_CORE_SOURCES += android/ui-core-protocol.c android/core-ui-protocol.c
783
784# The common libraries
785#
786QEMU_SYSTEM_LDLIBS := -lm
787ifeq ($(HOST_OS),windows)
788  QEMU_SYSTEM_LDLIBS += -mno-cygwin -mwindows -mconsole
789endif
790
791ifeq ($(HOST_OS),freebsd)
792    QEMU_SYSTEM_LDLIBS += -L/usr/local/lib -lpthread -lX11 -lutil
793endif
794
795ifeq ($(HOST_OS),linux)
796  QEMU_SYSTEM_LDLIBS += -lutil -lrt
797endif
798
799ifeq ($(HOST_OS),windows)
800  QEMU_SYSTEM_LDLIBS += -lwinmm -lws2_32 -liphlpapi
801else
802  QEMU_SYSTEM_LDLIBS += -lpthread
803endif
804
805ifeq ($(HOST_OS),darwin)
806  QEMU_SYSTEM_LDLIBS += -Wl,-framework,Cocoa
807endif
808
809
810##############################################################################
811# now build the emulator itself
812#
813include $(CLEAR_VARS)
814
815LOCAL_GENERATED_SOURCES :=
816LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
817LOCAL_CC                        := $(MY_CC)
818LOCAL_MODULE                    := emulator
819LOCAL_STATIC_LIBRARIES          := emulator-memcheck emulator-hw emulator-arm emulator-tcg
820LOCAL_STATIC_LIBRARIES          += emulator-elff
821LOCAL_STATIC_LIBRARIES          += emulator-core emulator-uilib
822LOCAL_LDLIBS                    := $(MY_LDLIBS)
823
824LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS) $(EMULATOR_UI_CFLAGS)
825
826# add the build ID to the default macro definitions
827LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS)
828
829# include sound support source files. we first try to see if we have a prebuilt audio
830# library. if not, we build things the "hard" way.
831#
832# note that to generate the prebuilt audio library, you should do the following:
833#
834#   cd tools/qemu
835#   ./android-rebuild.sh
836#   distrib/update-audio.sh
837#
838ifeq ($(QEMU_AUDIO_LIB),)
839  LOCAL_SRC_FILES += $(AUDIO_SOURCES)
840endif  # !QEMU_AUDIO_LIB
841
842LOCAL_CFLAGS  += $(AUDIO_CFLAGS)
843LOCAL_LDLIBS  += $(AUDIO_LDLIBS)
844
845# the linux-user sources, I doubt we really need these
846#
847#LINUX_SOURCES := main.c elfload.c mmap.c signal.c path.c syscall.c
848#LOCAL_SRC_FILES += $(LINUX_SOURCES:%=linux-user/%)
849
850ifeq ($(HOST_ARCH),x86)
851# enable MMX code for our skin scaler
852LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx
853endif
854
855# include other sources
856#
857VL_SOURCES := framebuffer.c \
858              user-events-qemu.c \
859              android/cmdline-option.c \
860              android/main.c \
861
862# Add common system libraries
863#
864LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)
865
866LOCAL_SRC_FILES += $(VL_SOURCES) $(CORE_SOURCES) $(UI_SOURCES) $(UI_AND_CORE_SOURCES)
867
868# add SDL-specific flags
869#
870LOCAL_CFLAGS += $(SDL_CFLAGS)
871LOCAL_LDLIBS += $(SDL_LDLIBS)
872LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
873
874# add ELFF-specific flags
875#
876LOCAL_LDLIBS += $(ELFF_LDLIBS)
877
878# on Windows, link the icon file as well into the executable
879# unfortunately, our build system doesn't help us much, so we need
880# to use some weird pathnames to make this work...
881#
882ifeq ($(HOST_OS),windows)
883
884# Locate windres executable
885WINDRES := windres
886ifneq ($(USE_MINGW),)
887  # When building the Windows emulator under Linux, use the MinGW one
888  WINDRES := i586-mingw32msvc-windres
889endif
890
891INTERMEDIATE     := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
892ANDROID_ICON_OBJ := android_icon.o
893ANDROID_ICON_PATH := $(LOCAL_PATH)/images
894$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc
895	$(WINDRES) $< -I $(ANDROID_ICON_PATH) -o $@
896
897# seems to be the only way to add an object file that was not generated from
898# a C/C++/Java source file to our build system. and very unfortunately,
899# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
900# us to put the object file in the source directory...
901#
902LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ)
903endif
904
905# qemu-options.h is generated from qemu-options.hx with the "hxtool" shell script
906#
907intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
908
909QEMU_OPTIONS_H := $(intermediates)/qemu-options.h
910$(QEMU_OPTIONS_H): PRIVATE_PATH := $(LOCAL_PATH)
911$(QEMU_OPTIONS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
912$(QEMU_OPTIONS_H): $(LOCAL_PATH)/qemu-options.hx $(LOCAL_PATH)/hxtool
913	$(transform-generated-source)
914
915$(intermediates)/vl-android.o: $(QEMU_OPTIONS_H)
916
917LOCAL_GENERATED_SOURCES += $(QEMU_OPTIONS_H)
918
919# qemu-monitor.h is generated from qemu-monitor.hx with the "hxtool" shell script
920#
921intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
922
923QEMU_MONITOR_H := $(intermediates)/qemu-monitor.h
924$(QEMU_MONITOR_H): PRIVATE_PATH := $(LOCAL_PATH)
925$(QEMU_MONITOR_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
926$(QEMU_MONITOR_H): $(LOCAL_PATH)/qemu-monitor.hx $(LOCAL_PATH)/hxtool
927	$(transform-generated-source)
928
929$(intermediates)/vl-android.o: $(QEMU_MONITOR_H)
930
931LOCAL_GENERATED_SOURCES += $(QEMU_MONITOR_H)
932
933
934# gdbstub-xml.c contains C-compilable arrays corresponding to the content
935# of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script.
936#
937ifeq ($(QEMU_TARGET_XML_SOURCES),)
938    QEMU_TARGET_XML_SOURCES := arm-core arm-neon arm-vfp arm-vfp3
939    QEMU_TARGET_XML_SOURCES := $(QEMU_TARGET_XML_SOURCES:%=$(LOCAL_PATH)/gdb-xml/%.xml)
940endif
941
942QEMU_GDBSTUB_XML_C := $(intermediates)/gdbstub-xml.c
943$(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH)
944$(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES)
945$(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES)
946$(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh
947	$(hide) rm -f $@
948	$(transform-generated-source)
949
950$(intermediates)/vl-android.o: $(QEMU_GDBSTUB_XML_C)
951
952LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
953
954# hw-config-defs.h is generated from android/avd/hardware-properties.ini
955#
956QEMU_HARDWARE_PROPERTIES_INI := $(LOCAL_PATH)/android/avd/hardware-properties.ini
957QEMU_HW_CONFIG_DEFS_H := $(LOCAL_PATH)/android/avd/hw-config-defs.h
958$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_PATH := $(LOCAL_PATH)
959$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_SOURCES := $(QEMU_HARDWARE_PROPERTIES_INI)
960$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/android/tools/gen-hw-config.py $(QEMU_HARDWARE_PROPERTIES_INI) $@
961$(QEMU_HW_CONFIG_DEFS_H): $(QEMU_HARDWARE_PROPERTIES_INI) $(LOCAL_PATH)/android/tools/gen-hw-config.py
962	$(hide) rm -f $@
963	$(transform-generated-source)
964
965$(LOCAL_PATH)/android/avd/hw-config.h: $(QEMU_HW_CONFIG_DEFS_H)
966
967LOCAL_GENERATED_SOURCES += $(QEMU_HW_CONFIG_DEFS_H)
968
969# this is already done by the Android build system, but is done for the
970# benefit of the stand-alone one.
971#
972ifeq ($(BUILD_STANDALONE_EMULATOR),true)
973  LOCAL_CFLAGS += -I$(intermediates)
974endif
975
976LOCAL_LDLIBS += $(QEMU_AUDIO_LIB)
977
978# Generate a completely static executable if needed.
979# Note that this means no sound and graphics on Linux.
980#
981ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
982    LOCAL_SRC_FILES += dynlink-static.c
983    LOCAL_LDLIBS    += -static
984endif
985
986LOCAL_MODULE := emulator
987
988# See comment about SDLMAIN_SOURCES in the 'emulator-uilib' module declarations.
989LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
990
991include $(BUILD_HOST_EXECUTABLE)
992
993##############################################################################
994# Build standalone emulator core.
995#
996include $(CLEAR_VARS)
997
998LOCAL_GENERATED_SOURCES         :=
999LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
1000LOCAL_CC                        := $(MY_CC)
1001LOCAL_MODULE                    := qemu-android
1002LOCAL_STATIC_LIBRARIES          := emulator-memcheck emulator-hw emulator-arm emulator-tcg
1003LOCAL_STATIC_LIBRARIES          += emulator-elff
1004LOCAL_STATIC_LIBRARIES          += emulator-core
1005LOCAL_LDLIBS                    := $(MY_LDLIBS)
1006
1007LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_CORE_CFLAGS)
1008LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS) -DCONFIG_STANDALONE_CORE
1009
1010# include sound support source files. we first try to see if we have a prebuilt audio
1011# library. if not, we build things the "hard" way.
1012#
1013# note that to generate the prebuilt audio library, you should do the following:
1014#
1015#   cd tools/qemu
1016#   ./android-rebuild.sh
1017#   distrib/update-audio.sh
1018#
1019ifeq ($(QEMU_AUDIO_LIB),)
1020  LOCAL_SRC_FILES += $(AUDIO_SOURCES)
1021endif  # !QEMU_AUDIO_LIB
1022
1023LOCAL_CFLAGS  += $(AUDIO_CFLAGS)
1024LOCAL_LDLIBS  += $(AUDIO_LDLIBS)
1025
1026# the linux-user sources, I doubt we really need these
1027#
1028#LINUX_SOURCES := main.c elfload.c mmap.c signal.c path.c syscall.c
1029#LOCAL_SRC_FILES += $(LINUX_SOURCES:%=linux-user/%)
1030
1031# include other sources
1032#
1033VL_SOURCES := framebuffer.c \
1034              user-events-qemu.c \
1035
1036# Add common system libraries
1037#
1038LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)
1039
1040LOCAL_SRC_FILES += $(VL_SOURCES) $(CORE_SOURCES) $(UI_AND_CORE_SOURCES)
1041
1042# add ELFF-specific flags
1043#
1044LOCAL_LDLIBS += $(ELFF_LDLIBS)
1045
1046# on Windows, link the icon file as well into the executable
1047# unfortunately, our build system doesn't help us much, so we need
1048# to use some weird pathnames to make this work...
1049#
1050ifeq ($(HOST_OS),windows)
1051
1052# Locate windres executable
1053WINDRES := windres
1054ifneq ($(USE_MINGW),)
1055  # When building the Windows emulator under Linux, use the MinGW one
1056  WINDRES := i586-mingw32msvc-windres
1057endif
1058
1059INTERMEDIATE     := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
1060ANDROID_ICON_OBJ := android_icon.o
1061ANDROID_ICON_PATH := $(LOCAL_PATH)/images
1062$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc
1063	$(WINDRES) $< -I $(ANDROID_ICON_PATH) -o $@
1064
1065# seems to be the only way to add an object file that was not generated from
1066# a C/C++/Java source file to our build system. and very unfortunately,
1067# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
1068# us to put the object file in the source directory...
1069#
1070LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ)
1071endif
1072
1073# qemu-options.h is generated from qemu-options.hx with the "hxtool" shell script
1074#
1075intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
1076
1077QEMU_OPTIONS_H := $(intermediates)/qemu-options.h
1078$(QEMU_OPTIONS_H): PRIVATE_PATH := $(LOCAL_PATH)
1079$(QEMU_OPTIONS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
1080$(QEMU_OPTIONS_H): $(LOCAL_PATH)/qemu-options.hx $(LOCAL_PATH)/hxtool
1081	$(transform-generated-source)
1082
1083$(intermediates)/vl-android.o: $(QEMU_OPTIONS_H)
1084
1085LOCAL_GENERATED_SOURCES += $(QEMU_OPTIONS_H)
1086
1087# qemu-monitor.h is generated from qemu-monitor.hx with the "hxtool" shell script
1088#
1089intermediates := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
1090
1091QEMU_MONITOR_H := $(intermediates)/qemu-monitor.h
1092$(QEMU_MONITOR_H): PRIVATE_PATH := $(LOCAL_PATH)
1093$(QEMU_MONITOR_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/hxtool -h < $< > $@
1094$(QEMU_MONITOR_H): $(LOCAL_PATH)/qemu-monitor.hx $(LOCAL_PATH)/hxtool
1095	$(transform-generated-source)
1096
1097$(intermediates)/vl-android.o: $(QEMU_MONITOR_H)
1098
1099LOCAL_GENERATED_SOURCES += $(QEMU_MONITOR_H)
1100
1101
1102# gdbstub-xml.c contains C-compilable arrays corresponding to the content
1103# of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script.
1104#
1105ifeq ($(QEMU_TARGET_XML_SOURCES),)
1106    QEMU_TARGET_XML_SOURCES := arm-core arm-neon arm-vfp arm-vfp3
1107    QEMU_TARGET_XML_SOURCES := $(QEMU_TARGET_XML_SOURCES:%=$(LOCAL_PATH)/gdb-xml/%.xml)
1108endif
1109
1110QEMU_GDBSTUB_XML_C := $(intermediates)/gdbstub-xml.c
1111$(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH)
1112$(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES)
1113$(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES)
1114$(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh
1115	$(hide) rm -f $@
1116	$(transform-generated-source)
1117
1118$(intermediates)/vl-android.o: $(QEMU_GDBSTUB_XML_C)
1119
1120LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
1121
1122# this is already done by the Android build system, but is done for the
1123# benefit of the stand-alone one.
1124#
1125ifeq ($(BUILD_STANDALONE_EMULATOR),true)
1126  LOCAL_CFLAGS += -I$(intermediates)
1127endif
1128
1129# other flags
1130ifneq ($(HOST_OS),windows)
1131    LOCAL_LDLIBS += -ldl
1132endif
1133
1134LOCAL_LDLIBS += $(QEMU_AUDIO_LIB)
1135
1136ifeq ($(HOST_OS),darwin)
1137    FRAMEWORKS := OpenGL Cocoa QuickTime ApplicationServices Carbon IOKit
1138    LOCAL_LDLIBS += $(FRAMEWORKS:%=-Wl,-framework,%)
1139endif
1140
1141# Generate a completely static executable if needed.
1142# Note that this means no sound and graphics on Linux.
1143#
1144ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
1145    LOCAL_SRC_FILES += dynlink-static.c
1146    LOCAL_LDLIBS    += -static
1147endif
1148
1149LOCAL_MODULE := qemu-android
1150LOCAL_MODULE_TAGS := debug
1151
1152include $(BUILD_HOST_EXECUTABLE)
1153
1154##############################################################################
1155# now build the emulator UI
1156#
1157include $(CLEAR_VARS)
1158
1159LOCAL_GENERATED_SOURCES :=
1160LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
1161LOCAL_CC                        := $(MY_CC)
1162LOCAL_MODULE                    := emulator-ui
1163LOCAL_STATIC_LIBRARIES          := emulator-uilib
1164LOCAL_LDLIBS                    := $(MY_LDLIBS)
1165
1166LOCAL_CFLAGS := $(MY_CFLAGS) $(LOCAL_CFLAGS) $(EMULATOR_UI_CFLAGS) $(EMULATOR_CORE_CFLAGS)
1167
1168# add the build ID to the default macro definitions
1169LOCAL_CFLAGS += $(UI_AND_CORE_CFLAGS) -DCONFIG_STANDALONE_UI
1170
1171ifeq ($(HOST_ARCH),x86)
1172# enable MMX code for our skin scaler
1173LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx
1174endif
1175
1176# include other sources
1177#
1178VL_SOURCES := framebuffer.c \
1179              user-events-ui.c \
1180              android/cmdline-option.c \
1181              android/config.c \
1182              android/display.c \
1183              android/main.c \
1184              qemu-timer-ui.c \
1185              vl-android-ui.c \
1186	          console-ui.c \
1187
1188# Add common system libraries
1189#
1190LOCAL_LDLIBS += $(QEMU_SYSTEM_LDLIBS)
1191
1192LOCAL_SRC_FILES += $(VL_SOURCES) $(UI_SOURCES) $(UI_AND_CORE_SOURCES)
1193
1194# add SDL-specific flags
1195#
1196LOCAL_CFLAGS += $(SDL_CFLAGS)
1197LOCAL_LDLIBS += $(SDL_LDLIBS)
1198LOCAL_STATIC_LIBRARIES += $(SDL_STATIC_LIBRARIES)
1199
1200# on Windows, link the icon file as well into the executable
1201# unfortunately, our build system doesn't help us much, so we need
1202# to use some weird pathnames to make this work...
1203#
1204ifeq ($(HOST_OS),windows)
1205
1206# Locate windres executable
1207WINDRES := windres
1208ifneq ($(USE_MINGW),)
1209  # When building the Windows emulator under Linux, use the MinGW one
1210  WINDRES := i586-mingw32msvc-windres
1211endif
1212
1213INTERMEDIATE     := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true)
1214ANDROID_ICON_OBJ := android_icon.o
1215ANDROID_ICON_PATH := $(LOCAL_PATH)/images
1216$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc
1217	$(WINDRES) $< -I $(ANDROID_ICON_PATH) -o $@
1218
1219# seems to be the only way to add an object file that was not generated from
1220# a C/C++/Java source file to our build system. and very unfortunately,
1221# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces
1222# us to put the object file in the source directory...
1223#
1224LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ)
1225endif
1226
1227# this is already done by the Android build system, but is done for the
1228# benefit of the stand-alone one.
1229#
1230ifeq ($(BUILD_STANDALONE_EMULATOR),true)
1231  LOCAL_CFLAGS += -I$(intermediates)
1232endif
1233
1234# Generate a completely static executable if needed.
1235# Note that this means no sound and graphics on Linux.
1236#
1237ifeq ($(CONFIG_STATIC_EXECUTABLE),true)
1238    LOCAL_SRC_FILES += dynlink-static.c
1239    LOCAL_LDLIBS    += -static
1240endif
1241
1242# See comment about SDLMAIN_SOURCES in the 'emulator-uilib' module declarations.
1243LOCAL_SRC_FILES += $(SDLMAIN_SOURCES)
1244
1245include $(BUILD_HOST_EXECUTABLE)
1246
1247endif  # TARGET_ARCH == arm
1248