Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 503b7792 authored by Colin Cross's avatar Colin Cross Committed by Gerrit Code Review
Browse files

Merge "Track licenses of dexpreopted bootjars"

parents cdd28862 c6f0d967
Loading
Loading
Loading
Loading
+55 −25
Original line number Diff line number Diff line
@@ -17,52 +17,83 @@
#
####################################

# 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
# Takes a list of src:dest install pairs and returns a new list with a path
# prefixed to each dest value.
# $(1): list of src:dest install pairs
# $(2): path to prefix to each dest value
define prefix-copy-many-files-dest
$(foreach v,$(1),$(call word-colon,1,$(v)):$(2)$(call word-colon,2,$(v)))
endef

# Converts an architecture-specific vdex path into a location that can be shared
# between architectures.
define vdex-shared-install-path
$(dir $(patsubst %/,%,$(dir $(1))))$(notdir $(1))
endef

# Takes a list of src:dest install pairs of vdex files and returns a new list
# where each dest has been rewritten to the shared location for vdex files.
define vdex-copy-many-files-shared-dest
$(foreach v,$(1),$(call word-colon,1,$(v)):$(call vdex-shared-install-path,$(call word-colon,2,$(v))))
endef

# Creates a rule to symlink an architecture specific vdex file to the shared
# location for that vdex file.
define symlink-vdex-file
$(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) \
)
  $(call symlink-file,\
    $(call vdex-shared-install-path,$(1)),\
    ../$(notdir $(1)),\
    $(1))\
  $(1))
endef

# Same as 'copy-many-files' but it uses the vdex-specific helper above.
define copy-vdex-files
$(foreach v,$(1),$(call copy-vdex-file,$(call word-colon,1,$(v)),$(2)$(call word-colon,2,$(v))))
# Takes a list of src:dest install pairs of vdex files and creates rules to
# symlink each dest to the shared location for that vdex file.
define symlink-vdex-files
$(foreach v,$(1),$(call symlink-vdex-file,$(call word-colon,2,$(v))))
endef

my_boot_image_module :=

my_suffix := $(my_boot_image_name)_$($(my_boot_image_arch))
my_copy_pairs := $(strip $(DEXPREOPT_IMAGE_BUILT_INSTALLED_$(my_suffix)))
my_copy_pairs := $(call prefix-copy-many-files-dest,$(DEXPREOPT_IMAGE_BUILT_INSTALLED_$(my_suffix)),$(my_boot_image_out))
my_vdex_copy_pairs := $(call prefix-copy-many-files-dest,$(DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_$(my_suffix)),$(my_boot_image_out))
my_vdex_copy_shared_pairs := $(call vdex-copy-many-files-shared-dest,$(my_vdex_copy_pairs))
ifeq (,$(filter %_2ND_ARCH,$(my_boot_image_arch)))
  # Only install the vdex to the shared location for the primary architecture.
  my_copy_pairs += $(my_vdex_copy_shared_pairs)
endif

my_unstripped_copy_pairs := $(call prefix-copy-many-files-dest,$(DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_$(my_suffix)),$(my_boot_image_syms))

# Generate the boot image module only if there is any file to install.
ifneq (,$(my_copy_pairs))
ifneq (,$(strip $(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_first_dest := $(call word-colon,2,$(my_first_pair))

  my_installed := $(call copy-many-files,$(my_copy_pairs))
  my_unstripped_installed := $(call copy-many-files,$(my_unstripped_copy_pairs))

  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))
  my_symlinks := $(call symlink-vdex-files,$(my_vdex_copy_pairs))

  # We don't have a LOCAL_PATH for the auto-generated modules, so let it be the $(BUILD_SYSTEM).
  LOCAL_PATH := $(BUILD_SYSTEM)
  # Hack to let these pseudo-modules wrapped around Soong modules use LOCAL_SOONG_INSTALLED_MODULE.
  LOCAL_MODULE_MAKEFILE := $(SOONG_ANDROID_MK)

  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))
  LOCAL_SOONG_INSTALL_PAIRS := $(my_copy_pairs)
  LOCAL_SOONG_INSTALL_SYMLINKS := $(my_symlinks)
  LOCAL_SOONG_INSTALLED_MODULE := $(my_first_dest)
  LOCAL_SOONG_LICENSE_METADATA := $(DEXPREOPT_IMAGE_LICENSE_METADATA_$(my_suffix))
  ifneq (,$(strip $(filter HOST_%,$(my_boot_image_arch))))
    LOCAL_IS_HOST_MODULE := true
  endif
@@ -71,9 +102,8 @@ ifneq (,$(my_copy_pairs))
  $(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)
  $(LOCAL_INSTALLED_MODULE): $(wordlist 2,$(words $(my_installed)),$(my_installed)) $(my_symlinks)
  $(my_all_targets): $(my_installed) $(my_symlinks)

  my_boot_image_module := $(LOCAL_MODULE)
endif  # my_copy_pairs != empty