OSDN Git Service

[DO NOT MERGE] Updating Security String to 2017-03-05 on klp-dev b/34345751 am: 3597d...
[android-x86/build.git] / core / dex_preopt.mk
index e2e76b8..8a19b66 100644 (file)
@@ -1,84 +1,81 @@
 ####################################
-# Dexpreopt on the boot jars
+# dexpreopt support - typically used on user builds to run dexopt (for Dalvik) or dex2oat (for ART) ahead of time
 #
 ####################################
 
-DEXPREOPT_BOOT_JARS := $(PRODUCT_BOOT_JARS)
-DEXPREOPT_BOOT_JARS_MODULES := $(subst :, ,$(DEXPREOPT_BOOT_JARS))
+ifneq ($(DALVIK_VM_LIB),)
+
+# list of boot classpath jars for dexpreopt
+DEXPREOPT_BOOT_JARS := $(subst $(space),:,$(PRODUCT_BOOT_JARS))
+DEXPREOPT_BOOT_JARS_MODULES := $(PRODUCT_BOOT_JARS)
 PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(foreach m,$(DEXPREOPT_BOOT_JARS_MODULES),/system/framework/$(m).jar))
 
+PRODUCT_SYSTEM_SERVER_CLASSPATH := $(subst $(space),:,$(foreach m,$(PRODUCT_SYSTEM_SERVER_JARS),/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
+$(hide) zip --quiet --delete $(1) classes.dex; \
+dex_index=2; \
+while zip --quiet --delete $(1) classes$${dex_index}.dex > /dev/null; do \
+  let dex_index=dex_index+1; \
+done
 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))))
+
+# Conditionally include Dalvik support.
+ifeq ($(DALVIK_VM_LIB),libdvm.so)
+include $(BUILD_SYSTEM)/dex_preopt_libdvm.mk
+endif
 
-# $(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)))))
+# Unconditionally include ART support because its used run dex2oat on the host for tests.
+include $(BUILD_SYSTEM)/dex_preopt_libart.mk
+
+# Define dexpreopt-one-file based on current default runtime.
+# $(1): the input .jar or .apk file
+# $(2): the output .odex file
+ifeq ($(DALVIK_VM_LIB),libdvm.so)
+define dexpreopt-one-file
+$(call dexopt-one-file,$(1),$(2))
 endef
 
-define _build-dexpreopt-boot-jar-dependency
-$(call _build-dexpreopt-boot-jar-dependency-pair,$(DEXPREOPT_BOOT_JARS_MODULES))
+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))
 endef
 
-$(eval $(call _build-dexpreopt-boot-jar-dependency))
+DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS := $(DEX2OATD_DEPENDENCY)
+DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT := $(DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME)
+ifdef TARGET_2ND_ARCH
+$(TARGET_2ND_ARCH_VAR_PREFIX)DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT := $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME)
+endif  # TARGET_2ND_ARCH
+endif  # DALVIK_VM_LIB
+else
+$(warning No DALVIK_VM_LIB, disable dexpreopt.)
+WITH_DEXPREOPT := false
+endif  # DALVIK_VM_LIB is defined.