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