# When building this project, we actually generate several components which # are the following: # # - the emulator-ui program (which is target-agnostic) # - the target-specific qemu-android-$ARCH programs (headless emulation engines) # - the "standalone" emulator programs (embed both UI and engine in a single # binary and process), i.e. "emulator" for ARM and "emulator-x86" for x86. # # This file defines static host libraries that will be used by at least two # of these components. # ############################################################################## ############################################################################## ### ### gen-hw-config-defs: Generate hardware configuration definitions header ### ### The 'gen-hw-config.py' script is used to generate the hw-config-defs.h ### header from the an .ini file like android/avd/hardware-properties.ini ### ### Due to the way the Android build system works, we need to regenerate ### it for each module (the output will go into a module-specific directory). ### ### This defines a function that can be used inside a module definition ### ### $(call gen-hw-config-defs) ### # First, define a rule to generate a dummy "emulator_hw_config_defs" module # which purpose is simply to host the generated header in its output directory. intermediates := $(call intermediates-dir-for,SHARED_LIBRARIES,emulator_hw_config_defs,true) QEMU_HARDWARE_PROPERTIES_INI := $(LOCAL_PATH)/android/avd/hardware-properties.ini QEMU_HW_CONFIG_DEFS_H := $(intermediates)/android/avd/hw-config-defs.h $(QEMU_HW_CONFIG_DEFS_H): PRIVATE_PATH := $(LOCAL_PATH) $(QEMU_HW_CONFIG_DEFS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/android/tools/gen-hw-config.py $< $@ $(QEMU_HW_CONFIG_DEFS_H): $(QEMU_HARDWARE_PROPERTIES_INI) $(LOCAL_PATH)/android/tools/gen-hw-config.py $(hide) rm -f $@ $(transform-generated-source) QEMU_HW_CONFIG_DEFS_INCLUDES := $(intermediates) # Second, define a function that needs to be called inside each module that contains # a source file that includes the generated header file. gen-hw-config-defs = \ $(eval LOCAL_GENERATED_SOURCES += $(QEMU_HW_CONFIG_DEFS_H))\ $(eval LOCAL_C_INCLUDES += $(QEMU_HW_CONFIG_DEFS_INCLUDES)) ############################################################################## ############################################################################## ### ### emulator-common: LIBRARY OF COMMON FUNCTIONS ### ### THESE ARE POTENTIALLY USED BY ALL COMPONENTS ### common_LOCAL_CFLAGS = common_LOCAL_SRC_FILES = EMULATOR_COMMON_CFLAGS := # Needed by everything about the host EMULATOR_COMMON_CFLAGS += \ -I$(LOCAL_PATH)/android/config/$(QEMU_HOST_TAG) # add the build ID to the default macro definitions ifeq ($(BUILD_STANDALONE_EMULATOR),) EMULATOR_COMMON_CFLAGS += -DANDROID_BUILD_ID="$(strip $(BUILD_ID))-$(strip $(BUILD_NUMBER))" endif # For non-standalone builds, extract the major version number from the Android SDK # tools revision number. ifneq ($(BUILD_STANDALONE_EMULATOR),true) ANDROID_SDK_TOOLS_REVISION := $(shell awk -F= '/Pkg.Revision/ { print $$2; }' sdk/files/tools_source.properties) endif ANDROID_SDK_TOOLS_REVISION := $(strip $(ANDROID_SDK_TOOLS_REVISION)) ifdef ANDROID_SDK_TOOLS_REVISION EMULATOR_COMMON_CFLAGS += -DANDROID_SDK_TOOLS_REVISION=$(ANDROID_SDK_TOOLS_REVISION) endif # Enable large-file support (i.e. make off_t a 64-bit value) ifeq ($(HOST_OS),linux) EMULATOR_COMMON_CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE endif ########################################################### # Zlib sources # ZLIB_DIR := distrib/zlib-1.2.3 include $(LOCAL_PATH)/$(ZLIB_DIR)/sources.make EMULATOR_COMMON_CFLAGS += -I$(LOCAL_PATH)/$(ZLIB_DIR) common_LOCAL_SRC_FILES += $(ZLIB_SOURCES) ########################################################### # Android utility functions # common_LOCAL_SRC_FILES += \ sockets.c \ iolooper-select.c \ android/async-console.c \ android/async-utils.c \ android/charmap.c \ android/framebuffer.c \ android/keycode-array.c \ android/avd/hw-config.c \ android/avd/info.c \ android/avd/util.c \ android/sync-utils.c \ android/utils/assert.c \ android/utils/bufprint.c \ android/utils/debug.c \ android/utils/dll.c \ android/utils/dirscanner.c \ android/utils/filelock.c \ android/utils/ini.c \ android/utils/intmap.c \ android/utils/lineinput.c \ android/utils/mapfile.c \ android/utils/misc.c \ android/utils/panic.c \ android/utils/path.c \ android/utils/reflist.c \ android/utils/refset.c \ android/utils/stralloc.c \ android/utils/system.c \ android/utils/tempfile.c \ android/utils/vector.c \ common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) ## one for 32-bit $(call start-emulator-library, emulator-common) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call gen-hw-config-defs) $(call end-emulator-library) ## another for 64-bit # NOTE: only linux and darwin in non-standalone mode is supported, because # 1) For Windows: amd64-mingw32msvc-gcc doesn't work, see http://b/issue?id=5949152. # 2) Standalone has --try-64 ifneq ($(filter linux darwin,$(HOST_OS)),) ifneq ($(BUILD_STANDALONE_EMULATOR),true) $(call start-emulator-library, emulator64-common) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64 LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call gen-hw-config-defs) $(call end-emulator-library) endif # BUILD_STANDALONE_EMULATOR == nil endif # HOST_OS == linux || darwin ############################################################################## ############################################################################## ### ### emulator-libui: LIBRARY OF UI-RELATED FUNCTIONS ### ### THESE ARE USED BY 'emulator-ui' AND THE STANDALONE PROGRAMS ### common_LOCAL_CFLAGS = common_LOCAL_SRC_FILES = ifneq ($(QEMU_OPENGLES_INCLUDE),) EMULATOR_LIBUI_CFLAGS := -I$(QEMU_OPENGLES_INCLUDE) endif common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) ########################################################### # Libpng configuration # LIBPNG_DIR := distrib/libpng-1.2.19 include $(LOCAL_PATH)/$(LIBPNG_DIR)/sources.make EMULATOR_LIBUI_CFLAGS += \ $(LIBPNG_CFLAGS) \ -I$(LOCAL_PATH)/$(LIBPNG_DIR) common_LOCAL_SRC_FILES += $(LIBPNG_SOURCES) loadpng.c ############################################################################## # SDL-related definitions # # Build SDL from sources except in certain cases where we use # prebuilt libraries instead. # BUILD_SDL_FROM_SOURCES := true # On linux-x86, using the prebuilts avoid installing all the X11 # development packages on our build servers. # ifeq ($(QEMU_HOST_TAG),linux-x86) BUILD_SDL_FROM_SOURCES := false endif # If we're building with android-configure.sh && make, always build from # sources to catch regressions as soon as they happen. # ifeq ($(BUILD_STANDALONE_EMULATOR),true) BUILD_SDL_FROM_SOURCES := true endif # Except if we used android-configure.sh --sdl-config=<script> # ifneq ($(QEMU_SDL_CONFIG),) BUILD_SDL_FROM_SOURCES := false SDL_CONFIG := $(QEMU_SDL_CONFIG) endif ifneq ($(BUILD_SDL_FROM_SOURCES),true) SDL_CONFIG ?= prebuilts/tools/$(QEMU_HOST_TAG)/sdl/bin/sdl-config SDL_CFLAGS := $(shell $(SDL_CONFIG) --cflags) # We need to filter out the _GNU_SOURCE variable because it breaks recent # releases of Cygwin when using the -mno-cygwin option. Moreover, we don't # need this macro at all to build the Android emulator. SDL_CFLAGS := $(filter-out -D_GNU_SOURCE=1,$(SDL_CFLAGS)) SDL_LDLIBS := $(filter-out %.a %.lib,$(shell $(SDL_CONFIG) --static-libs)) # Circular dependencies between libSDL and libSDLmain # We repeat the libraries in the final link to work around it SDL_STATIC_LIBRARIES := libSDL libSDLmain libSDL libSDLmain SDL_STATIC_LIBRARIES_64 := lib64SDL lib64SDLmain lib64SDL lib64SDLmain else # BUILD_SDL_FROM_SOURCES SDL_DIR := distrib/sdl-1.2.15 include $(LOCAL_PATH)/$(SDL_DIR)/sources.make common_LOCAL_SRC_FILES += $(SDL_SOURCES) EMULATOR_LIBUI_CFLAGS += \ -I$(LOCAL_PATH)/$(SDL_DIR)/include SDL_STATIC_LIBRARIES := endif # BUILD_SDL_FROM_SOURCES EMULATOR_LIBUI_CFLAGS += $(SDL_CFLAGS) EMULATOR_LIBUI_LDLIBS += $(SDL_LDLIBS) # The following is needed by SDL_LoadObject ifneq ($(HOST_OS),windows) EMULATOR_LIBUI_LDLIBS += -ldl endif # the skin support sources # SKIN_SOURCES := rect.c \ region.c \ image.c \ trackball.c \ keyboard.c \ keyset.c \ file.c \ window.c \ scaler.c \ composer.c \ surface.c \ common_LOCAL_SRC_FILES += $(SKIN_SOURCES:%=android/skin/%) common_LOCAL_SRC_FILES += \ android/user-config.c \ android/resource.c \ android/qemulator.c \ android/keycode.c \ # enable MMX code for our skin scaler ifeq ($(HOST_ARCH),x86) common_LOCAL_CFLAGS += -DUSE_MMX=1 -mmmx endif common_LOCAL_CFLAGS += $(EMULATOR_LIBUI_CFLAGS) ## one for 32-bit $(call start-emulator-library, emulator-libui) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call gen-hw-config-defs) $(call end-emulator-library) ## another for 64-bit, see note in emulator64-common ifneq ($(filter linux darwin,$(HOST_OS)),) ifneq ($(BUILD_STANDALONE_EMULATOR),true) $(call start-emulator-library, emulator64-libui) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64 LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call gen-hw-config-defs) $(call end-emulator-library) endif # BUILD_STANDALONE_EMULATOR == nil endif # HOST_OS == linux || darwin ############################################################################## ############################################################################## ### ### emulator-libqemu: TARGET-INDEPENDENT QEMU FUNCTIONS ### ### THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui' ### common_LOCAL_CFLAGS = common_LOCAL_SRC_FILES = EMULATOR_LIBQEMU_CFLAGS := common_LOCAL_CFLAGS += $(EMULATOR_COMMON_CFLAGS) AUDIO_SOURCES := noaudio.c wavaudio.c wavcapture.c mixeng.c AUDIO_CFLAGS := -I$(LOCAL_PATH)/audio -DHAS_AUDIO AUDIO_LDLIBS := common_LOCAL_CFLAGS += -Wall $(GCC_W_NO_MISSING_FIELD_INITIALIZERS) ifeq ($(HOST_OS),darwin) CONFIG_COREAUDIO ?= yes AUDIO_CFLAGS += -DHOST_BSD=1 endif ifeq ($(HOST_OS),windows) CONFIG_WINAUDIO ?= yes endif ifeq ($(HOST_OS),linux) CONFIG_OSS ?= yes CONFIG_ALSA ?= yes CONFIG_PULSEAUDIO ?= yes CONFIG_ESD ?= yes endif ifeq ($(HOST_OS),freebsd) CONFIG_OSS ?= yes endif ifeq ($(CONFIG_COREAUDIO),yes) AUDIO_SOURCES += coreaudio.c AUDIO_CFLAGS += -DCONFIG_COREAUDIO AUDIO_LDLIBS += -Wl,-framework,CoreAudio endif ifeq ($(CONFIG_WINAUDIO),yes) AUDIO_SOURCES += winaudio.c AUDIO_CFLAGS += -DCONFIG_WINAUDIO endif ifeq ($(CONFIG_PULSEAUDIO),yes) AUDIO_SOURCES += paaudio.c audio_pt_int.c AUDIO_CFLAGS += -DCONFIG_PULSEAUDIO endif ifeq ($(CONFIG_ALSA),yes) AUDIO_SOURCES += alsaaudio.c audio_pt_int.c AUDIO_CFLAGS += -DCONFIG_ALSA endif ifeq ($(CONFIG_ESD),yes) AUDIO_SOURCES += esdaudio.c AUDIO_CFLAGS += -DCONFIG_ESD endif ifeq ($(CONFIG_OSS),yes) AUDIO_SOURCES += ossaudio.c AUDIO_CFLAGS += -DCONFIG_OSS endif AUDIO_SOURCES := $(call sort,$(AUDIO_SOURCES:%=audio/%)) common_LOCAL_CFLAGS += -Wno-sign-compare \ -fno-strict-aliasing -W -Wall -Wno-unused-parameter \ # this is very important, otherwise the generated binaries may # not link properly on our build servers ifeq ($(HOST_OS),linux) common_LOCAL_CFLAGS += -fno-stack-protector endif common_LOCAL_SRC_FILES += $(AUDIO_SOURCES) common_LOCAL_SRC_FILES += \ android/audio-test.c # other flags ifneq ($(HOST_OS),windows) AUDIO_LDLIBS += -ldl else endif EMULATOR_LIBQEMU_CFLAGS += $(AUDIO_CFLAGS) EMULATOR_LIBQEMU_LDLIBS += $(AUDIO_LDLIBS) common_LOCAL_CFLAGS += $(GCC_W_NO_MISSING_FIELD_INITIALIZERS) # migration sources # ifeq ($(HOST_OS),windows) common_LOCAL_SRC_FILES += migration-dummy-android.c else common_LOCAL_SRC_FILES += migration.c \ migration-exec.c \ migration-tcp-android.c endif # misc. sources # CORE_MISC_SOURCES = \ acl.c \ aes.c \ aio-android.c \ async.c \ bt-host.c \ bt-vhci.c \ buffered_file.c \ cbuffer.c \ charpipe.c \ console.c \ cutils.c \ d3des.c \ input.c \ iohandler.c \ ioport.c \ module.c \ net-android.c \ notify.c \ osdep.c \ path.c \ qemu-char.c \ qemu-config.c \ qemu-error.c \ qemu-malloc.c \ qemu-option.c \ qemu-sockets-android.c \ qerror.c \ readline.c \ savevm.c \ shaper.c \ tcpdump.c \ vnc-android.c \ android/boot-properties.c \ android/config.c \ android/core-init-utils.c \ android/gps.c \ android/hw-kmsg.c \ android/hw-lcd.c \ android/hw-events.c \ android/hw-control.c \ android/hw-sensors.c \ android/hw-qemud.c \ android/looper-qemu.c \ android/hw-pipe-net.c \ android/qemu-setup.c \ android/snapshot.c \ android/async-socket-connector.c \ android/async-socket.c \ android/sdk-controller-socket.c \ android/sensors-port.c \ android/utils/timezone.c \ android/camera/camera-format-converters.c \ android/camera/camera-service.c \ android/adb-server.c \ android/adb-qemud.c \ android/snaphost-android.c \ android/multitouch-screen.c \ android/multitouch-port.c \ android/utils/jpeg-compress.c ifeq ($(HOST_ARCH),x86) CORE_MISC_SOURCES += i386-dis.c endif ifeq ($(HOST_ARCH),x86_64) CORE_MISC_SOURCES += i386-dis.c endif ifeq ($(HOST_ARCH),ppc) CORE_MISC_SOURCES += ppc-dis.c \ cache-utils.c endif ifeq ($(HOST_OS),linux) CORE_MISC_SOURCES += usb-linux.c \ qemu-thread.c \ android/camera/camera-capture-linux.c else CORE_MISC_SOURCES += usb-dummy-android.c endif ifeq ($(HOST_OS),windows) CORE_MISC_SOURCES += tap-win32.c \ android/camera/camera-capture-windows.c else CORE_MISC_SOURCES += posix-aio-compat.c endif ifeq ($(HOST_OS),darwin) CORE_MISC_SOURCES += android/camera/camera-capture-mac.m endif common_LOCAL_SRC_FILES += $(CORE_MISC_SOURCES) # Required common_LOCAL_CFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE=1 -I$(LOCAL_PATH)/distrib/jpeg-6b SLIRP_SOURCES := \ bootp.c \ cksum.c \ debug.c \ if.c \ ip_icmp.c \ ip_input.c \ ip_output.c \ mbuf.c \ misc.c \ sbuf.c \ slirp.c \ socket.c \ tcp_input.c \ tcp_output.c \ tcp_subr.c \ tcp_timer.c \ tftp.c \ udp.c common_LOCAL_SRC_FILES += $(SLIRP_SOURCES:%=slirp-android/%) EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/slirp-android # socket proxy support # PROXY_SOURCES := \ proxy_common.c \ proxy_http.c \ proxy_http_connector.c \ proxy_http_rewriter.c \ common_LOCAL_SRC_FILES += $(PROXY_SOURCES:%=proxy/%) EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/proxy # include telephony stuff # TELEPHONY_SOURCES := \ android_modem.c \ modem_driver.c \ gsm.c \ sim_card.c \ sysdeps_qemu.c \ sms.c \ remote_call.c common_LOCAL_SRC_FILES += $(TELEPHONY_SOURCES:%=telephony/%) EMULATOR_LIBQEMU_CFLAGS += -I$(LOCAL_PATH)/telephony # sources inherited from upstream, but not fully # integrated into android emulator # common_LOCAL_SRC_FILES += \ json-lexer.c \ json-parser.c \ json-streamer.c \ qjson.c \ qbool.c \ qdict.c \ qfloat.c \ qint.c \ qlist.c \ qstring.c \ ifeq ($(QEMU_TARGET_XML_SOURCES),) QEMU_TARGET_XML_SOURCES := arm-core arm-neon arm-vfp arm-vfp3 QEMU_TARGET_XML_SOURCES := $(QEMU_TARGET_XML_SOURCES:%=$(LOCAL_PATH)/gdb-xml/%.xml) endif common_LOCAL_CFLAGS += $(EMULATOR_LIBQEMU_CFLAGS) ## one for 32-bit $(call start-emulator-library, emulator-libqemu) # gdbstub-xml.c contains C-compilable arrays corresponding to the content # of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script. # intermediates = $(call intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true) QEMU_GDBSTUB_XML_C = $(intermediates)/gdbstub-xml.c $(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH) $(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES) $(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES) $(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh $(hide) rm -f $@ $(transform-generated-source) LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates) LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call gen-hw-config-defs) $(call end-emulator-library) ## another for 64-bit, see note in emulator64-common ifneq ($(filter linux darwin,$(HOST_OS)),) ifneq ($(BUILD_STANDALONE_EMULATOR),true) $(call start-emulator-library, emulator64-libqemu) # gdbstub-xml.c contains C-compilable arrays corresponding to the content # of $(LOCAL_PATH)/gdb-xml/, and is generated with the 'feature_to_c.sh' script. # intermediates = $(call intermediates-dir-for,STATIC_LIBRARIES,$(LOCAL_MODULE),true) QEMU_GDBSTUB_XML_C = $(intermediates)/gdbstub-xml.c $(QEMU_GDBSTUB_XML_C): PRIVATE_PATH := $(LOCAL_PATH) $(QEMU_GDBSTUB_XML_C): PRIVATE_SOURCES := $(TARGET_XML_SOURCES) $(QEMU_GDBSTUB_XML_C): PRIVATE_CUSTOM_TOOL = $(PRIVATE_PATH)/feature_to_c.sh $@ $(QEMU_TARGET_XML_SOURCES) $(QEMU_GDBSTUB_XML_C): $(QEMU_TARGET_XML_SOURCES) $(LOCAL_PATH)/feature_to_c.sh $(hide) rm -f $@ $(transform-generated-source) LOCAL_GENERATED_SOURCES += $(QEMU_GDBSTUB_XML_C) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates) -m64 LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call gen-hw-config-defs) $(call end-emulator-library) endif # BUILD_STANDALONE_EMULATOR == nil endif # HOST_OS == linux || darwin # Block sources, we must compile them with each executable because they # are only referenced by the rest of the code using constructor functions. # If their object files are put in a static library, these are never compiled # into the final linked executable that uses them. # # Normally, one would solve thus using LOCAL_WHOLE_STATIC_LIBRARIES, but # the Darwin linker doesn't support -Wl,--whole-archive or equivalent :-( # BLOCK_SOURCES += \ block.c \ blockdev.c \ block/qcow.c \ block/qcow2.c \ block/qcow2-refcount.c \ block/qcow2-snapshot.c \ block/qcow2-cluster.c \ block/cloop.c \ block/dmg.c \ block/vvfat.c \ block/raw.c ifeq ($(HOST_OS),windows) BLOCK_SOURCES += block/raw-win32.c else BLOCK_SOURCES += block/raw-posix.c endif BLOCK_CFLAGS += $(EMULATOR_COMMON_CFLAGS) BLOCK_CFLAGS += -DCONFIG_BDRV_WHITELIST="" ############################################################################## ############################################################################## ### ### emulator-libjpeg: TARGET-INDEPENDENT QEMU FUNCTIONS ### ### THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui' ### common_LOCAL_CFLAGS = common_LOCAL_SRC_FILES = ########################################################### # Jpeg configuration # LIBJPEG_DIR := distrib/jpeg-6b include $(LOCAL_PATH)/$(LIBJPEG_DIR)/sources.make common_LOCAL_SRC_FILES += $(LIBJPEG_SOURCES) common_LOCAL_CFLAGS += \ $(LIBJPEG_CFLAGS) \ -I$(LOCAL_PATH)/$(LIBJPEG_DIR) ## one for 32-bit $(call start-emulator-library, emulator-libjpeg) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call end-emulator-library) ## another for 64-bit, see note in emulator64-common ifneq ($(filter linux darwin,$(HOST_OS)),) ifneq ($(BUILD_STANDALONE_EMULATOR),true) $(call start-emulator-library, emulator64-libjpeg) LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64 LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call end-emulator-library) endif # BUILD_STANDALONE_EMULATOR == nil endif # HOST_OS == linux ############################################################################## ############################################################################## ### ### emulator-libelff: TARGET-INDEPENDENT ELF/DWARD PARSER ### ### THESE ARE USED BY EVERYTHING EXCEPT 'emulator-ui', BUT WE CANNOT PUT ### THEM IN emulator-libqemu SINCE THE SOURCES ARE C++ ### common_LOCAL_CFLAGS = common_LOCAL_SRC_FILES = ELFF_CFLAGS := -I$(LOCAL_PATH)/elff ELFF_LDLIBS := -lstdc++ ELFF_SOURCES := \ dwarf_cu.cc \ dwarf_die.cc \ dwarf_utils.cc \ elf_alloc.cc \ elf_file.cc \ elf_mapped_section.cc \ elff_api.cc \ common_LOCAL_SRC_FILES += $(ELFF_SOURCES:%=elff/%) common_LOCAL_CFLAGS += \ -fno-exceptions \ $(ELFF_CFLAGS) \ ## one for 32-bit $(call start-emulator-library, emulator-libelff) LOCAL_CPP_EXTENSION := .cc LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call end-emulator-library) ## another for 64-bit, see note in emulator64-common ifneq ($(filter linux darwin,$(HOST_OS)),) ifneq ($(BUILD_STANDALONE_EMULATOR),true) $(call start-emulator-library, emulator64-libelff) LOCAL_CPP_EXTENSION := .cc LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64 LOCAL_SRC_FILES += $(common_LOCAL_SRC_FILES) $(call end-emulator-library) endif # BUILD_STANDALONE_EMULATOR == nil endif # HOST_OS == linux || darwin ############################################################################## ############################################################################## ### ### gen-hx-header: Generate headers from .hx file with "hxtool" script. ### ### The 'hxtool' script is used to generate header files from an input ### file with the .hx suffix. I.e. foo.hx --> foo.h ### ### Due to the way the Android build system works, we need to regenerate ### it for each module (the output will go into a module-specific directory). ### ### This defines a function that can be used inside a module definition ### ### $(call gen-hx-header,<input>,<output>,<source-files>) ### ### Where: <input> is the input file, with a .hx suffix (e.g. foo.hx) ### <output> is the output file, with a .h or .def suffix ### <source-files> is a list of source files that include the header ### gen-hx-header = $(eval $(call gen-hx-header-ev,$1,$2,$3)) define gen-hx-header-ev intermediates := $$(call intermediates-dir-for,$$(LOCAL_MODULE_CLASS),$$(LOCAL_MODULE),true) QEMU_HEADER_H := $$(intermediates)/$$2 $$(QEMU_HEADER_H): PRIVATE_PATH := $$(LOCAL_PATH) $$(QEMU_HEADER_H): PRIVATE_CUSTOM_TOOL = $$(PRIVATE_PATH)/hxtool -h < $$< > $$@ $$(QEMU_HEADER_H): $$(LOCAL_PATH)/$$1 $$(LOCAL_PATH)/hxtool $$(transform-generated-source) LOCAL_GENERATED_SOURCES += $$(QEMU_HEADER_H) LOCAL_C_INCLUDES += $$(intermediates) endef