1 # 2 # Copyright (C) 2014 The Android Open Source Project 3 # 4 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # you may not use this file except in compliance with the License. 6 # You may obtain a copy of the License at 7 # 8 # http://www.apache.org/licenses/LICENSE-2.0 9 # 10 # Unless required by applicable law or agreed to in writing, software 11 # distributed under the License is distributed on an "AS IS" BASIS, 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 # 16 17 # Set up variables and dependency for one odex file 18 # Input variables: my_2nd_arch_prefix 19 # Output(modified) variables: built_odex, installed_odex, built_installed_odex 20 21 my_built_odex := $(call get-odex-file-path,$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE)) 22 ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION 23 my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION) 24 else 25 my_dex_preopt_image_location := $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION) 26 endif 27 my_dex_preopt_image_filename := $(call get-image-file-path,$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH),$(my_dex_preopt_image_location)) 28 29 # If LOCAL_ENFORCE_USES_LIBRARIES is not set, default to true if either of LOCAL_USES_LIBRARIES or 30 # LOCAL_OPTIONAL_USES_LIBRARIES are specified. 31 ifeq (,$(LOCAL_ENFORCE_USES_LIBRARIES)) 32 # Will change the default to true unconditionally in the future. 33 ifneq (,$(LOCAL_OPTIONAL_USES_LIBRARIES)) 34 LOCAL_ENFORCE_USES_LIBRARIES := true 35 endif 36 ifneq (,$(LOCAL_USES_LIBRARIES)) 37 LOCAL_ENFORCE_USES_LIBRARIES := true 38 endif 39 endif 40 41 my_uses_libraries := $(LOCAL_USES_LIBRARIES) 42 my_optional_uses_libraries := $(LOCAL_OPTIONAL_USES_LIBRARIES) 43 my_missing_uses_libraries := $(INTERNAL_PLATFORM_MISSING_USES_LIBRARIES) 44 45 # If we have either optional or required uses-libraries, set up the class loader context 46 # accordingly. 47 my_lib_names := 48 my_optional_lib_names := 49 my_filtered_optional_uses_libraries := 50 my_system_dependencies := 51 my_stored_preopt_class_loader_context_libs := 52 my_conditional_uses_libraries_host := 53 my_conditional_uses_libraries_target := 54 55 ifneq (true,$(LOCAL_ENFORCE_USES_LIBRARIES)) 56 # Pass special class loader context to skip the classpath and collision check. 57 # This will get removed once LOCAL_USES_LIBRARIES is enforced. 58 # Right now LOCAL_USES_LIBRARIES is opt in, for the case where it's not specified we still default 59 # to the &. 60 my_dex_preopt_class_loader_context := \& 61 else 62 # Compute the filtered optional uses libraries by removing ones that are not supposed to exist. 63 my_filtered_optional_uses_libraries := \ 64 $(filter-out $(my_missing_uses_libraries), $(my_optional_uses_libraries)) 65 my_filtered_uses_libraries := $(my_uses_libraries) $(my_filtered_optional_uses_libraries) 66 67 # These are the ones we are verifying in the make rule, use the unfiltered libraries. 68 my_lib_names := $(my_uses_libraries) 69 my_optional_lib_names := $(my_optional_uses_libraries) 70 71 # Calculate system build dependencies based on the filtered libraries. 72 my_intermediate_libs := $(foreach lib_name, $(my_lib_names) $(my_filtered_optional_uses_libraries), \ 73 $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib_name),,COMMON)/javalib.jar) 74 my_dex_preopt_system_dependencies := $(my_intermediate_libs) 75 my_dex_preopt_class_loader_context := $(call normalize-path-list,$(my_intermediate_libs)) 76 77 # The class loader context checksums are filled in by dex2oat. 78 my_stored_preopt_class_loader_context_libs := $(call normalize-path-list, \ 79 $(foreach lib_name,$(my_filtered_uses_libraries),/system/framework/$(lib_name).jar)) 80 81 # Fix up org.apache.http.legacy.boot since it should be org.apache.http.legacy in the manifest. 82 my_lib_names := $(patsubst org.apache.http.legacy.boot,org.apache.http.legacy,$(my_lib_names)) 83 my_optional_lib_names := $(patsubst org.apache.http.legacy.boot,org.apache.http.legacy,$(my_optional_lib_names)) 84 ifeq (,$(filter org.apache.http.legacy,$(my_lib_names) $(my_optional_lib_names))) 85 my_conditional_uses_libraries_host := $(call intermediates-dir-for,JAVA_LIBRARIES,org.apache.http.legacy.boot,,COMMON)/javalib.jar 86 my_conditional_uses_libraries_target := /system/framework/org.apache.http.legacy.boot.jar 87 endif 88 endif 89 90 # Always depend on org.apache.http.legacy.boot since it may get used by dex2oat-one-file for apps 91 # targetting <SDK 28(P). 92 my_always_depend_libraries := $(call intermediates-dir-for,JAVA_LIBRARIES,org.apache.http.legacy.boot,,COMMON)/javalib.jar 93 94 $(my_built_odex): $(AAPT) 95 $(my_built_odex): $(my_always_depend_libraries) 96 $(my_built_odex): $(my_dex_preopt_system_dependencies) 97 $(my_built_odex): PRIVATE_ENFORCE_USES_LIBRARIES := $(LOCAL_ENFORCE_USES_LIBRARIES) 98 $(my_built_odex): PRIVATE_CONDITIONAL_USES_LIBRARIES_HOST := $(my_conditional_uses_libraries_host) 99 $(my_built_odex): PRIVATE_CONDITIONAL_USES_LIBRARIES_TARGET := $(my_conditional_uses_libraries_target) 100 $(my_built_odex): PRIVATE_USES_LIBRARY_NAMES := $(my_lib_names) 101 $(my_built_odex): PRIVATE_OPTIONAL_USES_LIBRARY_NAMES := $(my_optional_lib_names) 102 $(my_built_odex): PRIVATE_2ND_ARCH_VAR_PREFIX := $(my_2nd_arch_prefix) 103 $(my_built_odex): PRIVATE_DEX_LOCATION := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE)) 104 $(my_built_odex): PRIVATE_DEX_PREOPT_IMAGE_LOCATION := $(my_dex_preopt_image_location) 105 $(my_built_odex): PRIVATE_DEX2OAT_CLASS_LOADER_CONTEXT := $(my_dex_preopt_class_loader_context) 106 $(my_built_odex): PRIVATE_DEX2OAT_STORED_CLASS_LOADER_CONTEXT_LIBS := $(my_stored_preopt_class_loader_context_libs) 107 $(my_built_odex) : $($(my_2nd_arch_prefix)DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \ 108 $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS) \ 109 $(my_dex_preopt_image_filename) 110 111 my_installed_odex := $(call get-odex-installed-file-path,$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE)) 112 113 my_built_vdex := $(patsubst %.odex,%.vdex,$(my_built_odex)) 114 my_installed_vdex := $(patsubst %.odex,%.vdex,$(my_installed_odex)) 115 my_installed_art := $(patsubst %.odex,%.art,$(my_installed_odex)) 116 117 ifndef LOCAL_DEX_PREOPT_APP_IMAGE 118 # Local override not defined, use the global one. 119 ifeq (true,$(WITH_DEX_PREOPT_APP_IMAGE)) 120 LOCAL_DEX_PREOPT_APP_IMAGE := true 121 endif 122 endif 123 124 ifeq (true,$(LOCAL_DEX_PREOPT_APP_IMAGE)) 125 my_built_art := $(patsubst %.odex,%.art,$(my_built_odex)) 126 $(my_built_odex): PRIVATE_ART_FILE_PREOPT_FLAGS := --app-image-file=$(my_built_art) \ 127 --image-format=lz4 128 $(eval $(call copy-one-file,$(my_built_art),$(my_installed_art))) 129 built_art += $(my_built_art) 130 installed_art += $(my_installed_art) 131 built_installed_art += $(my_built_art):$(my_installed_art) 132 endif 133 134 $(eval $(call copy-one-file,$(my_built_odex),$(my_installed_odex))) 135 $(eval $(call copy-one-file,$(my_built_vdex),$(my_installed_vdex))) 136 137 built_odex += $(my_built_odex) 138 built_vdex += $(my_built_vdex) 139 140 installed_odex += $(my_installed_odex) 141 installed_vdex += $(my_installed_vdex) 142 143 built_installed_odex += $(my_built_odex):$(my_installed_odex) 144 built_installed_vdex += $(my_built_vdex):$(my_installed_vdex) 145