dex_preopt.mk revision 014a3c0d6268c5e167a8fad39c8d24b962101d0a
1#################################### 2# Dexpreopt on the boot jars 3# 4#################################### 5 6DEXPREOPT_BOOT_JARS := $(PRODUCT_BOOT_JARS) 7DEXPREOPT_BOOT_JARS_MODULES := $(subst :, ,$(DEXPREOPT_BOOT_JARS)) 8PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(foreach m,$(DEXPREOPT_BOOT_JARS_MODULES),/system/framework/$(m).jar)) 9 10DEXPREOPT_BUILD_DIR := $(OUT_DIR) 11DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(PRODUCT_OUT))/dex_bootjars 12DEXPREOPT_BOOT_JAR_DIR := system/framework 13DEXPREOPT_DEXOPT := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXOPT)) 14 15DEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_BUILD_DIR)/$(DEXPREOPT_PRODUCT_DIR)/$(DEXPREOPT_BOOT_JAR_DIR) 16 17DEXPREOPT_BOOT_ODEXS := $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),\ 18 $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(b).odex) 19 20# If the target is a uniprocessor, then explicitly tell the preoptimizer 21# that fact. (By default, it always optimizes for an SMP target.) 22ifeq ($(TARGET_CPU_SMP),true) 23DEXPREOPT_UNIPROCESSOR := 24else 25DEXPREOPT_UNIPROCESSOR := --uniprocessor 26endif 27 28# $(1): the .jar or .apk to remove classes.dex 29define dexpreopt-remove-classes.dex 30$(hide) $(AAPT) remove $(1) classes.dex 31endef 32 33# $(1): the input .jar or .apk file 34# $(2): the output .odex file 35define dexpreopt-one-file 36$(hide) $(DEXPREOPT) --dexopt=$(DEXPREOPT_DEXOPT) --build-dir=$(DEXPREOPT_BUILD_DIR) \ 37 --product-dir=$(DEXPREOPT_PRODUCT_DIR) --boot-dir=$(DEXPREOPT_BOOT_JAR_DIR) \ 38 --boot-jars=$(DEXPREOPT_BOOT_JARS) $(DEXPREOPT_UNIPROCESSOR) \ 39 $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(1)) \ 40 $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(2)) 41endef 42 43# $(1): boot jar module name 44define _dexpreopt-boot-jar 45$(eval _dbj_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).jar) 46$(eval _dbj_odex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).odex) 47$(eval _dbj_jar_no_dex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1)_nodex.jar) 48$(eval _dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar) 49$(eval $(_dbj_odex): PRIVATE_DBJ_JAR := $(_dbj_jar)) 50$(_dbj_odex) : $(_dbj_src_jar) | $(ACP) $(DEXPREOPT) $(DEXOPT) 51 @echo "Dexpreopt Boot Jar: $$@" 52 $(hide) rm -f $$@ 53 $(hide) mkdir -p $$(dir $$@) 54 $(hide) $(ACP) -fp $$< $$(PRIVATE_DBJ_JAR) 55 $$(call dexpreopt-one-file,$$(PRIVATE_DBJ_JAR),$$@) 56 57$(_dbj_jar_no_dex) : $(_dbj_src_jar) | $(ACP) $(AAPT) 58 $$(call copy-file-to-target) 59ifneq ($(DEX_PREOPT_DEFAULT),nostripping) 60 $$(call dexpreopt-remove-classes.dex,$$@) 61endif 62 63$(eval _dbj_jar :=) 64$(eval _dbj_odex :=) 65$(eval _dbj_jar_no_dex :=) 66$(eval _dbj_src_jar :=) 67endef 68 69$(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-jar,$(b)))) 70 71# $(1): the rest list of boot jars 72define _build-dexpreopt-boot-jar-dependency-pair 73$(if $(filter 1,$(words $(1)))$(filter 0,$(words $(1))),,\ 74 $(eval _bdbjdp_target := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 2,$(1)).odex) \ 75 $(eval _bdbjdp_dep := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 1,$(1)).odex) \ 76 $(eval $(call add-dependency,$(_bdbjdp_target),$(_bdbjdp_dep))) \ 77 $(eval $(call _build-dexpreopt-boot-jar-dependency-pair,$(wordlist 2,999,$(1))))) 78endef 79 80define _build-dexpreopt-boot-jar-dependency 81$(call _build-dexpreopt-boot-jar-dependency-pair,$(DEXPREOPT_BOOT_JARS_MODULES)) 82endef 83 84$(eval $(call _build-dexpreopt-boot-jar-dependency)) 85 86DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default 87ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait)) 88DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := div 89endif 90