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