Loading core/base_rules.mk +0 −9 Original line number Diff line number Diff line Loading @@ -535,15 +535,6 @@ $(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) $(copy-file-to-target-with-cp) endif ifdef LOCAL_DEX_PREOPT installed_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex $(installed_odex) : $(built_odex) $(LOCAL_BUILT_MODULE) | $(ACP) @echo "Install: $@" $(copy-file-to-target) $(LOCAL_INSTALLED_MODULE) : $(installed_odex) endif endif # !LOCAL_UNINSTALLABLE_MODULE Loading core/clear_vars.mk +1 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ LOCAL_RENDERSCRIPT_SKIP_INSTALL:= LOCAL_RENDERSCRIPT_TARGET_API:= LOCAL_BUILD_HOST_DEX:= LOCAL_DEX_PREOPT:= # '',true,false,nostripping LOCAL_DEX_PREOPT_IMAGE:= LOCAL_PROTOC_OPTIMIZE_TYPE:= # lite(default),micro,nano,full LOCAL_PROTOC_FLAGS:= LOCAL_PROTO_JAVA_OUTPUT_PARAMS:= Loading core/config.mk +0 −2 Original line number Diff line number Diff line Loading @@ -364,8 +364,6 @@ PROGUARD := external/proguard/bin/proguard.sh JAVATAGS := build/tools/java-event-log-tags.py LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc$(HOST_EXECUTABLE_SUFFIX) BCC_COMPAT := $(HOST_OUT_EXECUTABLES)/bcc_compat$(HOST_EXECUTABLE_SUFFIX) DEXOPT := $(HOST_OUT_EXECUTABLES)/dexopt$(HOST_EXECUTABLE_SUFFIX) DEXPREOPT := dalvik/tools/dex-preopt LINT := prebuilts/sdk/tools/lint # ACP is always for the build OS, not for the host OS Loading core/dex_preopt.mk +40 −57 Original line number Diff line number Diff line #################################### # Dexpreopt on the boot jars # dexpreopt support - typically used on user builds to run dexopt (for Dalvik) or dex2oat (for ART) ahead of time # #################################### ifeq ($(DALVIK_VM_LIB),) $(error No value for DALVIK_VM_LIB) endif # list of boot classpath jars for dexpreopt DEXPREOPT_BOOT_JARS := $(PRODUCT_BOOT_JARS) DEXPREOPT_BOOT_JARS_MODULES := $(subst :, ,$(DEXPREOPT_BOOT_JARS)) PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(foreach m,$(DEXPREOPT_BOOT_JARS_MODULES),/system/framework/$(m).jar)) DEXPREOPT_BUILD_DIR := $(OUT_DIR) DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(PRODUCT_OUT))/dex_bootjars DEXPREOPT_PRODUCT_DIR_FULL_PATH := $(PRODUCT_OUT)/dex_bootjars DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXPREOPT_PRODUCT_DIR_FULL_PATH)) DEXPREOPT_BOOT_JAR_DIR := system/framework DEXPREOPT_DEXOPT := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXOPT)) DEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_BUILD_DIR)/$(DEXPREOPT_PRODUCT_DIR)/$(DEXPREOPT_BOOT_JAR_DIR) DEXPREOPT_BOOT_ODEXS := $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),\ $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(b).odex) # If the target is a uniprocessor, then explicitly tell the preoptimizer # that fact. (By default, it always optimizes for an SMP target.) ifeq ($(TARGET_CPU_SMP),true) DEXPREOPT_UNIPROCESSOR := else DEXPREOPT_UNIPROCESSOR := --uniprocessor endif DEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_PRODUCT_DIR_FULL_PATH)/$(DEXPREOPT_BOOT_JAR_DIR) # $(1): the .jar or .apk to remove classes.dex define dexpreopt-remove-classes.dex $(hide) $(AAPT) remove $(1) classes.dex endef # $(1): the input .jar or .apk file # $(2): the output .odex file define dexpreopt-one-file $(hide) $(DEXPREOPT) --dexopt=$(DEXPREOPT_DEXOPT) --build-dir=$(DEXPREOPT_BUILD_DIR) \ --product-dir=$(DEXPREOPT_PRODUCT_DIR) --boot-dir=$(DEXPREOPT_BOOT_JAR_DIR) \ --boot-jars=$(DEXPREOPT_BOOT_JARS) $(DEXPREOPT_UNIPROCESSOR) \ $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(1)) \ $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(2)) endef # Special rules for building stripped boot jars that override java_library.mk rules # $(1): boot jar module name define _dexpreopt-boot-jar $(eval _dbj_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).jar) $(eval _dbj_odex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).odex) $(eval _dbj_jar_no_dex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1)_nodex.jar) $(eval _dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar) $(eval $(_dbj_odex): PRIVATE_DBJ_JAR := $(_dbj_jar)) $(_dbj_odex) : $(_dbj_src_jar) | $(ACP) $(DEXPREOPT) $(DEXOPT) @echo "Dexpreopt Boot Jar: $$@" $(hide) rm -f $$@ $(hide) mkdir -p $$(dir $$@) $(hide) $(ACP) -fp $$< $$(PRIVATE_DBJ_JAR) $$(call dexpreopt-one-file,$$(PRIVATE_DBJ_JAR),$$@) define _dexpreopt-boot-jar-remove-classes.dex _dbj_jar_no_dex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1)_nodex.jar _dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar $(_dbj_jar_no_dex) : $(_dbj_src_jar) | $(ACP) $(AAPT) $$(_dbj_jar_no_dex) : $$(_dbj_src_jar) | $(ACP) $(AAPT) $$(call copy-file-to-target) ifneq ($(DEX_PREOPT_DEFAULT),nostripping) $$(call dexpreopt-remove-classes.dex,$$@) endif $(eval _dbj_jar :=) $(eval _dbj_odex :=) $(eval _dbj_jar_no_dex :=) $(eval _dbj_src_jar :=) _dbj_jar_no_dex := _dbj_src_jar := endef $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-jar,$(b)))) $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-jar-remove-classes.dex,$(b)))) # $(1): the rest list of boot jars define _build-dexpreopt-boot-jar-dependency-pair $(if $(filter 1,$(words $(1)))$(filter 0,$(words $(1))),,\ $(eval _bdbjdp_target := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 2,$(1)).odex) \ $(eval _bdbjdp_dep := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 1,$(1)).odex) \ $(eval $(call add-dependency,$(_bdbjdp_target),$(_bdbjdp_dep))) \ $(eval $(call _build-dexpreopt-boot-jar-dependency-pair,$(wordlist 2,999,$(1))))) endef # Conditionally include Dalvik support. ifeq ($(DALVIK_VM_LIB),libdvm.so) include $(BUILD_SYSTEM)/dex_preopt_libdvm.mk endif # Unconditionally include ART support because its used run dex2oat on the host for tests. include $(BUILD_SYSTEM)/dex_preopt_libart.mk define _build-dexpreopt-boot-jar-dependency $(call _build-dexpreopt-boot-jar-dependency-pair,$(DEXPREOPT_BOOT_JARS_MODULES)) # Define dexpreopt-one-file based on current default runtime. # $(1): the boot image to use (unused for libdvm) # $(2): the input .jar or .apk file # $(3): the input .jar or .apk target location (unused for libdvm) # $(4): the output .odex file ifeq ($(DALVIK_VM_LIB),libdvm.so) define dexpreopt-one-file $(call dexopt-one-file,$(2),$(4)) endef $(eval $(call _build-dexpreopt-boot-jar-dependency)) DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS := $(DEXOPT_DEPENDENCY) DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT := $(DEXPREOPT_BOOT_ODEXS) else define dexpreopt-one-file $(call dex2oat-one-file,$(1),$(2),$(3),$(4)) endef DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait)) DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := div DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS := $(DEX2OAT_DEPENDENCY) DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT := $(DEFAULT_DEX_PREOPT_BUILT_IMAGE) endif core/dex_preopt_libart.mk 0 → 100644 +96 −0 Original line number Diff line number Diff line #################################### # dexpreopt support for ART # #################################### DEX2OAT := $(HOST_OUT_EXECUTABLES)/dex2oat$(HOST_EXECUTABLE_SUFFIX) DEX2OATD := $(HOST_OUT_EXECUTABLES)/dex2oatd$(HOST_EXECUTABLE_SUFFIX) LIBART_COMPILER := $(HOST_OUT_SHARED_LIBRARIES)/libart-compiler$(HOST_SHLIB_SUFFIX) LIBARTD_COMPILER := $(HOST_OUT_SHARED_LIBRARIES)/libartd-compiler$(HOST_SHLIB_SUFFIX) # TODO: for now, override with debug version for better error reporting DEX2OAT := $(DEX2OATD) LIBART_COMPILER := $(LIBARTD_COMPILER) # By default, do not run rerun dex2oat if the tool changes. # Comment out the | to force dex2oat to rerun on after all changes. DEX2OAT_DEPENDENCY := art/runtime/oat.cc # dependency on oat version number DEX2OAT_DEPENDENCY += art/runtime/image.cc # dependency on image version number DEX2OAT_DEPENDENCY += | DEX2OAT_DEPENDENCY += $(DEX2OAT) DEX2OAT_DEPENDENCY += $(LIBART_COMPILER) PRELOADED_CLASSES := frameworks/base/preloaded-classes LIBART_BOOT_IMAGE := /$(DEXPREOPT_BOOT_JAR_DIR)/boot.art DEFAULT_DEX_PREOPT_BUILT_IMAGE := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/boot.art DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(PRODUCT_OUT)$(LIBART_BOOT_IMAGE) # The rule to install boot.art and boot.oat $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) : $(DEFAULT_DEX_PREOPT_BUILT_IMAGE) | $(ACP) $(call copy-file-to-target) $(hide) $(ACP) -fp $(patsubst %.art,%.oat,$<) $(patsubst %.art,%.oat,$@) DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait)) DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := div endif # start of image reserved address space LIBART_IMG_HOST_BASE_ADDRESS := 0x60000000 ifeq ($(TARGET_ARCH),mips) LIBART_IMG_TARGET_BASE_ADDRESS := 0x30000000 else LIBART_IMG_TARGET_BASE_ADDRESS := 0x60000000 endif ######################################################################## # The full system boot classpath # note we use core-libart.jar in place of core.jar for ART. LIBART_TARGET_BOOT_JARS := $(patsubst core, core-libart,$(DEXPREOPT_BOOT_JARS_MODULES)) LIBART_TARGET_BOOT_DEX_LOCATIONS := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),/$(DEXPREOPT_BOOT_JAR_DIR)/$(jar).jar) LIBART_TARGET_BOOT_DEX_FILES := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),$(call intermediates-dir-for,JAVA_LIBRARIES,$(jar),,COMMON)/javalib.jar) # The .oat with symbols LIBART_TARGET_BOOT_OAT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)$(patsubst %.art,%.oat,$(LIBART_BOOT_IMAGE)) $(DEFAULT_DEX_PREOPT_BUILT_IMAGE): $(LIBART_TARGET_BOOT_DEX_FILES) $(DEX2OAT_DEPENDENCY) @echo "target dex2oat: $@ ($?)" @mkdir -p $(dir $@) @mkdir -p $(dir $(LIBART_TARGET_BOOT_OAT_UNSTRIPPED)) $(hide) $(DEX2OAT) --runtime-arg -Xms256m --runtime-arg -Xmx256m --image-classes=$(PRELOADED_CLASSES) \ $(addprefix --dex-file=,$(LIBART_TARGET_BOOT_DEX_FILES)) \ $(addprefix --dex-location=,$(LIBART_TARGET_BOOT_DEX_LOCATIONS)) \ --oat-symbols=$(LIBART_TARGET_BOOT_OAT_UNSTRIPPED) \ --oat-file=$(patsubst %.art,%.oat,$@) \ --oat-location=$(patsubst %.art,%.oat,$(LIBART_BOOT_IMAGE)) \ --image=$@ --base=$(LIBART_IMG_TARGET_BASE_ADDRESS) \ --instruction-set=$(TARGET_ARCH) --instruction-set-features=$(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) \ --host-prefix=$(DEXPREOPT_PRODUCT_DIR_FULL_PATH) --android-root=$(PRODUCT_OUT)/system ######################################################################## # For a single jar or APK # $(1): the boot image to use # $(2): the input .jar or .apk file # $(3): the input .jar or .apk target location # $(4): the output .odex file define dex2oat-one-file $(hide) rm -f $(4) $(hide) mkdir -p $(dir $(4)) $(hide) $(DEX2OAT) \ --runtime-arg -Xms64m --runtime-arg -Xmx64m \ --boot-image=$(1) \ --dex-file=$(2) \ --dex-location=$(3) \ --oat-file=$(4) \ --host-prefix=$(DEXPREOPT_PRODUCT_DIR_FULL_PATH) \ --android-root=$(PRODUCT_OUT)/system \ --instruction-set=$(TARGET_ARCH) \ --instruction-set-features=$(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) endef Loading
core/base_rules.mk +0 −9 Original line number Diff line number Diff line Loading @@ -535,15 +535,6 @@ $(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) $(copy-file-to-target-with-cp) endif ifdef LOCAL_DEX_PREOPT installed_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex $(installed_odex) : $(built_odex) $(LOCAL_BUILT_MODULE) | $(ACP) @echo "Install: $@" $(copy-file-to-target) $(LOCAL_INSTALLED_MODULE) : $(installed_odex) endif endif # !LOCAL_UNINSTALLABLE_MODULE Loading
core/clear_vars.mk +1 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ LOCAL_RENDERSCRIPT_SKIP_INSTALL:= LOCAL_RENDERSCRIPT_TARGET_API:= LOCAL_BUILD_HOST_DEX:= LOCAL_DEX_PREOPT:= # '',true,false,nostripping LOCAL_DEX_PREOPT_IMAGE:= LOCAL_PROTOC_OPTIMIZE_TYPE:= # lite(default),micro,nano,full LOCAL_PROTOC_FLAGS:= LOCAL_PROTO_JAVA_OUTPUT_PARAMS:= Loading
core/config.mk +0 −2 Original line number Diff line number Diff line Loading @@ -364,8 +364,6 @@ PROGUARD := external/proguard/bin/proguard.sh JAVATAGS := build/tools/java-event-log-tags.py LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc$(HOST_EXECUTABLE_SUFFIX) BCC_COMPAT := $(HOST_OUT_EXECUTABLES)/bcc_compat$(HOST_EXECUTABLE_SUFFIX) DEXOPT := $(HOST_OUT_EXECUTABLES)/dexopt$(HOST_EXECUTABLE_SUFFIX) DEXPREOPT := dalvik/tools/dex-preopt LINT := prebuilts/sdk/tools/lint # ACP is always for the build OS, not for the host OS Loading
core/dex_preopt.mk +40 −57 Original line number Diff line number Diff line #################################### # Dexpreopt on the boot jars # dexpreopt support - typically used on user builds to run dexopt (for Dalvik) or dex2oat (for ART) ahead of time # #################################### ifeq ($(DALVIK_VM_LIB),) $(error No value for DALVIK_VM_LIB) endif # list of boot classpath jars for dexpreopt DEXPREOPT_BOOT_JARS := $(PRODUCT_BOOT_JARS) DEXPREOPT_BOOT_JARS_MODULES := $(subst :, ,$(DEXPREOPT_BOOT_JARS)) PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(foreach m,$(DEXPREOPT_BOOT_JARS_MODULES),/system/framework/$(m).jar)) DEXPREOPT_BUILD_DIR := $(OUT_DIR) DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(PRODUCT_OUT))/dex_bootjars DEXPREOPT_PRODUCT_DIR_FULL_PATH := $(PRODUCT_OUT)/dex_bootjars DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXPREOPT_PRODUCT_DIR_FULL_PATH)) DEXPREOPT_BOOT_JAR_DIR := system/framework DEXPREOPT_DEXOPT := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXOPT)) DEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_BUILD_DIR)/$(DEXPREOPT_PRODUCT_DIR)/$(DEXPREOPT_BOOT_JAR_DIR) DEXPREOPT_BOOT_ODEXS := $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),\ $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(b).odex) # If the target is a uniprocessor, then explicitly tell the preoptimizer # that fact. (By default, it always optimizes for an SMP target.) ifeq ($(TARGET_CPU_SMP),true) DEXPREOPT_UNIPROCESSOR := else DEXPREOPT_UNIPROCESSOR := --uniprocessor endif DEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_PRODUCT_DIR_FULL_PATH)/$(DEXPREOPT_BOOT_JAR_DIR) # $(1): the .jar or .apk to remove classes.dex define dexpreopt-remove-classes.dex $(hide) $(AAPT) remove $(1) classes.dex endef # $(1): the input .jar or .apk file # $(2): the output .odex file define dexpreopt-one-file $(hide) $(DEXPREOPT) --dexopt=$(DEXPREOPT_DEXOPT) --build-dir=$(DEXPREOPT_BUILD_DIR) \ --product-dir=$(DEXPREOPT_PRODUCT_DIR) --boot-dir=$(DEXPREOPT_BOOT_JAR_DIR) \ --boot-jars=$(DEXPREOPT_BOOT_JARS) $(DEXPREOPT_UNIPROCESSOR) \ $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(1)) \ $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(2)) endef # Special rules for building stripped boot jars that override java_library.mk rules # $(1): boot jar module name define _dexpreopt-boot-jar $(eval _dbj_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).jar) $(eval _dbj_odex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).odex) $(eval _dbj_jar_no_dex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1)_nodex.jar) $(eval _dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar) $(eval $(_dbj_odex): PRIVATE_DBJ_JAR := $(_dbj_jar)) $(_dbj_odex) : $(_dbj_src_jar) | $(ACP) $(DEXPREOPT) $(DEXOPT) @echo "Dexpreopt Boot Jar: $$@" $(hide) rm -f $$@ $(hide) mkdir -p $$(dir $$@) $(hide) $(ACP) -fp $$< $$(PRIVATE_DBJ_JAR) $$(call dexpreopt-one-file,$$(PRIVATE_DBJ_JAR),$$@) define _dexpreopt-boot-jar-remove-classes.dex _dbj_jar_no_dex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1)_nodex.jar _dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar $(_dbj_jar_no_dex) : $(_dbj_src_jar) | $(ACP) $(AAPT) $$(_dbj_jar_no_dex) : $$(_dbj_src_jar) | $(ACP) $(AAPT) $$(call copy-file-to-target) ifneq ($(DEX_PREOPT_DEFAULT),nostripping) $$(call dexpreopt-remove-classes.dex,$$@) endif $(eval _dbj_jar :=) $(eval _dbj_odex :=) $(eval _dbj_jar_no_dex :=) $(eval _dbj_src_jar :=) _dbj_jar_no_dex := _dbj_src_jar := endef $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-jar,$(b)))) $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-jar-remove-classes.dex,$(b)))) # $(1): the rest list of boot jars define _build-dexpreopt-boot-jar-dependency-pair $(if $(filter 1,$(words $(1)))$(filter 0,$(words $(1))),,\ $(eval _bdbjdp_target := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 2,$(1)).odex) \ $(eval _bdbjdp_dep := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 1,$(1)).odex) \ $(eval $(call add-dependency,$(_bdbjdp_target),$(_bdbjdp_dep))) \ $(eval $(call _build-dexpreopt-boot-jar-dependency-pair,$(wordlist 2,999,$(1))))) endef # Conditionally include Dalvik support. ifeq ($(DALVIK_VM_LIB),libdvm.so) include $(BUILD_SYSTEM)/dex_preopt_libdvm.mk endif # Unconditionally include ART support because its used run dex2oat on the host for tests. include $(BUILD_SYSTEM)/dex_preopt_libart.mk define _build-dexpreopt-boot-jar-dependency $(call _build-dexpreopt-boot-jar-dependency-pair,$(DEXPREOPT_BOOT_JARS_MODULES)) # Define dexpreopt-one-file based on current default runtime. # $(1): the boot image to use (unused for libdvm) # $(2): the input .jar or .apk file # $(3): the input .jar or .apk target location (unused for libdvm) # $(4): the output .odex file ifeq ($(DALVIK_VM_LIB),libdvm.so) define dexpreopt-one-file $(call dexopt-one-file,$(2),$(4)) endef $(eval $(call _build-dexpreopt-boot-jar-dependency)) DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS := $(DEXOPT_DEPENDENCY) DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT := $(DEXPREOPT_BOOT_ODEXS) else define dexpreopt-one-file $(call dex2oat-one-file,$(1),$(2),$(3),$(4)) endef DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait)) DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := div DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS := $(DEX2OAT_DEPENDENCY) DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT := $(DEFAULT_DEX_PREOPT_BUILT_IMAGE) endif
core/dex_preopt_libart.mk 0 → 100644 +96 −0 Original line number Diff line number Diff line #################################### # dexpreopt support for ART # #################################### DEX2OAT := $(HOST_OUT_EXECUTABLES)/dex2oat$(HOST_EXECUTABLE_SUFFIX) DEX2OATD := $(HOST_OUT_EXECUTABLES)/dex2oatd$(HOST_EXECUTABLE_SUFFIX) LIBART_COMPILER := $(HOST_OUT_SHARED_LIBRARIES)/libart-compiler$(HOST_SHLIB_SUFFIX) LIBARTD_COMPILER := $(HOST_OUT_SHARED_LIBRARIES)/libartd-compiler$(HOST_SHLIB_SUFFIX) # TODO: for now, override with debug version for better error reporting DEX2OAT := $(DEX2OATD) LIBART_COMPILER := $(LIBARTD_COMPILER) # By default, do not run rerun dex2oat if the tool changes. # Comment out the | to force dex2oat to rerun on after all changes. DEX2OAT_DEPENDENCY := art/runtime/oat.cc # dependency on oat version number DEX2OAT_DEPENDENCY += art/runtime/image.cc # dependency on image version number DEX2OAT_DEPENDENCY += | DEX2OAT_DEPENDENCY += $(DEX2OAT) DEX2OAT_DEPENDENCY += $(LIBART_COMPILER) PRELOADED_CLASSES := frameworks/base/preloaded-classes LIBART_BOOT_IMAGE := /$(DEXPREOPT_BOOT_JAR_DIR)/boot.art DEFAULT_DEX_PREOPT_BUILT_IMAGE := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/boot.art DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(PRODUCT_OUT)$(LIBART_BOOT_IMAGE) # The rule to install boot.art and boot.oat $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) : $(DEFAULT_DEX_PREOPT_BUILT_IMAGE) | $(ACP) $(call copy-file-to-target) $(hide) $(ACP) -fp $(patsubst %.art,%.oat,$<) $(patsubst %.art,%.oat,$@) DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait)) DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := div endif # start of image reserved address space LIBART_IMG_HOST_BASE_ADDRESS := 0x60000000 ifeq ($(TARGET_ARCH),mips) LIBART_IMG_TARGET_BASE_ADDRESS := 0x30000000 else LIBART_IMG_TARGET_BASE_ADDRESS := 0x60000000 endif ######################################################################## # The full system boot classpath # note we use core-libart.jar in place of core.jar for ART. LIBART_TARGET_BOOT_JARS := $(patsubst core, core-libart,$(DEXPREOPT_BOOT_JARS_MODULES)) LIBART_TARGET_BOOT_DEX_LOCATIONS := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),/$(DEXPREOPT_BOOT_JAR_DIR)/$(jar).jar) LIBART_TARGET_BOOT_DEX_FILES := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),$(call intermediates-dir-for,JAVA_LIBRARIES,$(jar),,COMMON)/javalib.jar) # The .oat with symbols LIBART_TARGET_BOOT_OAT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)$(patsubst %.art,%.oat,$(LIBART_BOOT_IMAGE)) $(DEFAULT_DEX_PREOPT_BUILT_IMAGE): $(LIBART_TARGET_BOOT_DEX_FILES) $(DEX2OAT_DEPENDENCY) @echo "target dex2oat: $@ ($?)" @mkdir -p $(dir $@) @mkdir -p $(dir $(LIBART_TARGET_BOOT_OAT_UNSTRIPPED)) $(hide) $(DEX2OAT) --runtime-arg -Xms256m --runtime-arg -Xmx256m --image-classes=$(PRELOADED_CLASSES) \ $(addprefix --dex-file=,$(LIBART_TARGET_BOOT_DEX_FILES)) \ $(addprefix --dex-location=,$(LIBART_TARGET_BOOT_DEX_LOCATIONS)) \ --oat-symbols=$(LIBART_TARGET_BOOT_OAT_UNSTRIPPED) \ --oat-file=$(patsubst %.art,%.oat,$@) \ --oat-location=$(patsubst %.art,%.oat,$(LIBART_BOOT_IMAGE)) \ --image=$@ --base=$(LIBART_IMG_TARGET_BASE_ADDRESS) \ --instruction-set=$(TARGET_ARCH) --instruction-set-features=$(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) \ --host-prefix=$(DEXPREOPT_PRODUCT_DIR_FULL_PATH) --android-root=$(PRODUCT_OUT)/system ######################################################################## # For a single jar or APK # $(1): the boot image to use # $(2): the input .jar or .apk file # $(3): the input .jar or .apk target location # $(4): the output .odex file define dex2oat-one-file $(hide) rm -f $(4) $(hide) mkdir -p $(dir $(4)) $(hide) $(DEX2OAT) \ --runtime-arg -Xms64m --runtime-arg -Xmx64m \ --boot-image=$(1) \ --dex-file=$(2) \ --dex-location=$(3) \ --oat-file=$(4) \ --host-prefix=$(DEXPREOPT_PRODUCT_DIR_FULL_PATH) \ --android-root=$(PRODUCT_OUT)/system \ --instruction-set=$(TARGET_ARCH) \ --instruction-set-features=$(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) endef