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