dex_preopt_odex_install.mk revision 7326f7b746b82ec60d7381f1fe967a2cd8c7f8e9
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# if WITH_DEXPREOPT_BOOT_IMG_ONLY=true and module is not in boot class path skip
36ifeq (true,$(WITH_DEXPREOPT_BOOT_IMG_ONLY))
37ifeq ($(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE)),)
38LOCAL_DEX_PREOPT :=
39endif
40endif
41
42built_odex :=
43installed_odex :=
44built_installed_odex :=
45ifdef LOCAL_DEX_PREOPT
46dexpreopt_boot_jar_module := $(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE))
47ifdef dexpreopt_boot_jar_module
48ifeq ($(DALVIK_VM_LIB),libdvm.so)
49built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
50installed_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex
51built_installed_odex := $(built_odex):$(installed_odex)
52else # libdvm.so
53# For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE).
54# We use this installed_odex trick to get boot.art installed.
55installed_odex := $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)
56# Append the odex for the 2nd arch if we have one.
57installed_odex += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)
58endif # libdvm.so
59else  # boot jar
60ifeq ($(DALVIK_VM_LIB),libdvm.so)
61built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
62installed_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex
63built_installed_odex := $(built_odex):$(installed_odex)
64
65$(built_odex) : $(DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
66                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS)
67else # libart
68ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
69# For a Java library, we build odex for both 1st arch and 2nd arch, if we have one.
70# #################################################
71# Odex for the 1st arch
72built_odex := $(call get-odex-file-path,$(DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE))
73ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION
74my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)
75else
76my_dex_preopt_image_location := $(DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION)
77endif
78my_dex_preopt_image_filename := $(call get-image-file-path,$(DEX2OAT_TARGET_ARCH),$(my_dex_preopt_image_location))
79$(built_odex): PRIVATE_2ND_ARCH_VAR_PREFIX :=
80$(built_odex): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
81$(built_odex): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location)
82$(built_odex) : $(DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
83                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \
84                $(my_dex_preopt_image_filename)
85installed_odex := $(call get-odex-file-path,$(DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE))
86built_installed_odex := $(built_odex):$(installed_odex)
87# #################################################
88# Odex for the 2nd arch
89ifdef TARGET_2ND_ARCH
90built_odex2 := $(call get-odex-file-path,$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE))
91ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION
92my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)
93else
94my_dex_preopt_image_location := $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION)
95endif
96my_dex_preopt_image_filename := $(call get-image-file-path,$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(my_dex_preopt_image_location))
97$(built_odex2): PRIVATE_2ND_ARCH_VAR_PREFIX := $(TARGET_2ND_ARCH_VAR_PREFIX)
98$(built_odex2): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
99$(built_odex2): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location)
100$(built_odex2) : $($(TARGET_2ND_ARCH_VAR_PREFIX)DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
101                 $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \
102                 $(my_dex_preopt_image_filename)
103
104installed_odex2 := $(call get-odex-file-path,$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE))
105built_odex += $(built_odex2)
106installed_odex += $(installed_odex2)
107built_installed_odex += $(built_odex2):$(installed_odex2)
108endif  # TARGET_2ND_ARCH
109# #################################################
110else  # must be APPS
111# For an app, we build for the multilib arch it's targeted for.
112built_odex := $(call get-odex-file-path,$($(LOCAL_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE))
113ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION
114my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)
115else
116my_dex_preopt_image_location := $($(LOCAL_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION)
117endif
118my_dex_preopt_image_filename := $(call get-image-file-path,$($(LOCAL_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(my_dex_preopt_image_location))
119$(built_odex): PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX)
120$(built_odex): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
121$(built_odex): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location)
122$(built_odex) : $($(LOCAL_2ND_ARCH_VAR_PREFIX)DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
123                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \
124                $(my_dex_preopt_image_filename)
125installed_odex := $(call get-odex-file-path,$($(LOCAL_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE))
126built_installed_odex := $(built_odex):$(installed_odex)
127endif  # LOCAL_MODULE_CLASS
128endif # libart
129endif # boot jar
130
131ifdef built_odex
132# Use pattern rule - we may have multiple installed odex files.
133# Ugly syntax - See the definition get-odex-file-path.
134$(installed_odex) : $(dir $(LOCAL_INSTALLED_MODULE))%$(notdir $(word 1,$(installed_odex))) \
135                  : $(dir $(LOCAL_BUILT_MODULE))%$(notdir $(word 1,$(built_odex))) \
136    | $(ACP)
137	@echo "Install: $@"
138	$(copy-file-to-target)
139endif
140
141# Add the installed_odex to the list of installed files for this module.
142ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex)
143ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex)
144
145# Make sure to install the .odex when you run "make <module_name>"
146$(my_register_name): $(installed_odex)
147
148endif # LOCAL_DEX_PREOPT
149