github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/make/core/setup_one_odex.mk (about)

     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)