Loading CleanSpec.mk +4 −0 Original line number Diff line number Diff line Loading @@ -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 # ************************************************ core/dex_preopt_config.mk +29 −44 Original line number Diff line number Diff line 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 Loading Loading @@ -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))))\ Loading Loading @@ -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)) Loading @@ -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 Loading @@ -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)) Loading Loading @@ -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) \ core/dex_preopt_libart.mk +34 −83 Original line number Diff line number Diff line Loading @@ -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) # 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 := $(call copy-many-files,$(DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED),$(PRODUCT_OUT)) ALL_DEFAULT_INSTALLED_MODULES += $(my_installed) # 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))) # 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)) # 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 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)))) # 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 $(my_installed): $(my_installed_vdex_dir)% : $(my_built_vdex_dir)% @echo "Install: $@" @rm -f $@ $(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 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) endif LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_SHARED_FILES := $(addprefix $(PRODUCT_OUT)/$(DEXPREOPT_BOOT_JAR_DIR)/,$(LIBART_TARGET_BOOT_ART_VDEX_FILES)) my_dexpreopt_image_extra_deps := $(firstword $(my_installed)) my_2nd_arch_prefix := include $(BUILD_SYSTEM)/dex_preopt_libart_boot.mk ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true) 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 # 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) @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 $@) my_2nd_arch_prefix := my_vdex_copy_pairs := my_installed := my_built_vdex_dir := my_installed_vdex_dir := my_dexpreopt_image_extra_deps := core/dex_preopt_libart_boot.mk +21 −117 Original line number Diff line number Diff line # 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. # 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 $(my_2nd_arch_prefix)LIBART_BOOT_IMAGE_FILENAME := /$(DEXPREOPT_BOOT_JAR_DIR)/$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH)/boot.art # 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 := $(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_dexpreopt_image_extra_deps: extra dependencies to add on the installed 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)) # 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)) $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE): $(my_dexpreopt_image_extra_deps) my_installed := my_built_installed := core/dex_preopt_odex_install.mk +32 −30 Original line number Diff line number Diff line # 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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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))) Loading Loading @@ -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) Loading Loading
CleanSpec.mk +4 −0 Original line number Diff line number Diff line Loading @@ -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 # ************************************************
core/dex_preopt_config.mk +29 −44 Original line number Diff line number Diff line 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 Loading Loading @@ -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))))\ Loading Loading @@ -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)) Loading @@ -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 Loading @@ -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)) Loading Loading @@ -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) \
core/dex_preopt_libart.mk +34 −83 Original line number Diff line number Diff line Loading @@ -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) # 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 := $(call copy-many-files,$(DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED),$(PRODUCT_OUT)) ALL_DEFAULT_INSTALLED_MODULES += $(my_installed) # 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))) # 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)) # 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 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)))) # 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 $(my_installed): $(my_installed_vdex_dir)% : $(my_built_vdex_dir)% @echo "Install: $@" @rm -f $@ $(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 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) endif LIBART_TARGET_BOOT_ART_VDEX_INSTALLED_SHARED_FILES := $(addprefix $(PRODUCT_OUT)/$(DEXPREOPT_BOOT_JAR_DIR)/,$(LIBART_TARGET_BOOT_ART_VDEX_FILES)) my_dexpreopt_image_extra_deps := $(firstword $(my_installed)) my_2nd_arch_prefix := include $(BUILD_SYSTEM)/dex_preopt_libart_boot.mk ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true) 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 # 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) @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 $@) my_2nd_arch_prefix := my_vdex_copy_pairs := my_installed := my_built_vdex_dir := my_installed_vdex_dir := my_dexpreopt_image_extra_deps :=
core/dex_preopt_libart_boot.mk +21 −117 Original line number Diff line number Diff line # 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. # 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 $(my_2nd_arch_prefix)LIBART_BOOT_IMAGE_FILENAME := /$(DEXPREOPT_BOOT_JAR_DIR)/$($(my_2nd_arch_prefix)DEX2OAT_TARGET_ARCH)/boot.art # 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 := $(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_dexpreopt_image_extra_deps: extra dependencies to add on the installed 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)) # 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)) $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE): $(my_dexpreopt_image_extra_deps) my_installed := my_built_installed :=
core/dex_preopt_odex_install.mk +32 −30 Original line number Diff line number Diff line # 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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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))) Loading Loading @@ -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) Loading