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 21my_built_odex := $(call get-odex-file-path,$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH),$(LOCAL_BUILT_MODULE)) 22ifdef LOCAL_DEX_PREOPT_IMAGE_LOCATION 23my_dex_preopt_image_location := $(LOCAL_DEX_PREOPT_IMAGE_LOCATION) 24else 25my_dex_preopt_image_location := $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION) 26endif 27my_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. 31ifeq (,$(LOCAL_ENFORCE_USES_LIBRARIES)) 32# Will change the default to true unconditionally in the future. 33ifneq (,$(LOCAL_OPTIONAL_USES_LIBRARIES)) 34LOCAL_ENFORCE_USES_LIBRARIES := true 35endif 36ifneq (,$(LOCAL_USES_LIBRARIES)) 37LOCAL_ENFORCE_USES_LIBRARIES := true 38endif 39endif 40 41my_uses_libraries := $(LOCAL_USES_LIBRARIES) 42my_optional_uses_libraries := $(LOCAL_OPTIONAL_USES_LIBRARIES) 43my_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. 47my_lib_names := 48my_optional_lib_names := 49my_filtered_optional_uses_libraries := 50my_system_dependencies := 51my_stored_preopt_class_loader_context_libs := 52my_conditional_uses_libraries_host := 53my_conditional_uses_libraries_target := 54 55ifneq (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 := \& 61else 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 88endif 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). 92my_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 111my_installed_odex := $(call get-odex-installed-file-path,$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH),$(LOCAL_INSTALLED_MODULE)) 112 113my_built_vdex := $(patsubst %.odex,%.vdex,$(my_built_odex)) 114my_installed_vdex := $(patsubst %.odex,%.vdex,$(my_installed_odex)) 115my_installed_art := $(patsubst %.odex,%.art,$(my_installed_odex)) 116 117ifndef LOCAL_DEX_PREOPT_APP_IMAGE 118# Local override not defined, use the global one. 119ifeq (true,$(WITH_DEX_PREOPT_APP_IMAGE)) 120 LOCAL_DEX_PREOPT_APP_IMAGE := true 121endif 122endif 123 124ifeq (true,$(LOCAL_DEX_PREOPT_APP_IMAGE)) 125my_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))) 129built_art += $(my_built_art) 130installed_art += $(my_installed_art) 131built_installed_art += $(my_built_art):$(my_installed_art) 132endif 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 137built_odex += $(my_built_odex) 138built_vdex += $(my_built_vdex) 139 140installed_odex += $(my_installed_odex) 141installed_vdex += $(my_installed_vdex) 142 143built_installed_odex += $(my_built_odex):$(my_installed_odex) 144built_installed_vdex += $(my_built_vdex):$(my_installed_vdex) 145