dex_preopt_odex_install.mk revision 3380d3a1ae64667f130273a78a42b81c7296b595
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) is byproduct of $(LOCAL_BUILT_MODULE)
112$(LOCAL_BUILT_MODULE) $(built_odex): PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX)
113$(LOCAL_BUILT_MODULE) $(built_odex): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
114$(LOCAL_BUILT_MODULE) $(built_odex): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location)
115$(LOCAL_BUILT_MODULE) $(built_odex) : $($(LOCAL_2ND_ARCH_VAR_PREFIX)DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
116                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \
117                $(my_dex_preopt_image_filename)
118installed_odex := $(call get-odex-file-path,$($(LOCAL_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE))
119built_installed_odex := $(built_odex):$(installed_odex)
120endif  # LOCAL_MODULE_CLASS
121endif # libart
122endif # boot jar
123
124ifdef built_odex
125# We need $(LOCAL_BUILT_MODULE) in the deps to enforce reinstallation
126# even if $(built_odex) is byproduct of $(LOCAL_BUILT_MODULE), such as in package.mk.
127# Use pattern rule - we may have multiple installed odex files.
128# Ugly syntax - See the definition get-odex-file-path.
129$(installed_odex) : $(dir $(LOCAL_INSTALLED_MODULE))%/$(notdir $(word 1,$(installed_odex))) \
130                  : $(dir $(LOCAL_BUILT_MODULE))%/$(notdir $(word 1,$(built_odex))) \
131    $(LOCAL_BUILT_MODULE) | $(ACP)
132	@echo "Install: $@"
133	$(copy-file-to-target)
134endif
135
136# Add the installed_odex to the list of installed files for this module.
137ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex)
138ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex)
139
140# Make sure to install the .odex when you run "make <module_name>"
141$(my_register_name): $(installed_odex)
142
143endif # LOCAL_DEX_PREOPT
144