blob: 23a54e1eb589a8601aa54432388e706346fa41da [file] [log] [blame]
Brian Carlstromced4bff2013-11-14 23:44:56 -08001####################################
2# dexpreopt support for Dalvik
3#
4####################################
5
6DEXOPT := $(HOST_OUT_EXECUTABLES)/dexopt$(HOST_EXECUTABLE_SUFFIX)
7DEXPREOPT := dalvik/tools/dex-preopt
8
9DEXPREOPT_DEXOPT := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXOPT))
10
11DEXPREOPT_BOOT_ODEXS := $(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),\
12 $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(b).odex)
13
14# If the target is a uniprocessor, then explicitly tell the preoptimizer
15# that fact. (By default, it always optimizes for an SMP target.)
16ifeq ($(TARGET_CPU_SMP),true)
17 DEXPREOPT_UNIPROCESSOR :=
18else
19 DEXPREOPT_UNIPROCESSOR := --uniprocessor
20endif
21
22# By default, do not run rerun dexopt if the tool changes.
23# Comment out the | to force dex2oat to rerun on after all changes.
24DEXOPT_DEPENDENCY := |
25DEXOPT_DEPENDENCY += $(DEXPREOPT) $(DEXOPT)
26
27# $(1): the input .jar or .apk file
28# $(2): the output .odex file
29define dexopt-one-file
30$(hide) rm -f $(2)
31$(hide) mkdir -p $(dir $(2))
32$(hide) $(DEXPREOPT) \
33 --dexopt=$(DEXPREOPT_DEXOPT) \
34 --build-dir=$(DEXPREOPT_BUILD_DIR) \
35 --product-dir=$(DEXPREOPT_PRODUCT_DIR) \
36 --boot-dir=$(DEXPREOPT_BOOT_JAR_DIR) \
37 --boot-jars=$(DEXPREOPT_BOOT_JARS) \
38 $(DEXPREOPT_UNIPROCESSOR) \
39 $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(1)) \
40 $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(2))
41endef
42
43# Special rules for building odex files for boot jars that override java_library.mk rules
44
45# $(1): boot jar module name
46define _dexpreopt-boot-odex
47_dbj_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).jar
48_dbj_odex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1).odex
49_dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar
50$$(_dbj_odex): PRIVATE_DBJ_JAR := $$(_dbj_jar)
51$$(_dbj_odex) : $$(_dbj_src_jar) | $(ACP) $(DEXPREOPT) $(DEXOPT)
52 @echo "Dexpreopt Boot Jar: $$@"
Ying Wang17a7e2b2013-12-17 17:37:16 -080053 $(hide) mkdir -p $$(dir $$(PRIVATE_DBJ_JAR)) && $(ACP) -fp $$< $$(PRIVATE_DBJ_JAR)
Brian Carlstromced4bff2013-11-14 23:44:56 -080054 $$(call dexopt-one-file,$$(PRIVATE_DBJ_JAR),$$@)
55
56_dbj_jar :=
57_dbj_odex :=
58_dbj_src_jar :=
59endef
60
61$(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-odex,$(b))))
62
63# $(1): the rest list of boot jars
64define _build-dexpreopt-boot-jar-dependency-pair
65$(if $(filter 1,$(words $(1)))$(filter 0,$(words $(1))),,\
66 $(eval _bdbjdp_target := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 2,$(1)).odex) \
67 $(eval _bdbjdp_dep := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(word 1,$(1)).odex) \
68 $(eval $(call add-dependency,$(_bdbjdp_target),$(_bdbjdp_dep))) \
69 $(eval $(call _build-dexpreopt-boot-jar-dependency-pair,$(wordlist 2,999,$(1)))))
70endef
71
72define _build-dexpreopt-boot-jar-dependency
73$(call _build-dexpreopt-boot-jar-dependency-pair,$(DEXPREOPT_BOOT_JARS_MODULES))
74endef
75
76$(eval $(call _build-dexpreopt-boot-jar-dependency))