• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# When building this project, we actually generate several components which
2# are the following:
3#
4#  - the emulator-ui program (which is target-agnostic)
5#  - the target-specific qemu-android-$ARCH programs (headless emulation engines)
6#  - the "standalone" emulator programs (embed both UI and engine in a single
7#    binary and process), i.e. "emulator" for ARM and "emulator-x86" for x86.
8#
9# This file defines static host libraries that will be used by at least two
10# of these components.
11#
12
13##############################################################################
14##############################################################################
15###
16###  gen-hw-config-defs: Generate hardware configuration definitions header
17###
18###  The 'gen-hw-config.py' script is used to generate the hw-config-defs.h
19###  header from the an .ini file like android/avd/hardware-properties.ini
20###
21###  Due to the way the Android build system works, we need to regenerate
22###  it for each module (the output will go into a module-specific directory).
23###
24###  This defines a function that can be used inside a module definition
25###
26###  $(call gen-hw-config-defs)
27###
28
29# First, define a rule to generate a dummy "emulator_hw_config_defs" module
30# which purpose is simply to host the generated header in its output directory.
31intermediates := $(call intermediates-dir-for,SHARED_LIBRARIES,emulator_hw_config_defs,true)
32
33QEMU_HARDWARE_PROPERTIES_INI := $(LOCAL_PATH)/android/avd/hardware-properties.ini
34QEMU_HW_CONFIG_DEFS_H := $(intermediates)/android/avd/hw-config-defs.h
35$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_PATH := $(LOCAL_PATH)
36$(QEMU_HW_CONFIG_DEFS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/android/tools/gen-hw-config.py $< $@
37$(QEMU_HW_CONFIG_DEFS_H): $(QEMU_HARDWARE_PROPERTIES_INI) $(LOCAL_PATH)/android/tools/gen-hw-config.py
38	$(hide) rm -f $@
39	$(transform-generated-source)
40
41QEMU_HW_CONFIG_DEFS_INCLUDES := $(intermediates)
42
43# Second, define a function that needs to be called inside each module that contains
44# a source file that includes the generated header file.
45gen-hw-config-defs = \
46  $(eval LOCAL_GENERATED_SOURCES += $(QEMU_HW_CONFIG_DEFS_H))\
47  $(eval LOCAL_C_INCLUDES += $(QEMU_HW_CONFIG_DEFS_INCLUDES))
48
49##############################################################################
50##############################################################################
51###
52###  emulator-common: LIBRARY OF COMMON FUNCTIONS
53###
54###  THESE ARE POTENTIALLY USED BY ALL COMPONENTS
55###
56
57common_LOCAL_CFLAGS =
58common_LOCAL_SRC_FILES =
59
60EMULATOR_COMMON_CFLAGS :=
61
62# Needed by everything about the host
63EMULATOR_COMMON_CFLAGS += \
64    -I$(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG)
65
66# add the build ID to the default macro definitions
67ifeq ($(BUILD_STANDALONE_EMULATOR),)
68EMULATOR_COMMON_CFLAGS += -DANDROID_BUILD_ID="$(strip $(BUILD_ID))-$(strip $(BUILD_NUMBER))"
69endif
70
71# For non-standalone builds, extract the major version number from the Android SDK
72# tools revision number.
73ifneq ($(BUILD_STANDALONE_EMULATOR),true)
74    ANDROID_SDK_TOOLS_REVISION := $(shell awk -F= '/Pkg.Revision/ { print $$2; }' sdk/files/tools_source.properties)
75endif
76
77ANDROID_SDK_TOOLS_REVISION := $(strip $(ANDROID_SDK_TOOLS_REVISION))
78ifdef ANDROID_SDK_TOOLS_REVISION
79    EMULATOR_COMMON_CFLAGS += -DANDROID_SDK_TOOLS_REVISION=$(ANDROID_SDK_TOOLS_REVISION)
80endif
81
82# Enable large-file support (i.e. make off_t a 64-bit value)
83ifeq ($(HOST_OS),linux)
84EMULATOR_COMMON_CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
85endif
86
87###########################################################
88# Zlib sources
89#
90ZLIB_DIR := distrib/zlib-1.2.3
91include $(LOCAL_PATH)/$(ZLIB_DIR)/sources.make
92EMULATOR_COMMON_CFLAGS += -I$(LOCAL_PATH)/$(ZLIB_DIR)
93
94common_LOCAL_SRC_FILES += $(ZLIB_SOURCES)
95
96###########################################################
97# Android utility functions
98#
99common_LOCAL_SRC_FILES += \
100	sockets.c \
101	iolooper-select.c \
102	android/async-console.c \
103	android/async-utils.c \
104	android/charmap.c \
105	android/framebuffer.c \
106	android/keycode-array.c \
107	android/avd/hw-config.c \
108	android/avd/info.c \
109	android/avd/util.c \
110	android/sync-utils.c \
111	android/utils/assert.c \
112	android/utils/bufprint.c \
113	android/utils/debug.c \
114	android/utils/dll.c \
115	android/utils/dirscanner.c \
116	android/utils/filelock.c \
117	android/utils/ini.c \
118	android/utils/intmap.c \
119	android/utils/lineinput.c \
120	android/utils/mapfile.c \
121	android/utils/misc.c \
122	android/utils/panic.c \
123	android/utils/path.c \
124	android/utils/reflist.c \
125	android/utils/refset.c \
126	android/utils/stralloc.c \
127	android/utils/system.c \
128	android/utils/tempfile.c \
129	android/utils/vector.c \
130
131common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
132
133
134## one for 32-bit
135$(call start-emulator-library, emulator-common)
136LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
137LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
138$(call gen-hw-config-defs)
139$(call end-emulator-library)
140
141## another for 64-bit
142# NOTE: only linux and darwin in non-standalone mode is supported, because
143#  1) For Windows: amd64-mingw32msvc-gcc doesn't work, see http://b/issue?id=5949152.
144#  2) Standalone has --try-64
145ifneq ($(filter linux darwin,$(HOST_OS)),)
146  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
147    $(call start-emulator-library, emulator64-common)
148    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
149    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
150    $(call gen-hw-config-defs)
151    $(call end-emulator-library)
152  endif # BUILD_STANDALONE_EMULATOR == nil
153endif # HOST_OS == linux || darwin
154
155##############################################################################
156##############################################################################
157###
158###  emulator-libui: LIBRARY OF UI-RELATED FUNCTIONS
159###
160###  THESE ARE USED BY 'emulator-ui' AND THE STANDALONE PROGRAMS
161###
162
163common_LOCAL_CFLAGS =
164common_LOCAL_SRC_FILES =
165
166ifneq ($(QEMU_OPENGLES_INCLUDE),)
167    EMULATOR_LIBUI_CFLAGS := -I$(QEMU_OPENGLES_INCLUDE)
168endif
169
170common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
171
172###########################################################
173# Libpng configuration
174#
175LIBPNG_DIR := distrib/libpng-1.2.19
176include $(LOCAL_PATH)/$(LIBPNG_DIR)/sources.make
177
178EMULATOR_LIBUI_CFLAGS += \
179    $(LIBPNG_CFLAGS) \
180    -I$(LOCAL_PATH)/$(LIBPNG_DIR)
181
182common_LOCAL_SRC_FILES += $(LIBPNG_SOURCES) loadpng.c
183
184##############################################################################
185# SDL-related definitions
186#
187
188# Build SDL from sources except in certain cases where we use
189# prebuilt libraries instead.
190#
191BUILD_SDL_FROM_SOURCES := true
192
193# On linux-x86, using the prebuilts avoid installing all the X11
194# development packages on our build servers.
195#
196ifeq ($(QEMU_HOST_TAG),linux-x86)
197    BUILD_SDL_FROM_SOURCES := false
198endif
199
200# If we're building with android-configure.sh && make, always build from
201# sources to catch regressions as soon as they happen.
202#
203ifeq ($(BUILD_STANDALONE_EMULATOR),true)
204    BUILD_SDL_FROM_SOURCES := true
205endif
206
207# Except if we used android-configure.sh --sdl-config=<script>
208#
209ifneq ($(QEMU_SDL_CONFIG),)
210   BUILD_SDL_FROM_SOURCES := false
211   SDL_CONFIG := $(QEMU_SDL_CONFIG)
212endif
213
214ifneq ($(BUILD_SDL_FROM_SOURCES),true)
215
216    SDL_CONFIG ?= prebuilts/tools/$(QEMU_HOST_TAG)/sdl/bin/sdl-config
217    SDL_CFLAGS := $(shell $(SDL_CONFIG) --cflags)
218
219    # We need to filter out the _GNU_SOURCE variable because it breaks recent
220    # releases of Cygwin when using the -mno-cygwin option. Moreover, we don't
221    # need this macro at all to build the Android emulator.
222    SDL_CFLAGS := $(filter-out -D_GNU_SOURCE=1,$(SDL_CFLAGS))
223    SDL_LDLIBS := $(filter-out %.a %.lib,$(shell $(SDL_CONFIG) --static-libs))
224
225    # Circular dependencies between libSDL and libSDLmain
226    # We repeat the libraries in the final link to work around it
227    SDL_STATIC_LIBRARIES := libSDL libSDLmain libSDL libSDLmain
228    SDL_STATIC_LIBRARIES_64 := lib64SDL lib64SDLmain lib64SDL lib64SDLmain
229
230else # BUILD_SDL_FROM_SOURCES
231
232    SDL_DIR := distrib/sdl-1.2.15
233    include $(LOCAL_PATH)/$(SDL_DIR)/sources.make
234    common_LOCAL_SRC_FILES += $(SDL_SOURCES)
235
236    EMULATOR_LIBUI_CFLAGS += \
237        -I$(LOCAL_PATH)/$(SDL_DIR)/include
238
239    SDL_STATIC_LIBRARIES :=
240
241endif # BUILD_SDL_FROM_SOURCES
242
243EMULATOR_LIBUI_CFLAGS += $(SDL_CFLAGS)
244EMULATOR_LIBUI_LDLIBS += $(SDL_LDLIBS)
245
246# The following is needed by SDL_LoadObject
247ifneq ($(HOST_OS),windows)
248    EMULATOR_LIBUI_LDLIBS += -ldl
249endif
250
251# the skin support sources
252#
253SKIN_SOURCES := rect.c \
254                region.c \
255                image.c \
256                trackball.c \
257                keyboard.c \
258                keyset.c \
259                file.c \
260                window.c \
261                scaler.c \
262                composer.c \
263                surface.c \
264
265common_LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%)
266
267common_LOCAL_SRC_FILES += \
268             android/user-config.c \
269             android/resource.c \
270             android/qemulator.c \
271             android/keycode.c \
272
273# enable MMX code for our skin scaler
274ifeq ($(HOST_ARCH),x86)
275common_LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx
276endif
277
278common_LOCAL_CFLAGS += $(EMULATOR_LIBUI_CFLAGS)
279
280
281## one for 32-bit
282$(call start-emulator-library, emulator-libui)
283LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
284LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
285$(call gen-hw-config-defs)
286$(call end-emulator-library)
287
288
289## another for 64-bit, see note in emulator64-common
290ifneq ($(filter linux darwin,$(HOST_OS)),)
291  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
292    $(call start-emulator-library, emulator64-libui)
293    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
294    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
295    $(call gen-hw-config-defs)
296    $(call end-emulator-library)
297  endif # BUILD_STANDALONE_EMULATOR == nil
298endif # HOST_OS == linux || darwin
299
300
301##############################################################################
302##############################################################################
303###
304###  emulator-libqemu: TARGET-INDEPENDENT QEMU FUNCTIONS
305###
306###  THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui'
307###
308
309common_LOCAL_CFLAGS =
310common_LOCAL_SRC_FILES =
311
312
313EMULATOR_LIBQEMU_CFLAGS :=
314
315common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
316
317AUDIO_SOURCES := noaudio.c wavaudio.c wavcapture.c mixeng.c
318AUDIO_CFLAGS  := -I$(LOCAL_PATH)/audio -DHAS_AUDIO
319AUDIO_LDLIBS  :=
320
321common_LOCAL_CFLAGS += -Wall -Wno-missing-field-initializers
322
323ifeq ($(HOST_OS),darwin)
324  CONFIG_COREAUDIO ?= yes
325  AUDIO_CFLAGS += -DHOST_BSD=1
326endif
327
328ifeq ($(HOST_OS),windows)
329  CONFIG_WINAUDIO ?= yes
330endif
331
332ifeq ($(HOST_OS),linux)
333  CONFIG_OSS  ?= yes
334  CONFIG_ALSA ?= yes
335  CONFIG_PULSEAUDIO ?= yes
336  CONFIG_ESD  ?= yes
337endif
338
339ifeq ($(HOST_OS),freebsd)
340  CONFIG_OSS ?= yes
341endif
342
343ifeq ($(CONFIG_COREAUDIO),yes)
344  AUDIO_SOURCES += coreaudio.c
345  AUDIO_CFLAGS  += -DCONFIG_COREAUDIO
346  AUDIO_LDLIBS  += -Wl,-framework,CoreAudio
347endif
348
349ifeq ($(CONFIG_WINAUDIO),yes)
350  AUDIO_SOURCES += winaudio.c
351  AUDIO_CFLAGS  += -DCONFIG_WINAUDIO
352endif
353
354ifeq ($(CONFIG_PULSEAUDIO),yes)
355  AUDIO_SOURCES += paaudio.c audio_pt_int.c
356  AUDIO_CFLAGS  += -DCONFIG_PULSEAUDIO
357endif
358
359ifeq ($(CONFIG_ALSA),yes)
360  AUDIO_SOURCES += alsaaudio.c audio_pt_int.c
361  AUDIO_CFLAGS  += -DCONFIG_ALSA
362endif
363
364ifeq ($(CONFIG_ESD),yes)
365  AUDIO_SOURCES += esdaudio.c
366  AUDIO_CFLAGS  += -DCONFIG_ESD
367endif
368
369ifeq ($(CONFIG_OSS),yes)
370  AUDIO_SOURCES += ossaudio.c
371  AUDIO_CFLAGS  += -DCONFIG_OSS
372endif
373
374AUDIO_SOURCES := $(call sort,$(AUDIO_SOURCES:%=audio/%))
375
376common_LOCAL_CFLAGS += -Wno-sign-compare \
377                -fno-strict-aliasing -W -Wall -Wno-unused-parameter \
378
379# this is very important, otherwise the generated binaries may
380# not link properly on our build servers
381ifeq ($(HOST_OS),linux)
382common_LOCAL_CFLAGS += -fno-stack-protector
383endif
384
385common_LOCAL_SRC_FILES += $(AUDIO_SOURCES)
386common_LOCAL_SRC_FILES += \
387    android/audio-test.c
388
389# other flags
390ifneq ($(HOST_OS),windows)
391    AUDIO_LDLIBS += -ldl
392else
393endif
394
395
396EMULATOR_LIBQEMU_CFLAGS += $(AUDIO_CFLAGS)
397EMULATOR_LIBQEMU_LDLIBS += $(AUDIO_LDLIBS)
398
399common_LOCAL_CFLAGS += -Wno-missing-field-initializers
400
401# migration sources
402#
403ifeq ($(HOST_OS),windows)
404  common_LOCAL_SRC_FILES += migration-dummy-android.c
405else
406  common_LOCAL_SRC_FILES += migration.c \
407                     migration-exec.c \
408                     migration-tcp-android.c
409endif
410
411# misc. sources
412#
413CORE_MISC_SOURCES = \
414    acl.c \
415    aes.c \
416    aio-android.c \
417    async.c \
418    bt-host.c \
419    bt-vhci.c \
420    buffered_file.c \
421    cbuffer.c \
422    charpipe.c \
423    console.c \
424    cutils.c \
425    d3des.c \
426    input.c \
427    iohandler.c \
428    ioport.c \
429    module.c \
430    net-android.c \
431    notify.c \
432    osdep.c \
433    path.c \
434    qemu-char.c \
435    qemu-config.c \
436    qemu-error.c \
437    qemu-malloc.c \
438    qemu-option.c \
439    qemu-sockets-android.c \
440    qerror.c \
441    readline.c \
442    savevm.c \
443    shaper.c \
444    tcpdump.c \
445    vnc-android.c \
446    android/boot-properties.c \
447    android/config.c \
448    android/core-init-utils.c   \
449    android/gps.c \
450    android/hw-kmsg.c \
451    android/hw-lcd.c \
452    android/hw-events.c \
453    android/hw-control.c \
454    android/hw-sensors.c \
455    android/hw-qemud.c \
456    android/looper-qemu.c \
457    android/hw-pipe-net.c \
458    android/qemu-setup.c \
459    android/snapshot.c \
460    android/async-socket-connector.c \
461    android/async-socket.c \
462    android/sdk-controller-socket.c \
463    android/sensors-port.c \
464    android/utils/timezone.c \
465    android/camera/camera-format-converters.c \
466    android/camera/camera-service.c \
467    android/adb-server.c \
468    android/adb-qemud.c \
469    android/snaphost-android.c \
470    android/multitouch-screen.c \
471    android/multitouch-port.c \
472    android/utils/jpeg-compress.c
473
474ifeq ($(HOST_ARCH),x86)
475    CORE_MISC_SOURCES += i386-dis.c
476endif
477ifeq ($(HOST_ARCH),x86_64)
478    CORE_MISC_SOURCES += i386-dis.c
479endif
480ifeq ($(HOST_ARCH),ppc)
481    CORE_MISC_SOURCES += ppc-dis.c \
482                         cache-utils.c
483endif
484
485ifeq ($(HOST_OS),linux)
486    CORE_MISC_SOURCES += usb-linux.c \
487                         qemu-thread.c \
488                         android/camera/camera-capture-linux.c
489else
490    CORE_MISC_SOURCES += usb-dummy-android.c
491endif
492
493ifeq ($(HOST_OS),windows)
494  CORE_MISC_SOURCES   += tap-win32.c \
495                         android/camera/camera-capture-windows.c
496
497else
498  CORE_MISC_SOURCES   += posix-aio-compat.c
499endif
500
501ifeq ($(HOST_OS),darwin)
502  CORE_MISC_SOURCES   += android/camera/camera-capture-mac.m
503endif
504
505common_LOCAL_SRC_FILES += $(CORE_MISC_SOURCES)
506
507# Required
508common_LOCAL_CFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE=1 -I$(LOCAL_PATH)/distrib/jpeg-6b
509
510SLIRP_SOURCES := \
511    bootp.c \
512    cksum.c \
513    debug.c \
514    if.c \
515    ip_icmp.c \
516    ip_input.c \
517    ip_output.c \
518    mbuf.c \
519    misc.c \
520    sbuf.c \
521    slirp.c \
522    socket.c \
523    tcp_input.c \
524    tcp_output.c \
525    tcp_subr.c \
526    tcp_timer.c \
527    tftp.c \
528    udp.c
529
530common_LOCAL_SRC_FILES += $(SLIRP_SOURCES:%=slirp-android/%)
531EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/slirp-android
532
533# socket proxy support
534#
535PROXY_SOURCES := \
536    proxy_common.c \
537    proxy_http.c \
538    proxy_http_connector.c \
539    proxy_http_rewriter.c \
540
541common_LOCAL_SRC_FILES += $(PROXY_SOURCES:%=proxy/%)
542EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/proxy
543
544# include telephony stuff
545#
546TELEPHONY_SOURCES := \
547    android_modem.c \
548    modem_driver.c \
549    gsm.c \
550    sim_card.c \
551    sysdeps_qemu.c \
552    sms.c \
553    remote_call.c
554
555common_LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%)
556EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/telephony
557
558# sources inherited from upstream, but not fully
559# integrated into android emulator
560#
561common_LOCAL_SRC_FILES += \
562    json-lexer.c \
563    json-parser.c \
564    json-streamer.c \
565    qjson.c \
566    qbool.c \
567    qdict.c \
568    qfloat.c \
569    qint.c \
570    qlist.c \
571    qstring.c \
572
573ifeq ($(QEMU_TARGET_XML_SOURCES),)
574    QEMU_TARGET_XML_SOURCES := arm-core arm-neon arm-vfp arm-vfp3
575    QEMU_TARGET_XML_SOURCES := $(QEMU_TARGET_XML_SOURCES:%=$(LOCAL_PATH)/gdb-xml/%.xml)
576endif
577
578common_LOCAL_CFLAGS += $(EMULATOR_LIBQEMU_CFLAGS)
579
580
581## one for 32-bit
582$(call start-emulator-library, emulator-libqemu)
583# gdbstub-xml.c contains C-compilable arrays corresponding to the content
584# of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script.
585#
586intermediates = $(call intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true)
587QEMU_GDBSTUB_XML_C = $(intermediates)/gdbstub-xml.c
588$(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH)
589$(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES)
590$(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES)
591$(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh
592	$(hide) rm -f $@
593	$(transform-generated-source)
594LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
595LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates)
596LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
597$(call gen-hw-config-defs)
598$(call end-emulator-library)
599
600
601## another for 64-bit, see note in emulator64-common
602ifneq ($(filter linux darwin,$(HOST_OS)),)
603  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
604    $(call start-emulator-library, emulator64-libqemu)
605    # gdbstub-xml.c contains C-compilable arrays corresponding to the content
606    # of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script.
607    #
608    intermediates = $(call intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true)
609    QEMU_GDBSTUB_XML_C = $(intermediates)/gdbstub-xml.c
610    $(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH)
611    $(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES)
612    $(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES)
613    $(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh
614	$(hide) rm -f $@
615	$(transform-generated-source)
616    LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
617    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates) -m64
618    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
619    $(call gen-hw-config-defs)
620    $(call end-emulator-library)
621  endif # BUILD_STANDALONE_EMULATOR == nil
622endif # HOST_OS == linux || darwin
623
624
625# Block sources, we must compile them with each executable because they
626# are only referenced by the rest of the code using constructor functions.
627# If their object files are put in a static library, these are never compiled
628# into the final linked executable that uses them.
629#
630# Normally, one would solve thus using LOCAL_WHOLE_STATIC_LIBRARIES, but
631# the Darwin linker doesn't support -Wl,--whole-archive or equivalent :-(
632#
633BLOCK_SOURCES += \
634    block.c \
635    blockdev.c \
636    block/qcow.c \
637    block/qcow2.c \
638    block/qcow2-refcount.c \
639    block/qcow2-snapshot.c \
640    block/qcow2-cluster.c \
641    block/cloop.c \
642    block/dmg.c \
643    block/vvfat.c \
644    block/raw.c
645
646ifeq ($(HOST_OS),windows)
647    BLOCK_SOURCES += block/raw-win32.c
648else
649    BLOCK_SOURCES += block/raw-posix.c
650endif
651
652BLOCK_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
653BLOCK_CFLAGS += -DCONFIG_BDRV_WHITELIST=""
654
655##############################################################################
656##############################################################################
657###
658###  emulator-libjpeg: TARGET-INDEPENDENT QEMU FUNCTIONS
659###
660###  THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui'
661###
662
663common_LOCAL_CFLAGS =
664common_LOCAL_SRC_FILES =
665
666###########################################################
667# Jpeg configuration
668#
669LIBJPEG_DIR := distrib/jpeg-6b
670include $(LOCAL_PATH)/$(LIBJPEG_DIR)/sources.make
671
672common_LOCAL_SRC_FILES += $(LIBJPEG_SOURCES)
673
674common_LOCAL_CFLAGS += \
675    $(LIBJPEG_CFLAGS) \
676    -I$(LOCAL_PATH)/$(LIBJPEG_DIR)
677
678## one for 32-bit
679$(call start-emulator-library, emulator-libjpeg)
680LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
681LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
682$(call end-emulator-library)
683
684
685## another for 64-bit, see note in emulator64-common
686ifneq ($(filter linux darwin,$(HOST_OS)),)
687  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
688    $(call start-emulator-library, emulator64-libjpeg)
689    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
690    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
691    $(call end-emulator-library)
692  endif # BUILD_STANDALONE_EMULATOR == nil
693endif # HOST_OS == linux
694
695
696##############################################################################
697##############################################################################
698###
699###  emulator-libelff: TARGET-INDEPENDENT ELF/DWARD PARSER
700###
701###  THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui', BUT WE CANNOT PUT
702###  THEM IN emulator-libqemu SINCE THE SOURCES ARE C++
703###
704
705common_LOCAL_CFLAGS =
706common_LOCAL_SRC_FILES =
707
708ELFF_CFLAGS := -I$(LOCAL_PATH)/elff
709ELFF_LDLIBS := -lstdc++
710
711ELFF_SOURCES := \
712    dwarf_cu.cc \
713    dwarf_die.cc \
714    dwarf_utils.cc \
715    elf_alloc.cc \
716    elf_file.cc \
717    elf_mapped_section.cc \
718    elff_api.cc \
719
720common_LOCAL_SRC_FILES += $(ELFF_SOURCES:%=elff/%)
721
722common_LOCAL_CFLAGS += \
723    -fno-exceptions \
724    $(ELFF_CFLAGS) \
725
726
727## one for 32-bit
728$(call start-emulator-library, emulator-libelff)
729LOCAL_CPP_EXTENSION := .cc
730LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
731LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
732$(call end-emulator-library)
733
734
735## another for 64-bit, see note in emulator64-common
736ifneq ($(filter linux darwin,$(HOST_OS)),)
737  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
738    $(call start-emulator-library, emulator64-libelff)
739    LOCAL_CPP_EXTENSION := .cc
740    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
741    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
742    $(call end-emulator-library)
743  endif # BUILD_STANDALONE_EMULATOR == nil
744endif # HOST_OS == linux || darwin
745
746
747##############################################################################
748##############################################################################
749###
750###  gen-hx-header: Generate headers from .hx file with "hxtool" script.
751###
752###  The 'hxtool' script is used to generate header files from an input
753###  file with the .hx suffix. I.e. foo.hx --> foo.h
754###
755###  Due to the way the Android build system works, we need to regenerate
756###  it for each module (the output will go into a module-specific directory).
757###
758###  This defines a function that can be used inside a module definition
759###
760###  $(call gen-hx-header,<input>,<output>,<source-files>)
761###
762###  Where: <input> is the input file, with a .hx suffix (e.g. foo.hx)
763###         <output> is the output file, with a .h or .def suffix
764###         <source-files> is a list of source files that include the header
765###
766
767
768gen-hx-header = $(eval $(call gen-hx-header-ev,$1,$2,$3))
769
770define gen-hx-header-ev
771intermediates := $$(call intermediates-dir-for,$$(LOCAL_MODULE_CLASS),$$(LOCAL_MODULE),true)
772
773QEMU_HEADER_H := $$(intermediates)/$$2
774$$(QEMU_HEADER_H): PRIVATE_PATH := $$(LOCAL_PATH)
775$$(QEMU_HEADER_H): PRIVATE_CUSTOM_TOOL = $$(PRIVATE_PATH)/hxtool -h < $$< > $$@
776$$(QEMU_HEADER_H): $$(LOCAL_PATH)/$$1 $$(LOCAL_PATH)/hxtool
777	$$(transform-generated-source)
778
779LOCAL_GENERATED_SOURCES += $$(QEMU_HEADER_H)
780LOCAL_C_INCLUDES += $$(intermediates)
781endef
782
783