Merge "Remove dexpreopting of boot jars from Make"
This commit is contained in:
commit
dd025116cd
|
@ -595,6 +595,10 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/libtombstoned_client.so
|
|||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/libvixl.so)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/libvixld.so)
|
||||
|
||||
# Clean up old location of dexpreopted boot jars
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/dex_bootjars)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/dex_bootjars_input)
|
||||
|
||||
# ************************************************
|
||||
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
|
||||
# ************************************************
|
||||
|
|
|
@ -1,37 +1,5 @@
|
|||
DEX_PREOPT_CONFIG := $(PRODUCT_OUT)/dexpreopt.config
|
||||
|
||||
RUNTIME_MODULES := $(filter-out $(PRODUCT_UPDATABLE_BOOT_MODULES), $(TARGET_CORE_JARS))
|
||||
FRAMEWORK_MODULES := $(filter-out $(PRODUCT_UPDATABLE_BOOT_MODULES) $(RUNTIME_MODULES), $(PRODUCT_BOOT_JARS))
|
||||
|
||||
NON_UPDATABLE_BOOT_MODULES := $(RUNTIME_MODULES) $(FRAMEWORK_MODULES)
|
||||
NON_UPDATABLE_BOOT_LOCATIONS := $(foreach m,$(RUNTIME_MODULES),/apex/com.android.runtime/javalib/$(m).jar)
|
||||
NON_UPDATABLE_BOOT_LOCATIONS += $(foreach m,$(FRAMEWORK_MODULES),/system/framework/$(m).jar)
|
||||
ALL_BOOT_LOCATIONS := $(NON_UPDATABLE_BOOT_LOCATIONS) $(PRODUCT_UPDATABLE_BOOT_LOCATIONS)
|
||||
ALL_BOOT_MODULES := $(NON_UPDATABLE_BOOT_MODULES) $(PRODUCT_UPDATABLE_BOOT_MODULES)
|
||||
|
||||
PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(ALL_BOOT_LOCATIONS))
|
||||
|
||||
DEXPREOPT_BOOT_JARS_MODULES := $(NON_UPDATABLE_BOOT_MODULES)
|
||||
DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS := $(NON_UPDATABLE_BOOT_LOCATIONS)
|
||||
DEXPREOPT_BOOT_JARS_INPUT_PATH := $(PRODUCT_OUT)/dex_bootjars_input
|
||||
DEXPREOPT_BOOTCLASSPATH_DEX_FILES := $(foreach m,$(NON_UPDATABLE_BOOT_MODULES),$(DEXPREOPT_BOOT_JARS_INPUT_PATH)/$(m).jar)
|
||||
|
||||
# Create paths for boot image.
|
||||
DEXPREOPT_BUILD_DIR := $(OUT_DIR)
|
||||
DEXPREOPT_PRODUCT_DIR_FULL_PATH := $(PRODUCT_OUT)/dex_bootjars
|
||||
DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXPREOPT_PRODUCT_DIR_FULL_PATH))
|
||||
DEXPREOPT_BOOT_JAR_DIR := system/framework
|
||||
DEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_PRODUCT_DIR_FULL_PATH)/$(DEXPREOPT_BOOT_JAR_DIR)
|
||||
DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/boot.art
|
||||
DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(DEX2OAT_TARGET_ARCH)/boot.art
|
||||
|
||||
ifdef TARGET_2ND_ARCH
|
||||
$(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/boot.art
|
||||
$(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH)/boot.art
|
||||
endif
|
||||
|
||||
PRODUCT_SYSTEM_SERVER_CLASSPATH := $(subst $(space),:,$(foreach m,$(PRODUCT_SYSTEM_SERVER_JARS),/system/framework/$(m).jar))
|
||||
|
||||
# The default value for LOCAL_DEX_PREOPT
|
||||
DEX_PREOPT_DEFAULT ?= true
|
||||
|
||||
|
@ -94,6 +62,25 @@ PRELOADED_CLASSES := $(call word-colon,1,$(firstword \
|
|||
DIRTY_IMAGE_OBJECTS := $(call word-colon,1,$(firstword \
|
||||
$(filter %system/etc/dirty-image-objects,$(PRODUCT_COPY_FILES))))
|
||||
|
||||
# If we use a boot image profile.
|
||||
my_use_profile_for_boot_image := $(PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE)
|
||||
ifeq (,$(my_use_profile_for_boot_image))
|
||||
# If not set, set the default to true if we are not a PDK build. PDK builds
|
||||
# can't build the profile since they don't have frameworks/base.
|
||||
ifneq (true,$(TARGET_BUILD_PDK))
|
||||
my_use_profile_for_boot_image := true
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq (true,$(my_use_profile_for_boot_image))
|
||||
boot_image_profiles := $(PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION)
|
||||
|
||||
ifeq (,$(boot_image_profiles))
|
||||
# If not set, use the default.
|
||||
boot_image_profiles := frameworks/base/config/boot-image-profile.txt
|
||||
endif
|
||||
endif
|
||||
|
||||
define get-product-default-property
|
||||
$(strip \
|
||||
$(eval _prop := $(patsubst $(1)=%,%,$(filter $(1)=%,$(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))))\
|
||||
|
@ -124,13 +111,13 @@ ifeq ($(WRITE_SOONG_VARIABLES),true)
|
|||
$(call add_json_bool, OnlyPreoptBootImageAndSystemServer, $(filter true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY)))
|
||||
$(call add_json_bool, DontUncompressPrivAppsDex, $(filter true,$(DONT_UNCOMPRESS_PRIV_APPS_DEXS)))
|
||||
$(call add_json_list, ModulesLoadedByPrivilegedModules, $(PRODUCT_LOADED_BY_PRIVILEGED_MODULES))
|
||||
$(call add_json_list, PreoptBootClassPathDexFiles, $(DEXPREOPT_BOOTCLASSPATH_DEX_FILES))
|
||||
$(call add_json_bool, HasSystemOther, $(BOARD_USES_SYSTEM_OTHER_ODEX))
|
||||
$(call add_json_list, PatternsOnSystemOther, $(SYSTEM_OTHER_ODEX_FILTER))
|
||||
$(call add_json_bool, DisableGenerateProfile, $(filter false,$(WITH_DEX_PREOPT_GENERATE_PROFILE)))
|
||||
$(call add_json_list, PreoptBootClassPathDexLocations, $(DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS))
|
||||
$(call add_json_list, BootJars, $(PRODUCT_BOOT_JARS))
|
||||
$(call add_json_list, PreoptBootJars, $(DEXPREOPT_BOOT_JARS_MODULES))
|
||||
$(call add_json_list, TargetCoreJars, $(TARGET_CORE_JARS))
|
||||
$(call add_json_list, ProductUpdatableBootModules, $(PRODUCT_UPDATABLE_BOOT_MODULES))
|
||||
$(call add_json_list, ProductUpdatableBootLocations, $(PRODUCT_UPDATABLE_BOOT_LOCATIONS))
|
||||
$(call add_json_list, SystemServerJars, $(PRODUCT_SYSTEM_SERVER_JARS))
|
||||
$(call add_json_list, SystemServerApps, $(PRODUCT_SYSTEM_SERVER_APPS))
|
||||
$(call add_json_list, SpeedApps, $(PRODUCT_DEXPREOPT_SPEED_APPS))
|
||||
|
@ -152,13 +139,6 @@ ifeq ($(WRITE_SOONG_VARIABLES),true)
|
|||
$(call add_json_str, Dex2oatXms, $(DEX2OAT_XMS))
|
||||
$(call add_json_str, EmptyDirectory, $(OUT_DIR)/empty)
|
||||
|
||||
$(call add_json_map, DefaultDexPreoptImage)
|
||||
$(call add_json_str, $(TARGET_ARCH), $(DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME))
|
||||
ifdef TARGET_2ND_ARCH
|
||||
$(call add_json_str, $(TARGET_2ND_ARCH), $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME))
|
||||
endif
|
||||
$(call end_json_map)
|
||||
|
||||
$(call add_json_map, CpuVariant)
|
||||
$(call add_json_str, $(TARGET_ARCH), $(DEX2OAT_TARGET_CPU_VARIANT))
|
||||
ifdef TARGET_2ND_ARCH
|
||||
|
@ -173,6 +153,13 @@ ifeq ($(WRITE_SOONG_VARIABLES),true)
|
|||
endif
|
||||
$(call end_json_map)
|
||||
|
||||
$(call add_json_str, DirtyImageObjects, $(DIRTY_IMAGE_OBJECTS))
|
||||
$(call add_json_str, PreloadedClasses, $(PRELOADED_CLASSES))
|
||||
$(call add_json_list, BootImageProfiles, $(boot_image_profiles))
|
||||
$(call add_json_str, BootFlags, $(PRODUCT_DEX_PREOPT_BOOT_FLAGS))
|
||||
$(call add_json_str, Dex2oatImageXmx, $(DEX2OAT_IMAGE_XMX))
|
||||
$(call add_json_str, Dex2oatImageXms, $(DEX2OAT_IMAGE_XMS))
|
||||
|
||||
$(call add_json_map, Tools)
|
||||
$(call add_json_str, Profman, $(PROFMAN))
|
||||
$(call add_json_str, Dex2oat, $(DEX2OAT))
|
||||
|
@ -211,7 +198,5 @@ DEXPREOPT_GEN_DEPS := \
|
|||
$(BUILD_SYSTEM)/verify_uses_libraries.sh \
|
||||
$(BUILD_SYSTEM)/construct_context.sh \
|
||||
|
||||
DEXPREOPT_GEN_DEPS += $(DEXPREOPT_BOOTCLASSPATH_DEX_FILES)
|
||||
|
||||
DEXPREOPT_STRIP_DEPS := \
|
||||
$(ZIP2ZIP) \
|
||||
|
|
|
@ -3,99 +3,50 @@
|
|||
#
|
||||
####################################
|
||||
|
||||
########################################################################
|
||||
# The full system boot classpath
|
||||
|
||||
LIBART_TARGET_BOOT_JARS := $(DEXPREOPT_BOOT_JARS_MODULES)
|
||||
LIBART_TARGET_BOOT_DEX_LOCATIONS := $(DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS)
|
||||
LIBART_TARGET_BOOT_DEX_FILES := $(foreach mod,$(NON_UPDATABLE_BOOT_MODULES),$(call intermediates-dir-for,JAVA_LIBRARIES,$(mod),,COMMON)/javalib.jar)
|
||||
|
||||
# Copy the files to a location Soong dex preopt will look at.
|
||||
$(foreach mod,$(LIBART_TARGET_BOOT_JARS),$(eval $(call copy-one-file,$(call intermediates-dir-for,JAVA_LIBRARIES,$(mod),,COMMON)/javalib.jar,$(DEXPREOPT_BOOT_JARS_INPUT_PATH)/$(mod).jar)))
|
||||
|
||||
# dex preopt on the bootclasspath produces multiple files. The first dex file
|
||||
# is converted into to boot.art (to match the legacy assumption that boot.art
|
||||
# exists), and the rest are converted to boot-<name>.art.
|
||||
# In addition, each .art file has an associated .oat file.
|
||||
LIBART_TARGET_BOOT_ART_EXTRA_FILES := $(foreach jar,$(wordlist 2,999,$(LIBART_TARGET_BOOT_JARS)),boot-$(jar).art boot-$(jar).oat)
|
||||
LIBART_TARGET_BOOT_ART_EXTRA_FILES += boot.oat
|
||||
LIBART_TARGET_BOOT_ART_VDEX_FILES := $(foreach jar,$(wordlist 2,999,$(LIBART_TARGET_BOOT_JARS)),boot-$(jar).vdex)
|
||||
LIBART_TARGET_BOOT_ART_VDEX_FILES += boot.vdex
|
||||
|
||||
# If we use a boot image profile.
|
||||
my_use_profile_for_boot_image := $(PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE)
|
||||
ifeq (,$(my_use_profile_for_boot_image))
|
||||
# If not set, set the default to true if we are not a PDK build. PDK builds
|
||||
# can't build the profile since they don't have frameworks/base.
|
||||
ifneq (true,$(TARGET_BUILD_PDK))
|
||||
my_use_profile_for_boot_image := true
|
||||
endif
|
||||
endif
|
||||
ifeq (,$(strip $(LIBART_TARGET_BOOT_DEX_FILES)))
|
||||
my_use_profile_for_boot_image := false
|
||||
endif
|
||||
|
||||
ifeq (true,$(my_use_profile_for_boot_image))
|
||||
|
||||
boot_image_profiles := $(PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION)
|
||||
|
||||
ifeq (,$(boot_image_profiles))
|
||||
# If not set, use the default.
|
||||
boot_image_profiles := frameworks/base/config/boot-image-profile.txt
|
||||
endif
|
||||
|
||||
# Location of text based profile for the boot image.
|
||||
my_boot_image_profile_location := $(PRODUCT_OUT)/dex_bootjars/boot-image-profile.txt
|
||||
|
||||
$(my_boot_image_profile_location): $(boot_image_profiles)
|
||||
@echo 'Generating $@ for profman'
|
||||
@rm -rf $@
|
||||
$(hide) cat $^ > $@
|
||||
|
||||
# Code to create the boot image profile, not in dex_preopt_libart_boot.mk since the profile is the same for all archs.
|
||||
my_out_boot_image_profile_location := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/boot.prof
|
||||
$(my_out_boot_image_profile_location): PRIVATE_PROFILE_INPUT_LOCATION := $(my_boot_image_profile_location)
|
||||
$(my_out_boot_image_profile_location): $(PROFMAN) $(LIBART_TARGET_BOOT_DEX_FILES) $(my_boot_image_profile_location)
|
||||
@echo "target profman: $@"
|
||||
@mkdir -p $(dir $@)
|
||||
ANDROID_LOG_TAGS="*:e" $(PROFMAN) \
|
||||
--create-profile-from=$(PRIVATE_PROFILE_INPUT_LOCATION) \
|
||||
$(addprefix --apk=,$(LIBART_TARGET_BOOT_DEX_FILES)) \
|
||||
$(addprefix --dex-location=,$(LIBART_TARGET_BOOT_DEX_LOCATIONS)) \
|
||||
--reference-profile-file=$@
|
||||
|
||||
# We want to install the profile even if we are not using preopt since it is required to generate
|
||||
# the image on the device.
|
||||
my_installed_profile := $(TARGET_OUT)/etc/boot-image.prof
|
||||
$(eval $(call copy-one-file,$(my_out_boot_image_profile_location),$(my_installed_profile)))
|
||||
ALL_DEFAULT_INSTALLED_MODULES += $(my_installed_profile)
|
||||
my_installed := $(call copy-many-files,$(DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED),$(PRODUCT_OUT))
|
||||
ALL_DEFAULT_INSTALLED_MODULES += $(my_installed)
|
||||
|
||||
endif
|
||||
# Install primary arch vdex files into a shared location, and then symlink them to both the primary
|
||||
# and secondary arch directories.
|
||||
my_vdex_copy_pairs := $(DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_$(TARGET_ARCH))
|
||||
my_installed := $(foreach v,$(my_vdex_copy_pairs),$(PRODUCT_OUT)$(call word-colon,2,$(v)))
|
||||
$(firstword $(my_installed)): $(wordlist 2,9999,$(my_installed))
|
||||
|
||||
LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_SHARED_FILES := $(addprefix $(PRODUCT_OUT)/$(DEXPREOPT_BOOT_JAR_DIR)/,$(LIBART_TARGET_BOOT_ART_VDEX_FILES))
|
||||
my_built_vdex_dir := $(dir $(call word-colon,1,$(firstword $(my_vdex_copy_pairs))))
|
||||
my_installed_vdex_dir := $(PRODUCT_OUT)$(dir $(call word-colon,2,$(firstword $(my_vdex_copy_pairs))))
|
||||
|
||||
my_2nd_arch_prefix :=
|
||||
include $(BUILD_SYSTEM)/dex_preopt_libart_boot.mk
|
||||
|
||||
ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true)
|
||||
ifdef TARGET_2ND_ARCH
|
||||
my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
|
||||
include $(BUILD_SYSTEM)/dex_preopt_libart_boot.mk
|
||||
endif
|
||||
endif
|
||||
|
||||
# Copy shared vdex to the directory and create corresponding symlinks in primary and secondary arch.
|
||||
$(LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_SHARED_FILES) : PRIMARY_ARCH_DIR := $(dir $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE))
|
||||
$(LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_SHARED_FILES) : SECOND_ARCH_DIR := $(dir $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE))
|
||||
$(LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_SHARED_FILES) : $(DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME)
|
||||
$(my_installed): $(my_installed_vdex_dir)% : $(my_built_vdex_dir)%
|
||||
@echo "Install: $@"
|
||||
@mkdir -p $(dir $@)
|
||||
@rm -f $@
|
||||
$(hide) cp "$(dir $<)$(notdir $@)" "$@"
|
||||
# Make symlink for both the archs. In the case its single arch the symlink will just get overridden.
|
||||
@mkdir -p $(PRIMARY_ARCH_DIR)
|
||||
$(hide) ln -sf /$(DEXPREOPT_BOOT_JAR_DIR)/$(notdir $@) $(PRIMARY_ARCH_DIR)$(notdir $@)
|
||||
@mkdir -p $(SECOND_ARCH_DIR)
|
||||
$(hide) ln -sf /$(DEXPREOPT_BOOT_JAR_DIR)/$(notdir $@) $(SECOND_ARCH_DIR)$(notdir $@)
|
||||
$(copy-file-to-target)
|
||||
mkdir -p $(dir $@)/$(TARGET_ARCH)
|
||||
ln -sfn ../$(notdir $@) $(dir $@)/$(TARGET_ARCH)
|
||||
ifdef TARGET_2ND_ARCH
|
||||
ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true)
|
||||
mkdir -p $(dir $@)/$(TARGET_2ND_ARCH)
|
||||
ln -sfn ../$(notdir $@) $(dir $@)/$(TARGET_2ND_ARCH)
|
||||
endif
|
||||
endif
|
||||
|
||||
my_dexpreopt_image_extra_deps := $(firstword $(my_installed))
|
||||
|
||||
my_2nd_arch_prefix :=
|
||||
include $(BUILD_SYSTEM)/dex_preopt_libart_boot.mk
|
||||
|
||||
ifdef TARGET_2ND_ARCH
|
||||
ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true)
|
||||
my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
|
||||
include $(BUILD_SYSTEM)/dex_preopt_libart_boot.mk
|
||||
endif
|
||||
endif
|
||||
|
||||
my_2nd_arch_prefix :=
|
||||
|
||||
|
||||
my_vdex_copy_pairs :=
|
||||
my_installed :=
|
||||
my_built_vdex_dir :=
|
||||
my_installed_vdex_dir :=
|
||||
my_dexpreopt_image_extra_deps :=
|
||||
|
|
|
@ -1,119 +1,23 @@
|
|||
# Rules to build boot.art
|
||||
# Rules to install boot.art built by dexpreopt_bootjars.go
|
||||
# Input variables:
|
||||
# my_2nd_arch_prefix: indicates if this is to build for the 2nd arch.
|
||||
# my_dexpreopt_image_extra_deps: extra dependencies to add on the installed boot.art
|
||||
|
||||
# The image "location" is a symbolic path that with multiarchitecture
|
||||
# support doesn't really exist on the device. Typically it is
|
||||
# /system/framework/boot.art and should be the same for all supported
|
||||
# architectures on the device. The concrete architecture specific
|
||||
# content actually ends up in a "filename" that contains an
|
||||
# architecture specific directory name such as arm, arm64, mips,
|
||||
# mips64, x86, x86_64.
|
||||
#
|
||||
# Here are some example values for an x86_64 / x86 configuration:
|
||||
#
|
||||
# DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION=out/target/product/generic_x86_64/dex_bootjars/system/framework/boot.art
|
||||
# DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME=out/target/product/generic_x86_64/dex_bootjars/system/framework/x86_64/boot.art
|
||||
# LIBART_BOOT_IMAGE=/system/framework/x86_64/boot.art
|
||||
#
|
||||
# 2ND_DEFAULT_DEX_PREOPT_BUILT_IMAGE_LOCATION=out/target/product/generic_x86_64/dex_bootjars/system/framework/boot.art
|
||||
# 2ND_DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME=out/target/product/generic_x86_64/dex_bootjars/system/framework/x86/boot.art
|
||||
# 2ND_LIBART_BOOT_IMAGE=/system/framework/x86/boot.art
|
||||
# Install the boot images compiled by Soong
|
||||
# The first file (generally boot.art) is saved as DEFAULT_DEX_PREOPT_INSTALLED_IMAGE,
|
||||
# and the rest are added as dependencies of the first.
|
||||
my_installed := $(call copy-many-files,$(DEXPREOPT_IMAGE_BUILT_INSTALLED_$(TARGET_$(my_2nd_arch_prefix)ARCH)),$(PRODUCT_OUT))
|
||||
$(firstword $(my_installed)): $(wordlist 2,9999,$(my_installed))
|
||||
$(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(firstword $(my_installed))
|
||||
|
||||
$(my_2nd_arch_prefix)LIBART_BOOT_IMAGE_FILENAME := /$(DEXPREOPT_BOOT_JAR_DIR)/$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH)/boot.art
|
||||
# Install the unstripped boot images compiled by Soong into the symbols directory
|
||||
# The first file (generally boot.art) made a dependency of DEFAULT_DEX_PREOPT_INSTALLED_IMAGE,
|
||||
# and the rest are added as dependencies of the first.
|
||||
my_installed := $(call copy-many-files,$(DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_$(TARGET_$(my_2nd_arch_prefix)ARCH)),$(TARGET_OUT_UNSTRIPPED))
|
||||
$(firstword $(my_installed)): $(wordlist 2,9999,$(my_installed))
|
||||
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE): $(firstword $(my_installed))
|
||||
|
||||
# The .oat with symbols
|
||||
$(my_2nd_arch_prefix)LIBART_TARGET_BOOT_OAT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)$(patsubst %.art,%.oat,$($(my_2nd_arch_prefix)LIBART_BOOT_IMAGE_FILENAME))
|
||||
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE): $(my_dexpreopt_image_extra_deps)
|
||||
|
||||
$(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(PRODUCT_OUT)$($(my_2nd_arch_prefix)LIBART_BOOT_IMAGE_FILENAME)
|
||||
$(my_2nd_arch_prefix)LIBART_TARGET_BOOT_ART_EXTRA_INSTALLED_FILES := $(addprefix $(dir $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)),\
|
||||
$(LIBART_TARGET_BOOT_ART_EXTRA_FILES))
|
||||
$(my_2nd_arch_prefix)LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_FILES := $(addprefix $(dir $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)),\
|
||||
$(LIBART_TARGET_BOOT_ART_VDEX_FILES))
|
||||
|
||||
# If we have a dirty-image-objects file, create a parameter.
|
||||
DIRTY_IMAGE_OBJECTS_FLAGS :=
|
||||
ifneq ($(DIRTY_IMAGE_OBJECTS),)
|
||||
DIRTY_IMAGE_OBJECTS_FLAGS := --dirty-image-objects=$(DIRTY_IMAGE_OBJECTS)
|
||||
endif
|
||||
|
||||
# The rule to install boot.art
|
||||
# Depends on installed boot.oat, boot-*.art, boot-*.oat
|
||||
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) : $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) | $(ACP) $($(my_2nd_arch_prefix)LIBART_TARGET_BOOT_ART_EXTRA_INSTALLED_FILES) $($(my_2nd_arch_prefix)LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_SHARED_FILES)
|
||||
@echo "Install: $@"
|
||||
$(copy-file-to-target)
|
||||
|
||||
# The rule to install boot.oat, boot-*.art, boot-*.oat
|
||||
# Depends on built-but-not-installed boot.art
|
||||
$($(my_2nd_arch_prefix)LIBART_TARGET_BOOT_ART_EXTRA_INSTALLED_FILES) : $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) | $(ACP)
|
||||
@echo "Install: $@"
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) $(ACP) -fp $(dir $<)$(notdir $@) $@
|
||||
|
||||
ifeq (,$(my_out_boot_image_profile_location))
|
||||
my_boot_image_flags := --image-classes=$(PRELOADED_CLASSES)
|
||||
else
|
||||
my_boot_image_flags := --compiler-filter=speed-profile
|
||||
my_boot_image_flags += --profile-file=$(my_out_boot_image_profile_location)
|
||||
endif
|
||||
my_boot_image_flags += $(DIRTY_IMAGE_OBJECTS_FLAGS)
|
||||
|
||||
ifneq (addresstrue,$(SANITIZE_TARGET)$(SANITIZE_LITE))
|
||||
# Skip recompiling the boot image for the second sanitization phase. We'll get separate paths
|
||||
# and invalidate first-stage artifacts which are crucial to SANITIZE_LITE builds.
|
||||
# Note: this is technically incorrect. Compiled code contains stack checks which may depend
|
||||
# on ASAN settings.
|
||||
|
||||
# Use ANDROID_LOG_TAGS to suppress most logging by default...
|
||||
ifeq (,$(ART_BOOT_IMAGE_EXTRA_ARGS))
|
||||
DEX2OAT_BOOT_IMAGE_LOG_TAGS := ANDROID_LOG_TAGS="*:e"
|
||||
else
|
||||
# ...unless the boot image is generated specifically for testing, then allow all logging.
|
||||
DEX2OAT_BOOT_IMAGE_LOG_TAGS := ANDROID_LOG_TAGS="*:v"
|
||||
endif
|
||||
|
||||
# An additional message to print on dex2oat failure.
|
||||
DEX2OAT_FAILURE_MESSAGE := ERROR: Dex2oat failed to compile a boot image.
|
||||
DEX2OAT_FAILURE_MESSAGE += It is likely that the boot classpath is inconsistent.
|
||||
ifeq ($(ONE_SHOT_MAKEFILE),)
|
||||
DEX2OAT_FAILURE_MESSAGE += Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifier" to see verification errors.
|
||||
else
|
||||
DEX2OAT_FAILURE_MESSAGE += Build with m, mma, or mmma instead of mm or mmm to remedy the situation.
|
||||
endif
|
||||
|
||||
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME): PRIVATE_BOOT_IMAGE_FLAGS := $(my_boot_image_flags)
|
||||
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME): PRIVATE_2ND_ARCH_VAR_PREFIX := $(my_2nd_arch_prefix)
|
||||
# Use dex2oat debug version for better error reporting
|
||||
# Pass --avoid-storing-invocation to make the output deterministics between
|
||||
# different products that may have different paths on the command line.
|
||||
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) : $(LIBART_TARGET_BOOT_DEX_FILES) $(PRELOADED_CLASSES) $(DIRTY_IMAGE_OBJECTS) $(DEX2OAT_DEPENDENCY) $(my_out_boot_image_profile_location)
|
||||
@echo "target dex2oat: $@"
|
||||
@mkdir -p $(dir $@)
|
||||
@mkdir -p $(dir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED))
|
||||
@rm -f $(dir $@)/*.art $(dir $@)/*.oat $(dir $@)/*.invocation
|
||||
@rm -f $(dir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED))/*.art
|
||||
@rm -f $(dir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED))/*.oat
|
||||
@rm -f $(dir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED))/*.invocation
|
||||
$(hide) $(DEX2OAT_BOOT_IMAGE_LOG_TAGS) $(DEX2OAT) --runtime-arg -Xms$(DEX2OAT_IMAGE_XMS) \
|
||||
--avoid-storing-invocation \
|
||||
--write-invocation-to=$(patsubst %.art,%.invocation,$@) \
|
||||
--runtime-arg -Xmx$(DEX2OAT_IMAGE_XMX) \
|
||||
$(PRIVATE_BOOT_IMAGE_FLAGS) \
|
||||
$(addprefix --dex-file=,$(LIBART_TARGET_BOOT_DEX_FILES)) \
|
||||
$(addprefix --dex-location=,$(LIBART_TARGET_BOOT_DEX_LOCATIONS)) \
|
||||
--generate-debug-info --generate-build-id \
|
||||
--oat-symbols=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED) \
|
||||
--strip \
|
||||
--oat-file=$(patsubst %.art,%.oat,$@) \
|
||||
--oat-location=$(patsubst %.art,%.oat,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_BOOT_IMAGE_FILENAME)) \
|
||||
--image=$@ --base=$(LIBART_IMG_TARGET_BASE_ADDRESS) \
|
||||
--instruction-set=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH) \
|
||||
--instruction-set-variant=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT) \
|
||||
--instruction-set-features=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) \
|
||||
--android-root=$(PRODUCT_OUT)/system \
|
||||
--no-inline-from=core-oj.jar \
|
||||
--abort-on-hard-verifier-error \
|
||||
$(PRODUCT_DEX_PREOPT_BOOT_FLAGS) $(ART_BOOT_IMAGE_EXTRA_ARGS) \
|
||||
|| ( echo "$(DEX2OAT_FAILURE_MESSAGE)" ; false )
|
||||
|
||||
endif
|
||||
my_installed :=
|
||||
my_built_installed :=
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# dexpreopt_odex_install.mk is used to define odex creation rules for JARs and APKs
|
||||
# This file depends on variables set in base_rules.mk
|
||||
# Output variables: LOCAL_DEX_PREOPT, LOCAL_UNCOMPRESS_DEX, built_odex,
|
||||
# dexpreopt_boot_jar_module
|
||||
# Output variables: LOCAL_DEX_PREOPT, LOCAL_UNCOMPRESS_DEX
|
||||
|
||||
ifeq (true,$(LOCAL_USE_EMBEDDED_DEX))
|
||||
LOCAL_UNCOMPRESS_DEX := true
|
||||
|
@ -151,13 +150,13 @@ ifdef LOCAL_DEX_PREOPT
|
|||
# #################################################
|
||||
# Odex for the 1st arch
|
||||
my_dexpreopt_archs += $(TARGET_ARCH)
|
||||
my_dexpreopt_images += $(DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME)
|
||||
my_dexpreopt_images += $(DEXPREOPT_IMAGE_$(TARGET_ARCH))
|
||||
# Odex for the 2nd arch
|
||||
ifdef TARGET_2ND_ARCH
|
||||
ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true)
|
||||
ifneq (first,$(my_module_multilib))
|
||||
my_dexpreopt_archs += $(TARGET_2ND_ARCH)
|
||||
my_dexpreopt_images += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME)
|
||||
my_dexpreopt_images += $(DEXPREOPT_IMAGE_$(TARGET_2ND_ARCH))
|
||||
endif # my_module_multilib is not first.
|
||||
endif # TARGET_TRANSLATE_2ND_ARCH not true
|
||||
endif # TARGET_2ND_ARCH
|
||||
|
@ -167,13 +166,13 @@ ifdef LOCAL_DEX_PREOPT
|
|||
# Save the module multilib since setup_one_odex modifies it.
|
||||
my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX)
|
||||
my_dexpreopt_archs += $(TARGET_$(my_2nd_arch_prefix)ARCH)
|
||||
my_dexpreopt_images += $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME)
|
||||
my_dexpreopt_images += $(DEXPREOPT_IMAGE_$(TARGET_$(my_2nd_arch_prefix)ARCH))
|
||||
ifdef TARGET_2ND_ARCH
|
||||
ifeq ($(my_module_multilib),both)
|
||||
# The non-preferred arch
|
||||
my_2nd_arch_prefix := $(if $(LOCAL_2ND_ARCH_VAR_PREFIX),,$(TARGET_2ND_ARCH_VAR_PREFIX))
|
||||
my_dexpreopt_archs += $(TARGET_$(my_2nd_arch_prefix)ARCH)
|
||||
my_dexpreopt_images += $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME)
|
||||
my_dexpreopt_images += $(DEXPREOPT_IMAGE_$(TARGET_$(my_2nd_arch_prefix)ARCH))
|
||||
endif # LOCAL_MULTILIB is both
|
||||
endif # TARGET_2ND_ARCH
|
||||
endif # LOCAL_MODULE_CLASS
|
||||
|
@ -211,6 +210,8 @@ ifdef LOCAL_DEX_PREOPT
|
|||
$(call end_json_map)
|
||||
$(call add_json_list, Archs, $(my_dexpreopt_archs))
|
||||
$(call add_json_list, DexPreoptImages, $(my_dexpreopt_images))
|
||||
$(call add_json_list, PreoptBootClassPathDexFiles, $(DEXPREOPT_BOOTCLASSPATH_DEX_FILES))
|
||||
$(call add_json_list, PreoptBootClassPathDexLocations,$(DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS))
|
||||
$(call add_json_bool, PreoptExtractedApk, $(my_preopt_for_extracted_apk))
|
||||
$(call add_json_bool, NoCreateAppImage, $(filter false,$(LOCAL_DEX_PREOPT_APP_IMAGE)))
|
||||
$(call add_json_bool, ForceCreateAppImage, $(filter true,$(LOCAL_DEX_PREOPT_APP_IMAGE)))
|
||||
|
@ -251,6 +252,7 @@ ifdef LOCAL_DEX_PREOPT
|
|||
$(foreach lib,$(sort $(LOCAL_USES_LIBRARIES) $(LOCAL_OPTIONAL_USES_LIBRARIES) org.apache.http.legacy android.hidl.base-V1.0-java android.hidl.manager-V1.0-java),\
|
||||
$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/javalib.jar)
|
||||
my_dexpreopt_deps += $(my_dexpreopt_images)
|
||||
my_dexpreopt_deps += $(DEXPREOPT_BOOTCLASSPATH_DEX_FILES)
|
||||
|
||||
$(my_dexpreopt_zip): PRIVATE_MODULE := $(LOCAL_MODULE)
|
||||
$(my_dexpreopt_zip): $(my_dexpreopt_deps)
|
||||
|
|
|
@ -85,13 +85,6 @@ endif # LOCAL_UNCOMPRESS_DEX
|
|||
.KATI_RESTAT: $(common_javalib.jar)
|
||||
|
||||
ifdef LOCAL_DEX_PREOPT
|
||||
ifneq ($(dexpreopt_boot_jar_module),) # boot jar
|
||||
# boot jar's rules are defined in dex_preopt.mk
|
||||
dexpreopted_boot_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(dexpreopt_boot_jar_module)_nodex.jar
|
||||
$(eval $(call copy-one-file,$(dexpreopted_boot_jar),$(LOCAL_BUILT_MODULE)))
|
||||
|
||||
# For libart boot jars, we don't have .odex files.
|
||||
else # ! boot jar
|
||||
|
||||
$(LOCAL_BUILT_MODULE): PRIVATE_STRIP_SCRIPT := $(intermediates)/strip.sh
|
||||
$(LOCAL_BUILT_MODULE): $(intermediates)/strip.sh
|
||||
|
@ -100,8 +93,6 @@ $(LOCAL_BUILT_MODULE): .KATI_DEPFILE := $(LOCAL_BUILT_MODULE).d
|
|||
$(LOCAL_BUILT_MODULE): $(common_javalib.jar)
|
||||
$(PRIVATE_STRIP_SCRIPT) $< $@
|
||||
|
||||
endif # ! boot jar
|
||||
|
||||
else # LOCAL_DEX_PREOPT
|
||||
$(eval $(call copy-one-file,$(common_javalib.jar),$(LOCAL_BUILT_MODULE)))
|
||||
|
||||
|
|
|
@ -469,19 +469,16 @@ endif # LOCAL_PACKAGE_SPLITS
|
|||
else ifeq ($(prebuilt_module_is_dex_javalib),true) # ! LOCAL_MODULE_CLASS != APPS
|
||||
my_dex_jar := $(my_prebuilt_src_file)
|
||||
# This is a target shared library, i.e. a jar with classes.dex.
|
||||
|
||||
ifneq ($(filter $(LOCAL_MODULE),$(PRODUCT_BOOT_JARS)),)
|
||||
$(call pretty-error,Modules in PRODUCT_BOOT_JARS must be defined in Android.bp files)
|
||||
endif
|
||||
|
||||
#######################################
|
||||
# defines built_odex along with rule to install odex
|
||||
include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk
|
||||
#######################################
|
||||
ifdef LOCAL_DEX_PREOPT
|
||||
ifneq ($(dexpreopt_boot_jar_module),) # boot jar
|
||||
# boot jar's rules are defined in dex_preopt.mk
|
||||
dexpreopted_boot_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(dexpreopt_boot_jar_module)_nodex.jar
|
||||
$(built_module) : $(dexpreopted_boot_jar)
|
||||
$(call copy-file-to-target)
|
||||
|
||||
# For libart boot jars, we don't have .odex files.
|
||||
else # ! boot jar
|
||||
|
||||
$(built_module): PRIVATE_STRIP_SCRIPT := $(intermediates)/strip.sh
|
||||
$(built_module): $(intermediates)/strip.sh
|
||||
|
@ -490,7 +487,6 @@ $(built_module): .KATI_DEPFILE := $(built_module).d
|
|||
$(built_module): $(my_prebuilt_src_file)
|
||||
$(PRIVATE_STRIP_SCRIPT) $< $@
|
||||
|
||||
endif # boot jar
|
||||
else # ! LOCAL_DEX_PREOPT
|
||||
$(built_module) : $(my_prebuilt_src_file)
|
||||
$(call copy-file-to-target)
|
||||
|
|
Loading…
Reference in New Issue