Home | History | Annotate | Download | only in core
      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