diff --git a/core/dex_preopt_libart.mk b/core/dex_preopt_libart.mk index 97e77bac2..36b838caf 100644 --- a/core/dex_preopt_libart.mk +++ b/core/dex_preopt_libart.mk @@ -67,6 +67,13 @@ LIBART_TARGET_BOOT_JARS := $(patsubst core, core-libart,$(DEXPREOPT_BOOT_JARS_MO LIBART_TARGET_BOOT_DEX_LOCATIONS := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),/$(DEXPREOPT_BOOT_JAR_DIR)/$(jar).jar) LIBART_TARGET_BOOT_DEX_FILES := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),$(call intermediates-dir-for,JAVA_LIBRARIES,$(jar),,COMMON)/javalib.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-.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) +LIBART_TARGET_BOOT_ART_EXTRA_FILES += boot.oat $(patsubst %.art,%.oat,$(LIBART_TARGET_BOOT_ART_EXTRA_FILES)) + my_2nd_arch_prefix := include $(BUILD_SYSTEM)/dex_preopt_libart_boot.mk diff --git a/core/dex_preopt_libart_boot.mk b/core/dex_preopt_libart_boot.mk index f8fc655e3..8948ba5bf 100644 --- a/core/dex_preopt_libart_boot.mk +++ b/core/dex_preopt_libart_boot.mk @@ -28,6 +28,8 @@ $(my_2nd_arch_prefix)LIBART_BOOT_IMAGE_FILENAME := /$(DEXPREOPT_BOOT_JAR_DIR)/$( $(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 := $(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)) # Compile boot.oat as position-independent code if WITH_DEXPREOPT_PIC=true ifeq (true,$(WITH_DEXPREOPT_PIC)) @@ -40,10 +42,18 @@ ifneq ($(COMPILED_CLASSES),) COMPILED_CLASSES_FLAGS := --compiled-classes=$(COMPILED_CLASSES) endif -# The rule to install boot.art and boot.oat -$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) : $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) | $(ACP) - $(hide) $(ACP) -fp $(dir $<)/*.art $(dir $@) - $(hide) $(ACP) -fp $(dir $<)/*.oat $(dir $@) +# 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) + @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 $@) $@ $($(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