dex_preopt_odex_install.mk revision 1ef0a635f370acf22c8a23ec608d8d03508274ba
1# dexpreopt_odex_install.mk is used to define odex creation rules for JARs and APKs
2# This file depends on variables set in base_rules.mk
3# Output variables: LOCAL_DEX_PREOPT, built_odex, dexpreopt_boot_jar_module
4
5# Setting LOCAL_DEX_PREOPT based on WITH_DEXPREOPT, LOCAL_DEX_PREOPT, etc
6LOCAL_DEX_PREOPT := $(strip $(LOCAL_DEX_PREOPT))
7ifneq (true,$(WITH_DEXPREOPT))
8  LOCAL_DEX_PREOPT :=
9else # WITH_DEXPREOPT=true
10  ifeq (,$(TARGET_BUILD_APPS)) # TARGET_BUILD_APPS empty
11    ifndef LOCAL_DEX_PREOPT # LOCAL_DEX_PREOPT undefined
12      ifeq (,$(LOCAL_APK_LIBRARIES)) # LOCAL_APK_LIBRARIES empty
13        LOCAL_DEX_PREOPT := $(DEX_PREOPT_DEFAULT)
14      else # LOCAL_APK_LIBRARIES not empty
15        LOCAL_DEX_PREOPT := nostripping
16      endif # LOCAL_APK_LIBRARIES not empty
17    endif # LOCAL_DEX_PREOPT undefined
18  endif # TARGET_BUILD_APPS empty
19endif # WITH_DEXPREOPT=true
20ifeq (false,$(LOCAL_DEX_PREOPT))
21  LOCAL_DEX_PREOPT :=
22endif
23ifdef LOCAL_UNINSTALLABLE_MODULE
24LOCAL_DEX_PREOPT :=
25endif
26ifeq (,$(strip $(all_java_sources)$(full_static_java_libs)$(my_prebuilt_src_file))) # contains no java code
27LOCAL_DEX_PREOPT :=
28endif
29# if module oat file requested in data, disable LOCAL_DEX_PREOPT, will default location to dalvik-cache
30ifneq (,$(filter $(LOCAL_MODULE),$(PRODUCT_DEX_PREOPT_PACKAGES_IN_DATA)))
31LOCAL_DEX_PREOPT :=
32endif
33
34built_odex :=
35installed_odex :=
36built_installed_odex :=
37ifdef LOCAL_DEX_PREOPT
38dexpreopt_boot_jar_module := $(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE))
39ifdef dexpreopt_boot_jar_module
40ifeq ($(DALVIK_VM_LIB),libdvm.so)
41built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
42installed_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex
43built_installed_odex := $(built_odex):$(installed_odex)
44else # libdvm.so
45# For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE).
46# We use this installed_odex trick to get boot.art installed.
47installed_odex := $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)
48# Append the odex for the 2nd arch if we have one.
49installed_odex += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)
50endif # libdvm.so
51else  # boot jar
52ifeq ($(DALVIK_VM_LIB),libdvm.so)
53built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
54installed_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex
55built_installed_odex := $(built_odex):$(installed_odex)
56
57$(built_odex) : $(DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
58                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS)
59else # libart
60ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
61# For a Java library, we build odex for both 1st arch and 2nd arch, if we have one.
62# #################################################
63# Odex for the 1st arch
64built_odex := $(call get-odex-file-path,$(DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE))
65ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION
66my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)
67else
68my_dex_preopt_image_location := $(DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION)
69endif
70my_dex_preopt_image_filename := $(call get-image-file-path,$(DEX2OAT_TARGET_ARCH),$(my_dex_preopt_image_location))
71$(built_odex): PRIVATE_2ND_ARCH_VAR_PREFIX :=
72$(built_odex): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
73$(built_odex): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location)
74$(built_odex) : $(DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
75                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \
76                $(my_dex_preopt_image_filename)
77installed_odex := $(call get-odex-file-path,$(DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE))
78built_installed_odex := $(built_odex):$(installed_odex)
79# #################################################
80# Odex for the 2nd arch
81ifdef TARGET_2ND_ARCH
82built_odex2 := $(call get-odex-file-path,$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE))
83ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION
84my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)
85else
86my_dex_preopt_image_location := $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION)
87endif
88my_dex_preopt_image_filename := $(call get-image-file-path,$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(my_dex_preopt_image_location))
89$(built_odex2): PRIVATE_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX)
90$(built_odex2): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
91$(built_odex2): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location)
92$(built_odex2) : $($(TARGET_2ND_ARCH_VAR_PREFIX)DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
93                 $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \
94                 $(my_dex_preopt_image_filename)
95
96installed_odex2 := $(call get-odex-file-path,$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE))
97built_odex += $(built_odex2)
98installed_odex += $(installed_odex2)
99built_installed_odex += $(built_odex2):$(installed_odex2)
100endif  # TARGET_2ND_ARCH
101# #################################################
102else  # must be APPS
103# For an app, we build for the multilib arch it's targeted for.
104built_odex := $(call get-odex-file-path,$($(LOCAL_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE))
105ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION
106my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)
107else
108my_dex_preopt_image_location := $($(LOCAL_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION)
109endif
110my_dex_preopt_image_filename := $(call get-image-file-path,$($(LOCAL_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(my_dex_preopt_image_location))
111$(built_odex): PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX)
112$(built_odex): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
113$(built_odex): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location)
114$(built_odex) : $($(LOCAL_2ND_ARCH_VAR_PREFIX)DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
115                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \
116                $(my_dex_preopt_image_filename)
117installed_odex := $(call get-odex-file-path,$($(LOCAL_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE))
118built_installed_odex := $(built_odex):$(installed_odex)
119endif  # LOCAL_MODULE_CLASS
120endif # libart
121endif # boot jar
122
123ifdef built_odex
124# Use pattern rule - we may have multiple installed odex files.
125# Ugly syntax - See the definition get-odex-file-path.
126$(installed_odex) : $(dir $(LOCAL_INSTALLED_MODULE))%$(notdir $(word 1,$(installed_odex))) \
127                  : $(dir $(LOCAL_BUILT_MODULE))%$(notdir $(word 1,$(built_odex))) \
128    | $(ACP)
129	@echo "Install: $@"
130	$(copy-file-to-target)
131endif
132
133# Add the installed_odex to the list of installed files for this module.
134ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex)
135ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex)
136
137# Make sure to install the .odex when you run "make <module_name>"
138$(my_register_name): $(installed_odex)
139
140endif # LOCAL_DEX_PREOPT
141