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