Loading core/dex_preopt.mk +19 −13 Original line number Diff line number Diff line Loading @@ -21,32 +21,38 @@ ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(DEXPREOPT_IMAGE_PROFIL my_boot_image_arch := TARGET_ARCH my_boot_image_out := $(PRODUCT_OUT) my_boot_image_syms := $(TARGET_OUT_UNSTRIPPED) my_boot_image_root := DEFAULT_DEX_PREOPT_INSTALLED_IMAGE DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE := \ $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) ifdef TARGET_2ND_ARCH my_boot_image_arch := TARGET_2ND_ARCH my_boot_image_root := 2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE 2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) 2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE := \ $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) endif # Install boot images for testing on host. We exclude framework image as it is not part of art manifest. my_boot_image_arch := HOST_ARCH my_boot_image_out := $(HOST_OUT) my_boot_image_syms := $(HOST_OUT)/symbols my_boot_image_root := HOST_BOOT_IMAGE HOST_BOOT_IMAGE := $(foreach my_boot_image_name,art_host,$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) HOST_BOOT_IMAGE_MODULE := \ $(foreach my_boot_image_name,art_host,$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) HOST_BOOT_IMAGE := $(call module-installed-files,$(HOST_BOOT_IMAGE_MODULE)) ifdef HOST_2ND_ARCH my_boot_image_arch := HOST_2ND_ARCH my_boot_image_root := 2ND_HOST_BOOT_IMAGE 2ND_HOST_BOOT_IMAGE := $(foreach my_boot_image_name,art_host,$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) 2ND_HOST_BOOT_IMAGE_MODULE := \ $(foreach my_boot_image_name,art_host,$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) 2ND_HOST_BOOT_IMAGE := $(call module-installed-files,$(2ND_HOST_BOOT_IMAGE_MODULE)) endif my_boot_image_arch := my_boot_image_out := my_boot_image_syms := my_boot_image_root := my_boot_image_module := # Build the boot.zip which contains the boot jars and their compilation output # We can do this only if preopt is enabled and if the product uses libart config (which sets the Loading core/dex_preopt_libart.mk +61 −24 Original line number Diff line number Diff line Loading @@ -5,38 +5,75 @@ # my_boot_image_arch: the architecture to install (e.g. TARGET_ARCH, not expanded) # my_boot_image_out: the install directory (e.g. $(PRODUCT_OUT)) # my_boot_image_syms: the symbols director (e.g. $(TARGET_OUT_UNSTRIPPED)) # my_boot_image_root: make variable used to store installed image path # # Output variables: # my_boot_image_module: the created module name. Empty if no module is created. # # Install the boot images compiled by Soong. # Create a module named dexpreopt_bootjar.$(my_boot_image_name)_$($(my_boot_image_arch)) # that installs all of boot image files. # If there is no file to install for $(my_boot_image_name), for example when # building an unbundled build, then no module is created. # #################################### # Install $(1) to $(2) so that it is shared between architectures. # Returns the target path of the shared vdex file and installed symlink. define copy-vdex-file my_vdex_shared := $$(dir $$(patsubst %/,%,$$(dir $(2))))$$(notdir $(2)) # Remove the arch dir. ifneq ($(my_boot_image_arch),$(filter $(my_boot_image_arch), TARGET_2ND_ARCH HOST_2ND_ARCH)) $$(my_vdex_shared): $(1) # Copy $(1) to directory one level up (i.e. with the arch dir removed). @echo "Install: $$@" $$(copy-file-to-target) endif $(2): $$(my_vdex_shared) # Create symlink at $(2) which points to the actual physical copy. @echo "Symlink: $$@" mkdir -p $$(dir $$@) ln -sfn ../$$(notdir $$@) $$@ my_vdex_shared := $(strip \ $(eval # Remove the arch dir) \ $(eval my_vdex_shared := $(dir $(patsubst %/,%,$(dir $(2))))$(notdir $(2))) \ $(if $(filter-out %_2ND_ARCH,$(my_boot_image_arch)), \ $(eval # Copy $(1) to directory one level up (i.e. with the arch dir removed).) \ $(eval $(call copy-one-file,$(1),$(my_vdex_shared))) \ ) \ $(eval # Create symlink at $(2) which points to the actual physical copy.) \ $(call symlink-file,$(my_vdex_shared),../$(notdir $(2)),$(2)) \ $(my_vdex_shared) $(2) \ ) endef # Same as 'copy-many-files' but it uses the vdex-specific helper above. define copy-vdex-files $(foreach v,$(1),$(eval $(call copy-vdex-file, $(call word-colon,1,$(v)), $(2)$(call word-colon,2,$(v))))) $(foreach v,$(1),$(2)$(call word-colon,2,$(v))) $(foreach v,$(1),$(call copy-vdex-file,$(call word-colon,1,$(v)),$(2)$(call word-colon,2,$(v)))) endef # Install the boot images compiled by Soong. # The first file is saved in $(my_boot_image_root) and the rest are added as it's dependencies. my_suffix := BUILT_INSTALLED_$(my_boot_image_name)_$($(my_boot_image_arch)) my_installed := $(call copy-many-files,$(DEXPREOPT_IMAGE_$(my_suffix)),$(my_boot_image_out)) my_installed += $(call copy-many-files,$(DEXPREOPT_IMAGE_UNSTRIPPED_$(my_suffix)),$(my_boot_image_syms)) my_installed += $(call copy-vdex-files,$(DEXPREOPT_IMAGE_VDEX_$(my_suffix)),$(my_boot_image_out)) $(my_boot_image_root) += $(firstword $(my_installed)) $(firstword $(my_installed)): $(wordlist 2,9999,$(my_installed)) my_installed := my_suffix := my_boot_image_module := my_suffix := $(my_boot_image_name)_$($(my_boot_image_arch)) my_copy_pairs := $(strip $(DEXPREOPT_IMAGE_BUILT_INSTALLED_$(my_suffix))) # Generate the boot image module only if there is any file to install. ifneq (,$(my_copy_pairs)) my_first_pair := $(firstword $(my_copy_pairs)) my_rest_pairs := $(wordlist 2,$(words $(my_copy_pairs)),$(my_copy_pairs)) my_first_src := $(call word-colon,1,$(my_first_pair)) my_first_dest := $(my_boot_image_out)$(call word-colon,2,$(my_first_pair)) my_installed := $(call copy-many-files,$(my_rest_pairs),$(my_boot_image_out)) my_installed += $(call copy-vdex-files,$(DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_$(my_suffix)),$(my_boot_image_out)) my_unstripped_installed := $(call copy-many-files,$(DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_$(my_suffix)),$(my_boot_image_syms)) # We don't have a LOCAL_PATH for the auto-generated modules, so let it be the $(BUILD_SYSTEM). LOCAL_PATH := $(BUILD_SYSTEM) include $(CLEAR_VARS) LOCAL_MODULE := dexpreopt_bootjar.$(my_suffix) LOCAL_PREBUILT_MODULE_FILE := $(my_first_src) LOCAL_MODULE_PATH := $(dir $(my_first_dest)) LOCAL_MODULE_STEM := $(notdir $(my_first_dest)) ifneq (,$(strip $(filter HOST_%,$(my_boot_image_arch)))) LOCAL_IS_HOST_MODULE := true endif LOCAL_MODULE_CLASS := ETC include $(BUILD_PREBUILT) $(LOCAL_BUILT_MODULE): $(my_unstripped_installed) # Installing boot.art causes all boot image bits to be installed. # Keep this old behavior in case anyone still needs it. $(LOCAL_INSTALLED_MODULE): $(my_installed) ALL_MODULES.$(my_register_name).INSTALLED += $(my_installed) $(my_all_targets): $(my_installed) my_boot_image_module := $(LOCAL_MODULE) endif # my_copy_pairs != empty core/main.mk +6 −3 Original line number Diff line number Diff line Loading @@ -150,9 +150,6 @@ endif # Bring in standard build system definitions. include $(BUILD_SYSTEM)/definitions.mk # Bring in dex_preopt.mk include $(BUILD_SYSTEM)/dex_preopt.mk ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),) $(info ***************************************************************) $(info ***************************************************************) Loading Loading @@ -473,6 +470,12 @@ endif # Typical build; include any Android.mk files we can find. # # Bring in dex_preopt.mk # This creates some modules so it needs to be included after # should-install-to-system is defined (in order for base_rules.mk to function # properly), but before readonly-final-product-vars is called. include $(BUILD_SYSTEM)/dex_preopt.mk # Strip and readonly a few more variables so they won't be modified. $(readonly-final-product-vars) ADDITIONAL_SYSTEM_PROPERTIES := $(strip $(ADDITIONAL_SYSTEM_PROPERTIES)) Loading core/soong_java_prebuilt.mk +12 −10 Original line number Diff line number Diff line Loading @@ -94,16 +94,18 @@ ifdef LOCAL_SOONG_DEX_JAR boot_jars := $(foreach pair,$(PRODUCT_BOOT_JARS), $(call word-colon,2,$(pair))) ifneq ($(filter $(LOCAL_MODULE),$(boot_jars)),) # is_boot_jar ifeq (true,$(WITH_DEXPREOPT)) # For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE). # We use this installed_odex trick to get boot.art installed. installed_odex := $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) # Append the odex for the 2nd arch if we have one. installed_odex += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) # Make sure to install the .odex and .vdex when you run "make <module_name>" $(my_all_targets): $(installed_odex) # $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) contains modules that installs # all of bootjars' dexpreopt files (.art, .oat, .vdex, ...) # Add them to the required list so they are installed alongside this module. ALL_MODULES.$(my_register_name).REQUIRED_FROM_TARGET += \ $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) \ $(2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) # Copy $(LOCAL_BUILT_MODULE) and its dependencies when installing boot.art $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE): $(LOCAL_BUILT_MODULE) # so that dependencies of $(LOCAL_BUILT_MODULE) (which may include # jacoco-report-classes.jar) are copied for every build. $(foreach m,$(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) $(2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE), \ $(eval $(call add-dependency,$(firstword $(call module-installed-files,$(m))),$(LOCAL_BUILT_MODULE))) \ ) endif endif # is_boot_jar Loading Loading
core/dex_preopt.mk +19 −13 Original line number Diff line number Diff line Loading @@ -21,32 +21,38 @@ ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(DEXPREOPT_IMAGE_PROFIL my_boot_image_arch := TARGET_ARCH my_boot_image_out := $(PRODUCT_OUT) my_boot_image_syms := $(TARGET_OUT_UNSTRIPPED) my_boot_image_root := DEFAULT_DEX_PREOPT_INSTALLED_IMAGE DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE := \ $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) ifdef TARGET_2ND_ARCH my_boot_image_arch := TARGET_2ND_ARCH my_boot_image_root := 2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE 2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE := $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) 2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE := \ $(foreach my_boot_image_name,$(DEXPREOPT_IMAGE_NAMES),$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) endif # Install boot images for testing on host. We exclude framework image as it is not part of art manifest. my_boot_image_arch := HOST_ARCH my_boot_image_out := $(HOST_OUT) my_boot_image_syms := $(HOST_OUT)/symbols my_boot_image_root := HOST_BOOT_IMAGE HOST_BOOT_IMAGE := $(foreach my_boot_image_name,art_host,$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) HOST_BOOT_IMAGE_MODULE := \ $(foreach my_boot_image_name,art_host,$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) HOST_BOOT_IMAGE := $(call module-installed-files,$(HOST_BOOT_IMAGE_MODULE)) ifdef HOST_2ND_ARCH my_boot_image_arch := HOST_2ND_ARCH my_boot_image_root := 2ND_HOST_BOOT_IMAGE 2ND_HOST_BOOT_IMAGE := $(foreach my_boot_image_name,art_host,$(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk)) 2ND_HOST_BOOT_IMAGE_MODULE := \ $(foreach my_boot_image_name,art_host,$(strip \ $(eval include $(BUILD_SYSTEM)/dex_preopt_libart.mk) \ $(my_boot_image_module))) 2ND_HOST_BOOT_IMAGE := $(call module-installed-files,$(2ND_HOST_BOOT_IMAGE_MODULE)) endif my_boot_image_arch := my_boot_image_out := my_boot_image_syms := my_boot_image_root := my_boot_image_module := # Build the boot.zip which contains the boot jars and their compilation output # We can do this only if preopt is enabled and if the product uses libart config (which sets the Loading
core/dex_preopt_libart.mk +61 −24 Original line number Diff line number Diff line Loading @@ -5,38 +5,75 @@ # my_boot_image_arch: the architecture to install (e.g. TARGET_ARCH, not expanded) # my_boot_image_out: the install directory (e.g. $(PRODUCT_OUT)) # my_boot_image_syms: the symbols director (e.g. $(TARGET_OUT_UNSTRIPPED)) # my_boot_image_root: make variable used to store installed image path # # Output variables: # my_boot_image_module: the created module name. Empty if no module is created. # # Install the boot images compiled by Soong. # Create a module named dexpreopt_bootjar.$(my_boot_image_name)_$($(my_boot_image_arch)) # that installs all of boot image files. # If there is no file to install for $(my_boot_image_name), for example when # building an unbundled build, then no module is created. # #################################### # Install $(1) to $(2) so that it is shared between architectures. # Returns the target path of the shared vdex file and installed symlink. define copy-vdex-file my_vdex_shared := $$(dir $$(patsubst %/,%,$$(dir $(2))))$$(notdir $(2)) # Remove the arch dir. ifneq ($(my_boot_image_arch),$(filter $(my_boot_image_arch), TARGET_2ND_ARCH HOST_2ND_ARCH)) $$(my_vdex_shared): $(1) # Copy $(1) to directory one level up (i.e. with the arch dir removed). @echo "Install: $$@" $$(copy-file-to-target) endif $(2): $$(my_vdex_shared) # Create symlink at $(2) which points to the actual physical copy. @echo "Symlink: $$@" mkdir -p $$(dir $$@) ln -sfn ../$$(notdir $$@) $$@ my_vdex_shared := $(strip \ $(eval # Remove the arch dir) \ $(eval my_vdex_shared := $(dir $(patsubst %/,%,$(dir $(2))))$(notdir $(2))) \ $(if $(filter-out %_2ND_ARCH,$(my_boot_image_arch)), \ $(eval # Copy $(1) to directory one level up (i.e. with the arch dir removed).) \ $(eval $(call copy-one-file,$(1),$(my_vdex_shared))) \ ) \ $(eval # Create symlink at $(2) which points to the actual physical copy.) \ $(call symlink-file,$(my_vdex_shared),../$(notdir $(2)),$(2)) \ $(my_vdex_shared) $(2) \ ) endef # Same as 'copy-many-files' but it uses the vdex-specific helper above. define copy-vdex-files $(foreach v,$(1),$(eval $(call copy-vdex-file, $(call word-colon,1,$(v)), $(2)$(call word-colon,2,$(v))))) $(foreach v,$(1),$(2)$(call word-colon,2,$(v))) $(foreach v,$(1),$(call copy-vdex-file,$(call word-colon,1,$(v)),$(2)$(call word-colon,2,$(v)))) endef # Install the boot images compiled by Soong. # The first file is saved in $(my_boot_image_root) and the rest are added as it's dependencies. my_suffix := BUILT_INSTALLED_$(my_boot_image_name)_$($(my_boot_image_arch)) my_installed := $(call copy-many-files,$(DEXPREOPT_IMAGE_$(my_suffix)),$(my_boot_image_out)) my_installed += $(call copy-many-files,$(DEXPREOPT_IMAGE_UNSTRIPPED_$(my_suffix)),$(my_boot_image_syms)) my_installed += $(call copy-vdex-files,$(DEXPREOPT_IMAGE_VDEX_$(my_suffix)),$(my_boot_image_out)) $(my_boot_image_root) += $(firstword $(my_installed)) $(firstword $(my_installed)): $(wordlist 2,9999,$(my_installed)) my_installed := my_suffix := my_boot_image_module := my_suffix := $(my_boot_image_name)_$($(my_boot_image_arch)) my_copy_pairs := $(strip $(DEXPREOPT_IMAGE_BUILT_INSTALLED_$(my_suffix))) # Generate the boot image module only if there is any file to install. ifneq (,$(my_copy_pairs)) my_first_pair := $(firstword $(my_copy_pairs)) my_rest_pairs := $(wordlist 2,$(words $(my_copy_pairs)),$(my_copy_pairs)) my_first_src := $(call word-colon,1,$(my_first_pair)) my_first_dest := $(my_boot_image_out)$(call word-colon,2,$(my_first_pair)) my_installed := $(call copy-many-files,$(my_rest_pairs),$(my_boot_image_out)) my_installed += $(call copy-vdex-files,$(DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_$(my_suffix)),$(my_boot_image_out)) my_unstripped_installed := $(call copy-many-files,$(DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_$(my_suffix)),$(my_boot_image_syms)) # We don't have a LOCAL_PATH for the auto-generated modules, so let it be the $(BUILD_SYSTEM). LOCAL_PATH := $(BUILD_SYSTEM) include $(CLEAR_VARS) LOCAL_MODULE := dexpreopt_bootjar.$(my_suffix) LOCAL_PREBUILT_MODULE_FILE := $(my_first_src) LOCAL_MODULE_PATH := $(dir $(my_first_dest)) LOCAL_MODULE_STEM := $(notdir $(my_first_dest)) ifneq (,$(strip $(filter HOST_%,$(my_boot_image_arch)))) LOCAL_IS_HOST_MODULE := true endif LOCAL_MODULE_CLASS := ETC include $(BUILD_PREBUILT) $(LOCAL_BUILT_MODULE): $(my_unstripped_installed) # Installing boot.art causes all boot image bits to be installed. # Keep this old behavior in case anyone still needs it. $(LOCAL_INSTALLED_MODULE): $(my_installed) ALL_MODULES.$(my_register_name).INSTALLED += $(my_installed) $(my_all_targets): $(my_installed) my_boot_image_module := $(LOCAL_MODULE) endif # my_copy_pairs != empty
core/main.mk +6 −3 Original line number Diff line number Diff line Loading @@ -150,9 +150,6 @@ endif # Bring in standard build system definitions. include $(BUILD_SYSTEM)/definitions.mk # Bring in dex_preopt.mk include $(BUILD_SYSTEM)/dex_preopt.mk ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),) $(info ***************************************************************) $(info ***************************************************************) Loading Loading @@ -473,6 +470,12 @@ endif # Typical build; include any Android.mk files we can find. # # Bring in dex_preopt.mk # This creates some modules so it needs to be included after # should-install-to-system is defined (in order for base_rules.mk to function # properly), but before readonly-final-product-vars is called. include $(BUILD_SYSTEM)/dex_preopt.mk # Strip and readonly a few more variables so they won't be modified. $(readonly-final-product-vars) ADDITIONAL_SYSTEM_PROPERTIES := $(strip $(ADDITIONAL_SYSTEM_PROPERTIES)) Loading
core/soong_java_prebuilt.mk +12 −10 Original line number Diff line number Diff line Loading @@ -94,16 +94,18 @@ ifdef LOCAL_SOONG_DEX_JAR boot_jars := $(foreach pair,$(PRODUCT_BOOT_JARS), $(call word-colon,2,$(pair))) ifneq ($(filter $(LOCAL_MODULE),$(boot_jars)),) # is_boot_jar ifeq (true,$(WITH_DEXPREOPT)) # For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE). # We use this installed_odex trick to get boot.art installed. installed_odex := $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) # Append the odex for the 2nd arch if we have one. installed_odex += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) # Make sure to install the .odex and .vdex when you run "make <module_name>" $(my_all_targets): $(installed_odex) # $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) contains modules that installs # all of bootjars' dexpreopt files (.art, .oat, .vdex, ...) # Add them to the required list so they are installed alongside this module. ALL_MODULES.$(my_register_name).REQUIRED_FROM_TARGET += \ $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) \ $(2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) # Copy $(LOCAL_BUILT_MODULE) and its dependencies when installing boot.art $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE): $(LOCAL_BUILT_MODULE) # so that dependencies of $(LOCAL_BUILT_MODULE) (which may include # jacoco-report-classes.jar) are copied for every build. $(foreach m,$(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE) $(2ND_DEFAULT_DEX_PREOPT_INSTALLED_IMAGE_MODULE), \ $(eval $(call add-dependency,$(firstword $(call module-installed-files,$(m))),$(LOCAL_BUILT_MODULE))) \ ) endif endif # is_boot_jar Loading