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