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