Makefile.common revision c8aa2c570d30098da59f1967d5158024ed28570d
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 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) For MacOSX: 64-bit libSDL*.a 1.2.x depends on NSQuickDrawView doesn't exist
145#  3) Standalone has --try-64
146ifeq ($(HOST_OS),linux)
147  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
148    $(call start-emulator-library, emulator64-common)
149    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
150    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
151    $(call gen-hw-config-defs)
152    $(call end-emulator-library)
153  endif # BUILD_STANDALONE_EMULATOR == nil
154endif # HOST_OS == linux
155
156##############################################################################
157##############################################################################
158###
159###  emulator-libui: LIBRARY OF UI-RELATED FUNCTIONS
160###
161###  THESE ARE USED BY 'emulator-ui' AND THE STANDALONE PROGRAMS
162###
163
164common_LOCAL_CFLAGS =
165common_LOCAL_SRC_FILES =
166
167EMULATOR_LIBUI_CFLAGS :=
168
169common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
170
171###########################################################
172# Libpng configuration
173#
174LIBPNG_DIR := distrib/libpng-1.2.19
175include $(LOCAL_PATH)/$(LIBPNG_DIR)/sources.make
176
177EMULATOR_LIBUI_CFLAGS += \
178    $(LIBPNG_CFLAGS) \
179    -I$(LOCAL_PATH)/$(LIBPNG_DIR)
180
181common_LOCAL_SRC_FILES += $(LIBPNG_SOURCES) loadpng.c
182
183##############################################################################
184# SDL-related definitions
185#
186
187# Build SDL from sources except in certain cases where we use
188# prebuilt libraries instead.
189#
190BUILD_SDL_FROM_SOURCES := true
191
192# On linux-x86, using the prebuilts avoid installing all the X11
193# development packages on our build servers.
194#
195ifeq ($(QEMU_HOST_TAG),linux-x86)
196    BUILD_SDL_FROM_SOURCES := false
197endif
198
199# On darwin-x86, a bug in the Android build system prevents the compilation
200# of Objective-C sources. Fixed recently in AOSP, but we still use the
201# prebuilts for the benefit of older platform branches.
202#
203ifeq ($(QEMU_HOST_TAG),darwin-x86)
204    BUILD_SDL_FROM_SOURCES := false
205endif
206
207# If we're building with android-configure.sh && make, always build from
208# sources to catch regressions as soon as they happen.
209#
210ifeq ($(BUILD_STANDALONE_EMULATOR),true)
211    BUILD_SDL_FROM_SOURCES := true
212endif
213
214# Except if we used android-configure.sh --sdl-config=<script>
215#
216ifneq ($(QEMU_SDL_CONFIG),)
217   BUILD_SDL_FROM_SOURCES := false
218   SDL_CONFIG := $(QEMU_SDL_CONFIG)
219endif
220
221ifneq ($(BUILD_SDL_FROM_SOURCES),true)
222
223    SDL_CONFIG ?= prebuilt/$(QEMU_HOST_TAG)/sdl/bin/sdl-config
224    SDL_CFLAGS := $(shell $(SDL_CONFIG) --cflags)
225
226    # We need to filter out the _GNU_SOURCE variable because it breaks recent
227    # releases of Cygwin when using the -mno-cygwin option. Moreover, we don't
228    # need this macro at all to build the Android emulator.
229    SDL_CFLAGS := $(filter-out -D_GNU_SOURCE=1,$(SDL_CFLAGS))
230    SDL_LDLIBS := $(filter-out %.a %.lib,$(shell $(SDL_CONFIG) --static-libs))
231
232    # Circular dependencies between libSDL and libSDLmain
233    # We repeat the libraries in the final link to work around it
234    SDL_STATIC_LIBRARIES := libSDL libSDLmain libSDL libSDLmain
235    SDL_STATIC_LIBRARIES_64 := lib64SDL lib64SDLmain lib64SDL lib64SDLmain
236
237else # BUILD_SDL_FROM_SOURCES
238
239    SDL_DIR := distrib/sdl-1.2.12
240    include $(LOCAL_PATH)/$(SDL_DIR)/sources.make
241    common_LOCAL_SRC_FILES += $(SDL_SOURCES)
242
243    EMULATOR_LIBUI_CFLAGS += \
244        -I$(LOCAL_PATH)/$(SDL_DIR)/include
245
246    SDL_STATIC_LIBRARIES :=
247
248endif # BUILD_SDL_FROM_SOURCES
249
250EMULATOR_LIBUI_CFLAGS += $(SDL_CFLAGS)
251EMULATOR_LIBUI_LDLIBS += $(SDL_LDLIBS)
252
253# The following is needed by SDL_LoadObject
254ifneq ($(HOST_OS),windows)
255    EMULATOR_LIBUI_LDLIBS += -ldl
256endif
257
258# the skin support sources
259#
260SKIN_SOURCES := rect.c \
261                region.c \
262                image.c \
263                trackball.c \
264                keyboard.c \
265                keyset.c \
266                file.c \
267                window.c \
268                scaler.c \
269                composer.c \
270                surface.c \
271
272common_LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%)
273
274common_LOCAL_SRC_FILES += \
275             android/user-config.c \
276             android/resource.c \
277             android/qemulator.c \
278             android/keycode.c \
279
280# enable MMX code for our skin scaler
281ifeq ($(HOST_ARCH),x86)
282common_LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx
283endif
284
285common_LOCAL_CFLAGS += $(EMULATOR_LIBUI_CFLAGS)
286
287
288## one for 32-bit
289$(call start-emulator-library, emulator-libui)
290LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
291LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
292$(call gen-hw-config-defs)
293$(call end-emulator-library)
294
295
296## another for 64-bit, see note in emulator64-common
297ifeq ($(HOST_OS),linux)
298  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
299    $(call start-emulator-library, emulator64-libui)
300    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
301    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
302    $(call gen-hw-config-defs)
303    $(call end-emulator-library)
304  endif # BUILD_STANDALONE_EMULATOR == nil
305endif # HOST_OS == linux
306
307
308##############################################################################
309##############################################################################
310###
311###  emulator-libqemu: TARGET-INDEPENDENT QEMU FUNCTIONS
312###
313###  THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui'
314###
315
316common_LOCAL_CFLAGS =
317common_LOCAL_SRC_FILES =
318
319
320EMULATOR_LIBQEMU_CFLAGS :=
321
322common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
323
324###########################################################
325# Jpeg configuration
326#
327LIBJPEG_DIR := distrib/jpeg-6b
328include $(LOCAL_PATH)/$(LIBJPEG_DIR)/sources.make
329
330EMULATOR_LIBQEMU_CFLAGS += \
331    $(LIBJPEG_CFLAGS) \
332    -I$(LOCAL_PATH)/$(LIBJPEG_DIR)
333
334common_LOCAL_SRC_FILES += $(LIBJPEG_SOURCES)
335
336AUDIO_SOURCES := noaudio.c wavaudio.c wavcapture.c mixeng.c
337AUDIO_CFLAGS  := -I$(LOCAL_PATH)/audio -DHAS_AUDIO
338AUDIO_LDLIBS  :=
339
340common_LOCAL_CFLAGS += -Wall -Wno-missing-field-initializers
341
342ifeq ($(HOST_OS),darwin)
343  CONFIG_COREAUDIO ?= yes
344  AUDIO_CFLAGS += -DHOST_BSD=1
345endif
346
347ifeq ($(HOST_OS),windows)
348  CONFIG_WINAUDIO ?= yes
349endif
350
351ifeq ($(HOST_OS),linux)
352  CONFIG_OSS  ?= yes
353  CONFIG_ALSA ?= yes
354  CONFIG_PULSEAUDIO ?= yes
355  CONFIG_ESD  ?= yes
356endif
357
358ifeq ($(HOST_OS),freebsd)
359  CONFIG_OSS ?= yes
360endif
361
362ifeq ($(CONFIG_COREAUDIO),yes)
363  AUDIO_SOURCES += coreaudio.c
364  AUDIO_CFLAGS  += -DCONFIG_COREAUDIO
365  AUDIO_LDLIBS  += -Wl,-framework,CoreAudio
366endif
367
368ifeq ($(CONFIG_WINAUDIO),yes)
369  AUDIO_SOURCES += winaudio.c
370  AUDIO_CFLAGS  += -DCONFIG_WINAUDIO
371endif
372
373ifeq ($(CONFIG_PULSEAUDIO),yes)
374  AUDIO_SOURCES += paaudio.c audio_pt_int.c
375  AUDIO_CFLAGS  += -DCONFIG_PULSEAUDIO
376endif
377
378ifeq ($(CONFIG_ALSA),yes)
379  AUDIO_SOURCES += alsaaudio.c audio_pt_int.c
380  AUDIO_CFLAGS  += -DCONFIG_ALSA
381endif
382
383ifeq ($(CONFIG_ESD),yes)
384  AUDIO_SOURCES += esdaudio.c
385  AUDIO_CFLAGS  += -DCONFIG_ESD
386endif
387
388ifeq ($(CONFIG_OSS),yes)
389  AUDIO_SOURCES += ossaudio.c
390  AUDIO_CFLAGS  += -DCONFIG_OSS
391endif
392
393AUDIO_SOURCES := $(call sort,$(AUDIO_SOURCES:%=audio/%))
394
395common_LOCAL_CFLAGS += -Wno-sign-compare \
396                -fno-strict-aliasing -W -Wall -Wno-unused-parameter \
397
398# this is very important, otherwise the generated binaries may
399# not link properly on our build servers
400ifeq ($(HOST_OS),linux)
401common_LOCAL_CFLAGS += -fno-stack-protector
402endif
403
404common_LOCAL_SRC_FILES += $(AUDIO_SOURCES)
405common_LOCAL_SRC_FILES += \
406    android/audio-test.c
407
408# other flags
409ifneq ($(HOST_OS),windows)
410    AUDIO_LDLIBS += -ldl
411else
412endif
413
414
415EMULATOR_LIBQEMU_CFLAGS += $(AUDIO_CFLAGS)
416EMULATOR_LIBQEMU_LDLIBS += $(AUDIO_LDLIBS)
417
418common_LOCAL_CFLAGS += -Wno-missing-field-initializers
419
420# migration sources
421#
422ifeq ($(HOST_OS),windows)
423  common_LOCAL_SRC_FILES += migration-dummy-android.c
424else
425  common_LOCAL_SRC_FILES += migration.c \
426                     migration-exec.c \
427                     migration-tcp-android.c
428endif
429
430# misc. sources
431#
432CORE_MISC_SOURCES = \
433    acl.c \
434    aes.c \
435    aio-android.c \
436    async.c \
437    bt-host.c \
438    bt-vhci.c \
439    buffered_file.c \
440    cbuffer.c \
441    charpipe.c \
442    console.c \
443    cutils.c \
444    d3des.c \
445    input.c \
446    iohandler.c \
447    ioport.c \
448    module.c \
449    net-android.c \
450    notify.c \
451    osdep.c \
452    path.c \
453    qemu-char.c \
454    qemu-config.c \
455    qemu-error.c \
456    qemu-malloc.c \
457    qemu-option.c \
458    qemu-sockets-android.c \
459    qerror.c \
460    readline.c \
461    savevm.c \
462    shaper.c \
463    tcpdump.c \
464    vnc-android.c \
465    android/boot-properties.c \
466    android/config.c \
467    android/core-init-utils.c   \
468    android/gps.c \
469    android/hw-kmsg.c \
470    android/hw-lcd.c \
471    android/hw-events.c \
472    android/hw-control.c \
473    android/hw-sensors.c \
474    android/hw-qemud.c \
475    android/looper-qemu.c \
476    android/hw-pipe-net.c \
477    android/qemu-setup.c \
478    android/snapshot.c \
479    android/android-device.c \
480    android/async-socket-connector.c \
481    android/async-socket.c \
482    android/sdk-controller-socket.c \
483    android/sensors-port.c \
484    android/utils/timezone.c \
485    android/camera/camera-format-converters.c \
486    android/camera/camera-service.c \
487    android/adb-server.c \
488    android/adb-qemud.c \
489    android/snaphost-android.c \
490    android/multitouch-screen.c \
491    android/multitouch-port.c \
492    android/utils/jpeg-compress.c
493
494ifeq ($(HOST_ARCH),x86)
495    CORE_MISC_SOURCES += i386-dis.c
496endif
497ifeq ($(HOST_ARCH),x86_64)
498    CORE_MISC_SOURCES += i386-dis.c
499endif
500ifeq ($(HOST_ARCH),ppc)
501    CORE_MISC_SOURCES += ppc-dis.c \
502                         cache-utils.c
503endif
504
505ifeq ($(HOST_OS),linux)
506    CORE_MISC_SOURCES += usb-linux.c \
507                         qemu-thread.c \
508                         android/camera/camera-capture-linux.c
509else
510    CORE_MISC_SOURCES += usb-dummy-android.c
511endif
512
513ifeq ($(HOST_OS),windows)
514  CORE_MISC_SOURCES   += tap-win32.c \
515                         android/camera/camera-capture-windows.c
516
517else
518  CORE_MISC_SOURCES   += posix-aio-compat.c
519endif
520
521ifeq ($(HOST_OS),darwin)
522  CORE_MISC_SOURCES   += android/camera/camera-capture-mac.m
523endif
524
525common_LOCAL_SRC_FILES += $(CORE_MISC_SOURCES)
526
527# Required
528common_LOCAL_CFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE=1
529
530SLIRP_SOURCES := \
531    bootp.c \
532    cksum.c \
533    debug.c \
534    if.c \
535    ip_icmp.c \
536    ip_input.c \
537    ip_output.c \
538    mbuf.c \
539    misc.c \
540    sbuf.c \
541    slirp.c \
542    socket.c \
543    tcp_input.c \
544    tcp_output.c \
545    tcp_subr.c \
546    tcp_timer.c \
547    tftp.c \
548    udp.c
549
550common_LOCAL_SRC_FILES += $(SLIRP_SOURCES:%=slirp-android/%)
551EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/slirp-android
552
553# socket proxy support
554#
555PROXY_SOURCES := \
556    proxy_common.c \
557    proxy_http.c \
558    proxy_http_connector.c \
559    proxy_http_rewriter.c \
560
561common_LOCAL_SRC_FILES += $(PROXY_SOURCES:%=proxy/%)
562EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/proxy
563
564# include telephony stuff
565#
566TELEPHONY_SOURCES := \
567    android_modem.c \
568    modem_driver.c \
569    gsm.c \
570    sim_card.c \
571    sysdeps_qemu.c \
572    sms.c \
573    remote_call.c
574
575common_LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%)
576EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/telephony
577
578# sources inherited from upstream, but not fully
579# integrated into android emulator
580#
581common_LOCAL_SRC_FILES += \
582    json-lexer.c \
583    json-parser.c \
584    json-streamer.c \
585    qjson.c \
586    qbool.c \
587    qdict.c \
588    qfloat.c \
589    qint.c \
590    qlist.c \
591    qstring.c \
592
593ifeq ($(QEMU_TARGET_XML_SOURCES),)
594    QEMU_TARGET_XML_SOURCES := arm-core arm-neon arm-vfp arm-vfp3
595    QEMU_TARGET_XML_SOURCES := $(QEMU_TARGET_XML_SOURCES:%=$(LOCAL_PATH)/gdb-xml/%.xml)
596endif
597
598common_LOCAL_CFLAGS += $(EMULATOR_LIBQEMU_CFLAGS)
599
600
601## one for 32-bit
602$(call start-emulator-library, emulator-libqemu)
603# gdbstub-xml.c contains C-compilable arrays corresponding to the content
604# of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script.
605#
606intermediates = $(call intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true)
607QEMU_GDBSTUB_XML_C = $(intermediates)/gdbstub-xml.c
608$(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH)
609$(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES)
610$(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES)
611$(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh
612	$(hide) rm -f $@
613	$(transform-generated-source)
614LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
615LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates)
616LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
617$(call gen-hw-config-defs)
618$(call end-emulator-library)
619
620
621## another for 64-bit, see note in emulator64-common
622ifeq ($(HOST_OS),linux)
623  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
624    $(call start-emulator-library, emulator64-libqemu)
625    # gdbstub-xml.c contains C-compilable arrays corresponding to the content
626    # of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script.
627    #
628    intermediates = $(call intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true)
629    QEMU_GDBSTUB_XML_C = $(intermediates)/gdbstub-xml.c
630    $(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH)
631    $(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES)
632    $(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES)
633    $(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh
634	$(hide) rm -f $@
635	$(transform-generated-source)
636    LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C)
637    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates) -m64
638    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
639    $(call gen-hw-config-defs)
640    $(call end-emulator-library)
641  endif # BUILD_STANDALONE_EMULATOR == nil
642endif # HOST_OS == linux
643
644
645# Block sources, we must compile them with each executable because they
646# are only referenced by the rest of the code using constructor functions.
647# If their object files are put in a static library, these are never compiled
648# into the final linked executable that uses them.
649#
650# Normally, one would solve thus using LOCAL_WHOLE_STATIC_LIBRARIES, but
651# the Darwin linker doesn't support -Wl,--whole-archive or equivalent :-(
652#
653BLOCK_SOURCES += \
654    block.c \
655    blockdev.c \
656    block/qcow.c \
657    block/qcow2.c \
658    block/qcow2-refcount.c \
659    block/qcow2-snapshot.c \
660    block/qcow2-cluster.c \
661    block/cloop.c \
662    block/dmg.c \
663    block/vvfat.c \
664    block/raw.c
665
666ifeq ($(HOST_OS),windows)
667    BLOCK_SOURCES += block/raw-win32.c
668else
669    BLOCK_SOURCES += block/raw-posix.c
670endif
671
672BLOCK_CFLAGS += $(EMULATOR_COMMON_CFLAGS)
673BLOCK_CFLAGS += -DCONFIG_BDRV_WHITELIST=""
674
675
676##############################################################################
677##############################################################################
678###
679###  emulator-libelff: TARGET-INDEPENDENT ELF/DWARD PARSER
680###
681###  THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui', BUT WE CANNOT PUT
682###  THEM IN emulator-libqemu SINCE THE SOURCES ARE C++
683###
684
685common_LOCAL_CFLAGS =
686common_LOCAL_SRC_FILES =
687
688ELFF_CFLAGS := -I$(LOCAL_PATH)/elff
689ELFF_LDLIBS := -lstdc++
690
691ELFF_SOURCES := \
692    dwarf_cu.cc \
693    dwarf_die.cc \
694    dwarf_utils.cc \
695    elf_alloc.cc \
696    elf_file.cc \
697    elf_mapped_section.cc \
698    elff_api.cc \
699
700common_LOCAL_SRC_FILES += $(ELFF_SOURCES:%=elff/%)
701
702common_LOCAL_CFLAGS += \
703    -fno-exceptions \
704    $(ELFF_CFLAGS) \
705
706
707## one for 32-bit
708$(call start-emulator-library, emulator-libelff)
709LOCAL_CPP_EXTENSION := .cc
710LOCAL_CFLAGS += $(common_LOCAL_CFLAGS)
711LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
712$(call end-emulator-library)
713
714
715## another for 64-bit, see note in emulator64-common
716ifeq ($(HOST_OS),linux)
717  ifneq ($(BUILD_STANDALONE_EMULATOR),true)
718    $(call start-emulator-library, emulator64-libelff)
719    LOCAL_CPP_EXTENSION := .cc
720    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
721    LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES)
722    $(call end-emulator-library)
723  endif # BUILD_STANDALONE_EMULATOR == nil
724endif # HOST_OS == linux
725
726
727##############################################################################
728##############################################################################
729###
730###  gen-hx-header: Generate headers from .hx file with "hxtool" script.
731###
732###  The 'hxtool' script is used to generate header files from an input
733###  file with the .hx suffix. I.e. foo.hx --> foo.h
734###
735###  Due to the way the Android build system works, we need to regenerate
736###  it for each module (the output will go into a module-specific directory).
737###
738###  This defines a function that can be used inside a module definition
739###
740###  $(call gen-hx-header,<input>,<output>,<source-files>)
741###
742###  Where: <input> is the input file, with a .hx suffix (e.g. foo.hx)
743###         <output> is the output file, with a .h or .def suffix
744###         <source-files> is a list of source files that include the header
745###
746
747
748gen-hx-header = $(eval $(call gen-hx-header-ev,$1,$2,$3))
749
750define gen-hx-header-ev
751intermediates := $$(call intermediates-dir-for,$$(LOCAL_MODULE_CLASS),$$(LOCAL_MODULE),true)
752
753QEMU_HEADER_H := $$(intermediates)/$$2
754$$(QEMU_HEADER_H): PRIVATE_PATH := $$(LOCAL_PATH)
755$$(QEMU_HEADER_H): PRIVATE_CUSTOM_TOOL = $$(PRIVATE_PATH)/hxtool -h < $$< > $$@
756$$(QEMU_HEADER_H): $$(LOCAL_PATH)/$$1 $$(LOCAL_PATH)/hxtool
757	$$(transform-generated-source)
758
759LOCAL_GENERATED_SOURCES += $$(QEMU_HEADER_H)
760LOCAL_C_INCLUDES += $$(intermediates)
761endef
762
763