From 74a4de735b4f4024fe9891d361da8f50df5b0c40 Mon Sep 17 00:00:00 2001 From: Trevor Radcliffe Date: Wed, 30 Mar 2022 16:46:32 +0000 Subject: [PATCH 1/4] Make changes to support test_suites for test lib Had to make changes to make to ensure that we don't duplicate Bug: 226402757 Test: Confirmed that libraries are installed to the correct place Change-Id: I64e4a5ab7cac3fb57442d19b0f796fffb0a3f48a --- core/base_rules.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/base_rules.mk b/core/base_rules.mk index c01cde8e9e..e6b8f20785 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -713,6 +713,10 @@ ifeq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS) endif ifdef LOCAL_MULTILIB multi_arch := true +else ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) + ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES) + multi_arch := true + endif endif ifdef multi_arch From 061d7e6f2ba03cdbc748a9373a665e70ff0a13e9 Mon Sep 17 00:00:00 2001 From: Bob Badour Date: Fri, 25 Mar 2022 13:22:59 -0700 Subject: [PATCH 2/4] Support more dependencies for license metadata. Bug: 213388645 Test: m vts reportmissinglicenses Change-Id: I8de06c802d2397d02d9c2152f764b1d5ea2f795c --- core/definitions.mk | 102 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 82 insertions(+), 20 deletions(-) diff --git a/core/definitions.mk b/core/definitions.mk index 2711f57be4..77804e8e19 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -622,24 +622,29 @@ $(2): PRIVATE_INSTALL_MAP := $(_map) $(2): PRIVATE_MODULE_TYPE := $(ALL_MODULES.$(1).MODULE_TYPE) $(2): PRIVATE_MODULE_CLASS := $(ALL_MODULES.$(1).MODULE_CLASS) $(2): PRIVATE_INSTALL_MAP := $(_map) +$(2): PRIVATE_ARGUMENT_FILE := $(call intermediates-dir-for,PACKAGING,notice)/$(2)/arguments $(2): $(BUILD_LICENSE_METADATA) $(2) : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) rm -f $$@ mkdir -p $$(dir $$@) + mkdir -p $$(dir $$(PRIVATE_ARGUMENT_FILE)) + $$(call dump-words-to-file,\ + $$(addprefix -mt ,$$(PRIVATE_MODULE_TYPE))\ + $$(addprefix -mc ,$$(PRIVATE_MODULE_CLASS))\ + $$(addprefix -k ,$$(PRIVATE_KINDS))\ + $$(addprefix -c ,$$(PRIVATE_CONDITIONS))\ + $$(addprefix -n ,$$(PRIVATE_NOTICES))\ + $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS))\ + $$(addprefix -s ,$$(PRIVATE_SOURCES))\ + $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP))\ + $$(addprefix -t ,$$(PRIVATE_TARGETS))\ + $$(addprefix -i ,$$(PRIVATE_INSTALLED))\ + $$(addprefix -r ,$$(PRIVATE_PATH)),\ + $$(PRIVATE_ARGUMENT_FILE)) OUT_DIR=$(OUT_DIR) $(BUILD_LICENSE_METADATA) \ - $$(addprefix -mt ,$$(PRIVATE_MODULE_TYPE)) \ - $$(addprefix -mc ,$$(PRIVATE_MODULE_CLASS)) \ - $$(addprefix -k ,$$(PRIVATE_KINDS)) \ - $$(addprefix -c ,$$(PRIVATE_CONDITIONS)) \ - $$(addprefix -n ,$$(PRIVATE_NOTICES)) \ - $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS)) \ - $$(addprefix -s ,$$(PRIVATE_SOURCES)) \ - $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP)) \ - $$(addprefix -t ,$$(PRIVATE_TARGETS)) \ - $$(addprefix -i ,$$(PRIVATE_INSTALLED)) \ $$(if $$(PRIVATE_IS_CONTAINER),-is_container) \ -p '$$(PRIVATE_PACKAGE_NAME)' \ - $$(addprefix -r ,$$(PRIVATE_PATH)) \ + @$$(PRIVATE_ARGUMENT_FILE) \ -o $$@ endef @@ -693,22 +698,27 @@ $(_meta): PRIVATE_PATH := $(_path) $(_meta): PRIVATE_IS_CONTAINER := $(ALL_NON_MODULES.$(_tgt).IS_CONTAINER) $(_meta): PRIVATE_PACKAGE_NAME := $(strip $(ALL_NON_MODULES.$(_tgt).LICENSE_PACKAGE_NAME)) $(_meta): PRIVATE_INSTALL_MAP := $(strip $(_install_map)) +$(_meta): PRIVATE_ARGUMENT_FILE := $(call intermediates-dir-for,PACKAGING,notice)/$(_meta)/arguments $(_meta): $(BUILD_LICENSE_METADATA) $(_meta) : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) rm -f $$@ mkdir -p $$(dir $$@) + mkdir -p $$(dir $$(PRIVATE_ARGUMENT_FILE)) + $$(call dump-words-to-file,\ + $$(addprefix -k ,$$(PRIVATE_KINDS))\ + $$(addprefix -c ,$$(PRIVATE_CONDITIONS))\ + $$(addprefix -n ,$$(PRIVATE_NOTICES))\ + $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS))\ + $$(addprefix -s ,$$(PRIVATE_SOURCES))\ + $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP))\ + $$(addprefix -t ,$$(PRIVATE_TARGETS))\ + $$(addprefix -r ,$$(PRIVATE_PATH)),\ + $$(PRIVATE_ARGUMENT_FILE)) OUT_DIR=$(OUT_DIR) $(BUILD_LICENSE_METADATA) \ -mt raw -mc unknown \ - $$(addprefix -k ,$$(PRIVATE_KINDS)) \ - $$(addprefix -c ,$$(PRIVATE_CONDITIONS)) \ - $$(addprefix -n ,$$(PRIVATE_NOTICES)) \ - $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS)) \ - $$(addprefix -s ,$$(PRIVATE_SOURCES)) \ - $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP)) \ - $$(addprefix -t ,$$(PRIVATE_TARGETS)) \ $$(if $$(PRIVATE_IS_CONTAINER),-is_container) \ - -p '$$(PRIVATE_PACKAGE_NAME)' \ $$(addprefix -r ,$$(PRIVATE_PATH)) \ + @$$(PRIVATE_ARGUMENT_FILE) \ -o $$@ endef @@ -2368,7 +2378,59 @@ define dump-words-to-file @$(call emit-line,$(wordlist 12001,12500,$(1)),$(2)) @$(call emit-line,$(wordlist 12501,13000,$(1)),$(2)) @$(call emit-line,$(wordlist 13001,13500,$(1)),$(2)) - @$(if $(wordlist 13501,13502,$(1)),$(error Too many words ($(words $(1))))) + @$(call emit-line,$(wordlist 13501,14000,$(1)),$(2)) + @$(call emit-line,$(wordlist 14001,14500,$(1)),$(2)) + @$(call emit-line,$(wordlist 14501,15000,$(1)),$(2)) + @$(call emit-line,$(wordlist 15001,15500,$(1)),$(2)) + @$(call emit-line,$(wordlist 15501,16000,$(1)),$(2)) + @$(call emit-line,$(wordlist 16001,16500,$(1)),$(2)) + @$(call emit-line,$(wordlist 16501,17000,$(1)),$(2)) + @$(call emit-line,$(wordlist 17001,17500,$(1)),$(2)) + @$(call emit-line,$(wordlist 17501,18000,$(1)),$(2)) + @$(call emit-line,$(wordlist 18001,18500,$(1)),$(2)) + @$(call emit-line,$(wordlist 18501,19000,$(1)),$(2)) + @$(call emit-line,$(wordlist 19001,19500,$(1)),$(2)) + @$(call emit-line,$(wordlist 19501,20000,$(1)),$(2)) + @$(call emit-line,$(wordlist 20001,20500,$(1)),$(2)) + @$(call emit-line,$(wordlist 20501,21000,$(1)),$(2)) + @$(call emit-line,$(wordlist 21001,21500,$(1)),$(2)) + @$(call emit-line,$(wordlist 21501,22000,$(1)),$(2)) + @$(call emit-line,$(wordlist 22001,22500,$(1)),$(2)) + @$(call emit-line,$(wordlist 22501,23000,$(1)),$(2)) + @$(call emit-line,$(wordlist 23001,23500,$(1)),$(2)) + @$(call emit-line,$(wordlist 23501,24000,$(1)),$(2)) + @$(call emit-line,$(wordlist 24001,24500,$(1)),$(2)) + @$(call emit-line,$(wordlist 24501,25000,$(1)),$(2)) + @$(call emit-line,$(wordlist 25001,25500,$(1)),$(2)) + @$(call emit-line,$(wordlist 25501,26000,$(1)),$(2)) + @$(call emit-line,$(wordlist 26001,26500,$(1)),$(2)) + @$(call emit-line,$(wordlist 26501,27000,$(1)),$(2)) + @$(call emit-line,$(wordlist 27001,27500,$(1)),$(2)) + @$(call emit-line,$(wordlist 27501,28000,$(1)),$(2)) + @$(call emit-line,$(wordlist 28001,28500,$(1)),$(2)) + @$(call emit-line,$(wordlist 28501,29000,$(1)),$(2)) + @$(call emit-line,$(wordlist 29001,29500,$(1)),$(2)) + @$(call emit-line,$(wordlist 29501,30000,$(1)),$(2)) + @$(call emit-line,$(wordlist 30001,30500,$(1)),$(2)) + @$(call emit-line,$(wordlist 30501,31000,$(1)),$(2)) + @$(call emit-line,$(wordlist 31001,31500,$(1)),$(2)) + @$(call emit-line,$(wordlist 31501,32000,$(1)),$(2)) + @$(call emit-line,$(wordlist 32001,32500,$(1)),$(2)) + @$(call emit-line,$(wordlist 32501,33000,$(1)),$(2)) + @$(call emit-line,$(wordlist 33001,33500,$(1)),$(2)) + @$(call emit-line,$(wordlist 33501,34000,$(1)),$(2)) + @$(call emit-line,$(wordlist 34001,34500,$(1)),$(2)) + @$(call emit-line,$(wordlist 34501,35000,$(1)),$(2)) + @$(call emit-line,$(wordlist 35001,35500,$(1)),$(2)) + @$(call emit-line,$(wordlist 35501,36000,$(1)),$(2)) + @$(call emit-line,$(wordlist 36001,36500,$(1)),$(2)) + @$(call emit-line,$(wordlist 36501,37000,$(1)),$(2)) + @$(call emit-line,$(wordlist 37001,37500,$(1)),$(2)) + @$(call emit-line,$(wordlist 37501,38000,$(1)),$(2)) + @$(call emit-line,$(wordlist 38001,38500,$(1)),$(2)) + @$(call emit-line,$(wordlist 38501,39000,$(1)),$(2)) + @$(call emit-line,$(wordlist 39001,39500,$(1)),$(2)) + @$(if $(wordlist 39501,39502,$(1)),$(error Too many words ($(words $(1))))) endef # Return jar arguments to compress files in a given directory # $(1): directory From e421668192eb334503b916d65d9e7543fafee275 Mon Sep 17 00:00:00 2001 From: Orion Hodson Date: Mon, 4 Apr 2022 13:22:38 +0100 Subject: [PATCH 3/4] Update checkowners.py to support python3 Update generated with 2to3. Bug: N/A Test: manually check OWNERS files Change-Id: Idccc7ba36351854fe2b7a669a99c97f3f3a03d0e --- tools/checkowners.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/checkowners.py b/tools/checkowners.py index d6853d8e87..f037321059 100755 --- a/tools/checkowners.py +++ b/tools/checkowners.py @@ -5,8 +5,8 @@ import argparse import re import sys -import urllib -import urllib2 +import urllib.request, urllib.parse, urllib.error +import urllib.request, urllib.error, urllib.parse parser = argparse.ArgumentParser(description='Check OWNERS file syntax') parser.add_argument('-v', '--verbose', dest='verbose', @@ -25,15 +25,15 @@ checked_addresses = {} def echo(msg): if args.verbose: - print msg + print(msg) def find_address(address): if address not in checked_addresses: request = (gerrit_server + '/accounts/?n=1&q=email:' - + urllib.quote(address)) + + urllib.parse.quote(address)) echo('Checking email address: ' + address) - result = urllib2.urlopen(request).read() + result = urllib.request.urlopen(request).read() checked_addresses[address] = result.find('"_account_id":') >= 0 if checked_addresses[address]: echo('Found email address: ' + address) @@ -43,7 +43,7 @@ def find_address(address): def check_address(fname, num, address): if find_address(address): return 0 - print '%s:%d: ERROR: unknown email address: %s' % (fname, num, address) + print('%s:%d: ERROR: unknown email address: %s' % (fname, num, address)) return 1 @@ -72,7 +72,7 @@ def main(): stripped_line = re.sub('#.*$', '', line).strip() if not patterns.match(stripped_line): error += 1 - print '%s:%d: ERROR: unknown line [%s]' % (fname, num, line.strip()) + print('%s:%d: ERROR: unknown line [%s]' % (fname, num, line.strip())) elif args.check_address: if perfile_pattern.match(stripped_line): for addr in perfile_pattern.match(stripped_line).group(1).split(','): From 3570b3ed86d0322a951a931487dd77e1e1a8e000 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 21 Mar 2022 18:49:17 -0700 Subject: [PATCH 4/4] Produce mappings of hashes to elf symbols and r8 dictionaries Run the symbols_map tool on each unstripped binary and proguard dictionary while copying it to produce a textproto that maps the hash to the symbol/dictionary file location. Combine the textprotos into a mapping file when producing the zipped build artifacts. Bug: 218888599 Test: m dist Change-Id: I78997e2f3b631ed74213903cc8e72415b2d7eee0 --- core/Makefile | 46 ++++++++++++++++++++++++++++------ core/config.mk | 1 + core/definitions.mk | 44 ++++++++++++++++++++++++++++++++ core/dynamic_binary.mk | 4 +-- core/main.mk | 7 ++++-- core/soong_app_prebuilt.mk | 16 ++++++++---- core/soong_cc_rust_prebuilt.mk | 2 +- core/soong_java_prebuilt.mk | 16 ++++++++---- 8 files changed, 113 insertions(+), 23 deletions(-) diff --git a/core/Makefile b/core/Makefile index 4c6ac37efc..7b9648258b 100644 --- a/core/Makefile +++ b/core/Makefile @@ -6136,25 +6136,39 @@ dexpreopt_config_zip: $(DEXPREOPT_CONFIG_ZIP) # ----------------------------------------------------------------- # A zip of the symbols directory. Keep the full paths to make it # more obvious where these files came from. +# Also produces a textproto containing mappings from elf IDs to symbols +# filename, which will allow finding the appropriate symbols to deobfuscate +# a stack trace frame. # + name := $(TARGET_PRODUCT) ifeq ($(TARGET_BUILD_TYPE),debug) name := $(name)_debug endif -name := $(name)-symbols-$(FILE_NAME_TAG) -SYMBOLS_ZIP := $(PRODUCT_OUT)/$(name).zip +# The path to the zip file containing binaries with symbols. +SYMBOLS_ZIP := $(PRODUCT_OUT)/$(name)-symbols-$(FILE_NAME_TAG).zip +# The path to a file containing mappings from elf IDs to filenames. +SYMBOLS_MAPPING := $(PRODUCT_OUT)/$(name)-symbols-mapping-$(FILE_NAME_TAG).textproto +.KATI_READONLY := SYMBOLS_ZIP SYMBOLS_MAPPING # For apps_only build we'll establish the dependency later in build/make/core/main.mk. ifeq (,$(TARGET_BUILD_UNBUNDLED)) $(SYMBOLS_ZIP): $(INTERNAL_ALLIMAGES_FILES) $(updater_dep) endif $(SYMBOLS_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,symbols)/filelist -$(SYMBOLS_ZIP): $(SOONG_ZIP) +$(SYMBOLS_ZIP): PRIVATE_MAPPING_PACKAGING_DIR := $(call intermediates-dir-for,PACKAGING,elf_symbol_mapping) +$(SYMBOLS_ZIP): $(SOONG_ZIP) $(SYMBOLS_MAP) @echo "Package symbols: $@" $(hide) rm -rf $@ $(PRIVATE_LIST_FILE) - $(hide) mkdir -p $(dir $@) $(TARGET_OUT_UNSTRIPPED) $(dir $(PRIVATE_LIST_FILE)) + $(hide) mkdir -p $(TARGET_OUT_UNSTRIPPED) $(dir $(PRIVATE_LIST_FILE)) $(PRIVATE_MAPPING_PACKAGING_DIR) + # Find all of the files in the symbols directory and zip them into the symbols zip. $(hide) find -L $(TARGET_OUT_UNSTRIPPED) -type f | sort >$(PRIVATE_LIST_FILE) $(hide) $(SOONG_ZIP) --ignore_missing_files -d -o $@ -C $(OUT_DIR)/.. -l $(PRIVATE_LIST_FILE) + # Find all of the files in the symbols mapping directory and merge them into the symbols mapping textproto. + $(hide) find -L $(PRIVATE_MAPPING_PACKAGING_DIR) -type f | sort >$(PRIVATE_LIST_FILE) + $(hide) $(SYMBOLS_MAP) -merge $(SYMBOLS_MAPPING) -ignore_missing_files @$(PRIVATE_LIST_FILE) +$(SYMBOLS_ZIP): .KATI_IMPLICIT_OUTPUTS := $(SYMBOLS_MAPPING) + # ----------------------------------------------------------------- # A zip of the coverage directory. # @@ -6247,17 +6261,35 @@ endif # EMMA_INSTRUMENT=true #------------------------------------------------------------------ # A zip of Proguard obfuscation dictionary files. +# Also produces a textproto containing mappings from the hashes of the +# dictionary contents (which are also stored in the dex files on the +# devices) to the filename of the proguard dictionary, which will allow +# finding the appropriate dictionary to deobfuscate a stack trace frame. # + +# The path to the zip file containing proguard dictionaries. PROGUARD_DICT_ZIP := $(PRODUCT_OUT)/$(TARGET_PRODUCT)-proguard-dict-$(FILE_NAME_TAG).zip +# The path to the zip file containing mappings from dictionary hashes to filenames. +PROGUARD_DICT_MAPPING := $(PRODUCT_OUT)/$(TARGET_PRODUCT)-proguard-dict-mapping-$(FILE_NAME_TAG).textproto +.KATI_READONLY := PROGUARD_DICT_ZIP PROGUARD_DICT_MAPPING # For apps_only build we'll establish the dependency later in build/make/core/main.mk. ifeq (,$(TARGET_BUILD_UNBUNDLED)) $(PROGUARD_DICT_ZIP): $(INTERNAL_ALLIMAGES_FILES) $(updater_dep) endif $(PROGUARD_DICT_ZIP): PRIVATE_PACKAGING_DIR := $(call intermediates-dir-for,PACKAGING,proguard_dictionary) -$(PROGUARD_DICT_ZIP): $(SOONG_ZIP) +$(PROGUARD_DICT_ZIP): PRIVATE_MAPPING_PACKAGING_DIR := $(call intermediates-dir-for,PACKAGING,proguard_dictionary_mapping) +$(PROGUARD_DICT_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,proguard_dictionary_filelist)/filelist +$(PROGUARD_DICT_ZIP): $(SOONG_ZIP) $(SYMBOLS_MAP) @echo "Packaging Proguard obfuscation dictionary files." - mkdir -p $(dir $@) $(PRIVATE_PACKAGING_DIR) - $(SOONG_ZIP) --ignore_missing_files -d -o $@ -C $(PRIVATE_PACKAGING_DIR) -P out/target/common/obj -D $(PRIVATE_PACKAGING_DIR) + rm -rf $@ $(PRIVATE_LIST_FILE) + mkdir -p $(PRIVATE_PACKAGING_DIR) $(PRIVATE_MAPPING_PACKAGING_DIR) $(dir $(PRIVATE_LIST_FILE)) + # Zip all of the files in the proguard dictionary directory. + $(SOONG_ZIP) --ignore_missing_files -d -o $@ -C $(PRIVATE_PACKAGING_DIR) -D $(PRIVATE_PACKAGING_DIR) + # Find all of the files in the proguard dictionary mapping directory and merge them into the mapping textproto. + # Strip the PRIVATE_PACKAGING_DIR off the filenames to match soong_zip's -C argument. + $(hide) find -L $(PRIVATE_MAPPING_PACKAGING_DIR) -type f | sort >$(PRIVATE_LIST_FILE) + $(SYMBOLS_MAP) -merge $(PROGUARD_DICT_MAPPING) -strip_prefix $(PRIVATE_PACKAGING_DIR)/ -ignore_missing_files @$(PRIVATE_LIST_FILE) +$(PROGUARD_DICT_ZIP): .KATI_IMPLICIT_OUTPUTS := $(PROGUARD_DICT_MAPPING) #------------------------------------------------------------------ # A zip of Proguard usage files. diff --git a/core/config.mk b/core/config.mk index e2bdcbd5b2..205a2fbc70 100644 --- a/core/config.mk +++ b/core/config.mk @@ -620,6 +620,7 @@ MAKE_RECOVERY_PATCH := $(HOST_OUT_EXECUTABLES)/make_recovery_patch$(HOST_EXECUTA OTA_FROM_TARGET_FILES := $(HOST_OUT_EXECUTABLES)/ota_from_target_files$(HOST_EXECUTABLE_SUFFIX) SPARSE_IMG := $(HOST_OUT_EXECUTABLES)/sparse_img$(HOST_EXECUTABLE_SUFFIX) CHECK_PARTITION_SIZES := $(HOST_OUT_EXECUTABLES)/check_partition_sizes$(HOST_EXECUTABLE_SUFFIX) +SYMBOLS_MAP := $(HOST_OUT_EXECUTABLES)/symbols_map PROGUARD_HOME := external/proguard PROGUARD := $(PROGUARD_HOME)/bin/proguard.sh diff --git a/core/definitions.mk b/core/definitions.mk index 2711f57be4..2369a071d3 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -3111,6 +3111,50 @@ done \ fi endef +# Copy an unstripped binary to the symbols directory while also extracting +# a hash mapping to the mapping directory. +# $(1): unstripped intermediates file +# $(2): path in symbols directory +define copy-unstripped-elf-file-with-mapping +$(call _copy-symbols-file-with-mapping,$(1),$(2),\ + elf,$(patsubst $(TARGET_OUT_UNSTRIPPED)/%,$(call intermediates-dir-for,PACKAGING,elf_symbol_mapping)/%,$(2).textproto)) +endef + +# Copy an R8 dictionary to the packaging directory while also extracting +# a hash mapping to the mapping directory. +# $(1): unstripped intermediates file +# $(2): path in packaging directory +# $(3): path in mappings packaging directory +define copy-r8-dictionary-file-with-mapping +$(call _copy-symbols-file-with-mapping,$(1),$(2),r8,$(3)) +endef + +# Copy an unstripped binary or R8 dictionary to the symbols directory +# while also extracting a hash mapping to the mapping directory. +# $(1): unstripped intermediates file +# $(2): path in symbols directory +# $(3): file type (elf or r8) +# $(4): path in the mappings directory +define _copy-symbols-file-with-mapping +$(2): .KATI_IMPLICIT_OUTPUTS := $(4) +$(2): $(SYMBOLS_MAP) +$(2): $(1) + @echo "Copy symbols with mapping: $$@" + $$(copy-file-to-target) + $(SYMBOLS_MAP) -$(strip $(3)) $(2) -write_if_changed $(4) +.KATI_RESTAT: $(2) +endef + +# Returns the directory to copy proguard dictionaries into +define local-proguard-dictionary-directory +$(call intermediates-dir-for,PACKAGING,proguard_dictionary)/out/target/common/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates +endef + +# Returns the directory to copy proguard dictionary mappings into +define local-proguard-dictionary-mapping-directory +$(call intermediates-dir-for,PACKAGING,proguard_dictionary_mapping)/out/target/common/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates +endef + ########################################################### ## Commands to call R8 diff --git a/core/dynamic_binary.mk b/core/dynamic_binary.mk index 52d7ddc18f..0d2cd7f067 100644 --- a/core/dynamic_binary.mk +++ b/core/dynamic_binary.mk @@ -55,9 +55,7 @@ my_unstripped_path := $(LOCAL_UNSTRIPPED_PATH) endif symbolic_input := $(inject_module) symbolic_output := $(my_unstripped_path)/$(my_installed_module_stem) -$(symbolic_output) : $(symbolic_input) - @echo "target Symbolic: $(PRIVATE_MODULE) ($@)" - $(copy-file-to-target) +$(eval $(call copy-unstripped-elf-file-with-mapping,$(symbolic_input),$(symbolic_output))) ########################################################### ## Store breakpad symbols diff --git a/core/main.mk b/core/main.mk index 72958dab2d..6a2407c9b8 100644 --- a/core/main.mk +++ b/core/main.mk @@ -1761,13 +1761,13 @@ else ifneq ($(TARGET_BUILD_APPS),) endif $(PROGUARD_DICT_ZIP) : $(apps_only_installed_files) - $(call dist-for-goals,apps_only, $(PROGUARD_DICT_ZIP)) + $(call dist-for-goals,apps_only, $(PROGUARD_DICT_ZIP) $(PROGUARD_DICT_MAPPING)) $(PROGUARD_USAGE_ZIP) : $(apps_only_installed_files) $(call dist-for-goals,apps_only, $(PROGUARD_USAGE_ZIP)) $(SYMBOLS_ZIP) : $(apps_only_installed_files) - $(call dist-for-goals,apps_only, $(SYMBOLS_ZIP)) + $(call dist-for-goals,apps_only, $(SYMBOLS_ZIP) $(SYMBOLS_MAPPING)) $(COVERAGE_ZIP) : $(apps_only_installed_files) $(call dist-for-goals,apps_only, $(COVERAGE_ZIP)) @@ -1818,7 +1818,9 @@ else ifeq ($(TARGET_BUILD_UNBUNDLED),$(TARGET_BUILD_UNBUNDLED_IMAGE)) $(INTERNAL_OTA_PARTIAL_PACKAGE_TARGET) \ $(INTERNAL_OTA_RETROFIT_DYNAMIC_PARTITIONS_PACKAGE_TARGET) \ $(SYMBOLS_ZIP) \ + $(SYMBOLS_MAPPING) \ $(PROGUARD_DICT_ZIP) \ + $(PROGUARD_DICT_MAPPING) \ $(PROGUARD_USAGE_ZIP) \ $(COVERAGE_ZIP) \ $(INSTALLED_FILES_FILE) \ @@ -1962,6 +1964,7 @@ sdk: $(ALL_SDK_TARGETS) $(call dist-for-goals,sdk, \ $(ALL_SDK_TARGETS) \ $(SYMBOLS_ZIP) \ + $(SYMBOLS_MAPPING) \ $(COVERAGE_ZIP) \ $(APPCOMPAT_ZIP) \ $(INSTALLED_BUILD_PROP_TARGET) \ diff --git a/core/soong_app_prebuilt.mk b/core/soong_app_prebuilt.mk index 006e1dca24..d771d22f8f 100644 --- a/core/soong_app_prebuilt.mk +++ b/core/soong_app_prebuilt.mk @@ -100,18 +100,24 @@ ifdef LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR endif ifdef LOCAL_SOONG_PROGUARD_DICT + my_proguard_dictionary_directory := $(local-proguard-dictionary-directory) + my_proguard_dictionary_mapping_directory := $(local-proguard-dictionary-mapping-directory) $(eval $(call copy-one-file,$(LOCAL_SOONG_PROGUARD_DICT),\ $(intermediates.COMMON)/proguard_dictionary)) - $(eval $(call copy-one-file,$(LOCAL_SOONG_PROGUARD_DICT),\ - $(call local-packaging-dir,proguard_dictionary)/proguard_dictionary)) + $(eval $(call copy-r8-dictionary-file-with-mapping,\ + $(LOCAL_SOONG_PROGUARD_DICT),\ + $(my_proguard_dictionary_directory)/proguard_dictionary,\ + $(my_proguard_dictionary_mapping_directory)/proguard_dictionary.textproto)) $(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),\ - $(call local-packaging-dir,proguard_dictionary)/classes.jar)) + $(my_proguard_dictionary_directory)/classes.jar)) $(call add-dependency,$(LOCAL_BUILT_MODULE),\ $(intermediates.COMMON)/proguard_dictionary) $(call add-dependency,$(LOCAL_BUILT_MODULE),\ - $(call local-packaging-dir,proguard_dictionary)/proguard_dictionary) + $(my_proguard_dictionary_directory)/proguard_dictionary) $(call add-dependency,$(LOCAL_BUILT_MODULE),\ - $(call local-packaging-dir,proguard_dictionary)/classes.jar) + $(my_proguard_dictionary_mapping_directory)/proguard_dictionary.textproto) + $(call add-dependency,$(LOCAL_BUILT_MODULE),\ + $(my_proguard_dictionary_directory)/classes.jar) endif ifdef LOCAL_SOONG_PROGUARD_USAGE_ZIP diff --git a/core/soong_cc_rust_prebuilt.mk b/core/soong_cc_rust_prebuilt.mk index ca52374f12..7a177ffd31 100644 --- a/core/soong_cc_rust_prebuilt.mk +++ b/core/soong_cc_rust_prebuilt.mk @@ -184,7 +184,7 @@ ifndef LOCAL_IS_HOST_MODULE # drop /root as /root is mounted as / my_unstripped_path := $(patsubst $(TARGET_OUT_UNSTRIPPED)/root/%,$(TARGET_OUT_UNSTRIPPED)/%, $(my_unstripped_path)) symbolic_output := $(my_unstripped_path)/$(my_installed_module_stem) - $(eval $(call copy-one-file,$(LOCAL_SOONG_UNSTRIPPED_BINARY),$(symbolic_output))) + $(eval $(call copy-unstripped-elf-file-with-mapping,$(LOCAL_SOONG_UNSTRIPPED_BINARY),$(symbolic_output))) $(LOCAL_BUILT_MODULE): | $(symbolic_output) ifeq ($(BREAKPAD_GENERATE_SYMBOLS),true) diff --git a/core/soong_java_prebuilt.mk b/core/soong_java_prebuilt.mk index b819cdc85c..a8f475fd9a 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -62,18 +62,24 @@ ifdef LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR endif ifdef LOCAL_SOONG_PROGUARD_DICT + my_proguard_dictionary_directory := $(local-proguard-dictionary-directory) + my_proguard_dictionary_mapping_directory := $(local-proguard-dictionary-mapping-directory) $(eval $(call copy-one-file,$(LOCAL_SOONG_PROGUARD_DICT),\ $(intermediates.COMMON)/proguard_dictionary)) - $(eval $(call copy-one-file,$(LOCAL_SOONG_PROGUARD_DICT),\ - $(call local-packaging-dir,proguard_dictionary)/proguard_dictionary)) + $(eval $(call copy-r8-dictionary-file-with-mapping,\ + $(LOCAL_SOONG_PROGUARD_DICT),\ + $(my_proguard_dictionary_directory)/proguard_dictionary,\ + $(my_proguard_dictionary_mapping_directory)/proguard_dictionary.textproto)) $(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),\ - $(call local-packaging-dir,proguard_dictionary)/classes.jar)) + $(my_proguard_dictionary_directory)/classes.jar)) $(call add-dependency,$(common_javalib.jar),\ $(intermediates.COMMON)/proguard_dictionary) $(call add-dependency,$(common_javalib.jar),\ - $(call local-packaging-dir,proguard_dictionary)/proguard_dictionary) + $(my_proguard_dictionary_directory)/proguard_dictionary) $(call add-dependency,$(common_javalib.jar),\ - $(call local-packaging-dir,proguard_dictionary)/classes.jar) + $(my_proguard_dictionary_mapping_directory)/proguard_dictionary.textproto) + $(call add-dependency,$(common_javalib.jar),\ + $(my_proguard_dictionary_directory)/classes.jar) endif ifdef LOCAL_SOONG_PROGUARD_USAGE_ZIP