1e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang####################################
2e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang# Dexpreopt on the boot jars
3e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang#
4e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang####################################
5e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
6e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang# TODO: replace it with device's BOOTCLASSPATH
7c16c945497852629294f9207d317886f8af3a375Wink SavilleDEXPREOPT_BOOT_JARS := core:core-junit:bouncycastle:ext:framework:telephony-common:mms-common:android.policy:services:apache-xml
8e7874c430895b9a4e631c89f1e7729da9264d167Ying WangDEXPREOPT_BOOT_JARS_MODULES := $(subst :, ,$(DEXPREOPT_BOOT_JARS))
9e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
10e7874c430895b9a4e631c89f1e7729da9264d167Ying WangDEXPREOPT_BUILD_DIR := $(OUT_DIR)
11e7874c430895b9a4e631c89f1e7729da9264d167Ying WangDEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(PRODUCT_OUT))/dex_bootjars
12e7874c430895b9a4e631c89f1e7729da9264d167Ying WangDEXPREOPT_BOOT_JAR_DIR := system/framework
13e7874c430895b9a4e631c89f1e7729da9264d167Ying WangDEXPREOPT_DEXOPT := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXOPT))
14e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
15e7874c430895b9a4e631c89f1e7729da9264d167Ying WangDEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_BUILD_DIR)/$(DEXPREOPT_PRODUCT_DIR)/$(DEXPREOPT_BOOT_JAR_DIR)
16e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
17e7874c430895b9a4e631c89f1e7729da9264d167Ying WangDEXPREOPT_BOOT_ODEXS := $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),\
18e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang    $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(b).odex)
19e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
20c8c09e285d59f73334267deb9502c0927c616837Dan Bornstein# If the target is a uniprocessor, then explicitly tell the preoptimizer
21c8c09e285d59f73334267deb9502c0927c616837Dan Bornstein# that fact. (By default, it always optimizes for an SMP target.)
22c8c09e285d59f73334267deb9502c0927c616837Dan Bornsteinifeq ($(TARGET_CPU_SMP),true)
23c8c09e285d59f73334267deb9502c0927c616837Dan BornsteinDEXPREOPT_UNIPROCESSOR :=
24c8c09e285d59f73334267deb9502c0927c616837Dan Bornsteinelse
25c8c09e285d59f73334267deb9502c0927c616837Dan BornsteinDEXPREOPT_UNIPROCESSOR := --uniprocessor
26c8c09e285d59f73334267deb9502c0927c616837Dan Bornsteinendif
27c8c09e285d59f73334267deb9502c0927c616837Dan Bornstein
28e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang# $(1): the .jar or .apk to remove classes.dex
29e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangdefine dexpreopt-remove-classes.dex
30e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(hide) $(AAPT) remove $(1) classes.dex
31e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangendef
32e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
33e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang# $(1): the input .jar or .apk file
34e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang# $(2): the output .odex file
35e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangdefine dexpreopt-one-file
36e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(hide) $(DEXPREOPT) --dexopt=$(DEXPREOPT_DEXOPT) --build-dir=$(DEXPREOPT_BUILD_DIR) \
37e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	--product-dir=$(DEXPREOPT_PRODUCT_DIR) --boot-dir=$(DEXPREOPT_BOOT_JAR_DIR) \
38c8c09e285d59f73334267deb9502c0927c616837Dan Bornstein	--boot-jars=$(DEXPREOPT_BOOT_JARS) $(DEXPREOPT_UNIPROCESSOR) \
39e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(1)) \
40e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(2))
41e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangendef
42e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
43e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang# $(1): boot jar module name
44e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangdefine _dexpreopt-boot-jar
45e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval _dbj_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).jar)
46e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval _dbj_odex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).odex)
47e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval _dbj_jar_no_dex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1)_nodex.jar)
48a83940fa7851b35712e559be2246b56b5666b805Ying Wang$(eval _dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar)
49e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval $(_dbj_odex): PRIVATE_DBJ_JAR := $(_dbj_jar))
50e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(_dbj_odex) : $(_dbj_src_jar) | $(ACP) $(DEXPREOPT) $(DEXOPT)
51e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	@echo "Dexpreopt Boot Jar: $$@"
52e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(hide) rm -f $$@
53e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(hide) mkdir -p $$(dir $$@)
5484ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang	$(hide) $(ACP) -fp $$< $$(PRIVATE_DBJ_JAR)
55e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$$(call dexpreopt-one-file,$$(PRIVATE_DBJ_JAR),$$@)
56e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
57e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(_dbj_jar_no_dex) : $(_dbj_src_jar) | $(ACP) $(AAPT)
58e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$$(call copy-file-to-target)
59e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$$(call dexpreopt-remove-classes.dex,$$@)
60e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
61e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval _dbj_jar :=)
62e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval _dbj_odex :=)
6384ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang$(eval _dbj_jar_no_dex :=)
64e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval _dbj_src_jar :=)
65e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangendef
66e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
67e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-jar,$(b))))
68e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
69e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang# $(1): the rest list of boot jars
70e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangdefine _build-dexpreopt-boot-jar-dependency-pair
71e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(if $(filter 1,$(words $(1)))$(filter 0,$(words $(1))),,\
72e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(eval _bdbjdp_target := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 2,$(1)).odex) \
73e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(eval _bdbjdp_dep := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 1,$(1)).odex) \
74e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(eval $(call add-dependency,$(_bdbjdp_target),$(_bdbjdp_dep))) \
75e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang	$(eval $(call _build-dexpreopt-boot-jar-dependency-pair,$(wordlist 2,999,$(1)))))
76e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangendef
77e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
78e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangdefine _build-dexpreopt-boot-jar-dependency
79e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(call _build-dexpreopt-boot-jar-dependency-pair,$(DEXPREOPT_BOOT_JARS_MODULES))
80e7874c430895b9a4e631c89f1e7729da9264d167Ying Wangendef
81e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang
82e7874c430895b9a4e631c89f1e7729da9264d167Ying Wang$(eval $(call _build-dexpreopt-boot-jar-dependency))
83