From 97c140ccadbf372770badacbdb1590e72b9648ba Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Tue, 15 Nov 2022 18:20:12 +0900 Subject: [PATCH] Define vendor-hwasan-snapshot target By building vendor-hwasan-snapshot target, static hwasan libraries for vendor image variants will be snapshoted. The list of candidate libs must be listed in PRODUCT_VSDK_HWASAN_STATIC_PATHS with module name and source directory path separated by colon. For example, PRODUCT_VSDK_HWASAN_STATIC_PATHS := \ libbase:system/libbase \ libc++_static:external/libcxx Bug: 234772527 Test: SANITIZE_TARGET=hwaddress m vendor-hwasan-snapshot Change-Id: Ic179740ae3bc8f90d2c5bbca7289ea72262ba8aa --- core/tasks/vendor_snapshot.mk | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/core/tasks/vendor_snapshot.mk b/core/tasks/vendor_snapshot.mk index 83c13792a8..d1849ab796 100644 --- a/core/tasks/vendor_snapshot.mk +++ b/core/tasks/vendor_snapshot.mk @@ -27,6 +27,56 @@ vendor-fake-snapshot: $(SOONG_VENDOR_FAKE_SNAPSHOT_ZIP) $(call dist-for-goals, vendor-fake-snapshot, $(SOONG_VENDOR_FAKE_SNAPSHOT_ZIP):fake/$(notdir $(SOONG_VENDOR_FAKE_SNAPSHOT_ZIP))) +# Capture prebuilt vendor static libraries of hwasan variant. +# To build the hwasan variant `SANITIZE_TARGET=hwaddress` must be set. +# vendor-hwasan-snapshot goal zips hwasan static libs listed in +# PRODUCT_VSDK_HWASAN_STATIC_PATHS which has a list of pairs of +# 'module name':'source directory path' +ifeq ($(SANITIZE_TARGET),hwaddress) + +vsdk_hwasan_static_zip := $(PRODUCT_OUT)/vsdk-hwasan-snapshot.zip +vsdk_hwasan_static_dir := $(PRODUCT_OUT)/vsdk-hwasan-snapshot +vsdk_hwasan_variants := \ + android \ + vendor.$(PLATFORM_VNDK_VERSION) \ + $(TARGET_ARCH) \ + $(TARGET_ARCH_VARIANT) \ + $(TARGET_CPU_VARIANT) \ + static \ + hwasan +vsdk_hwasan_variant_name := $(subst _generic_,_,$(subst $(space),_,$(vsdk_hwasan_variants))) + +define get_vendor_hwasan_static_path +$(SOONG_OUT_DIR)/.intermediates/$(call word-colon,2,$(1))/$(call word-colon,1,$(1))/$(vsdk_hwasan_variant_name)/$(call word-colon,1,$(1)).a +endef + +$(vsdk_hwasan_static_zip): PRIVATE_MAKEFILE := $(current_makefile) +$(vsdk_hwasan_static_zip): PRIVATE_HWASAN_DIR := $(vsdk_hwasan_static_dir) +$(vsdk_hwasan_static_zip): $(SOONG_ZIP) $(foreach p, $(PRODUCT_VSDK_HWASAN_STATIC_PATHS), $(call get_vendor_hwasan_static_path,$(p))) + $(if $(PRODUCT_VSDK_HWASAN_STATIC_PATHS),,\ + $(call echo-error,$(PRIVATE_MAKEFILE),\ + "CANNOT generate Vendor HWASAN snapshot. PRODUCT_VSDK_HWASAN_STATIC_PATHS is not defined.") &&\ + exit 1) + @rm -rf $(PRIVATE_HWASAN_DIR) + @mkdir -p $(PRIVATE_HWASAN_DIR) + $(foreach p, $(PRODUCT_VSDK_HWASAN_STATIC_PATHS), \ + cp -f $(call get_vendor_hwasan_static_path,$(p)) $(PRIVATE_HWASAN_DIR) &&) true + $(SOONG_ZIP) -o $@ -C $(PRIVATE_HWASAN_DIR) -D $(PRIVATE_HWASAN_DIR) + +.PHONY: vendor-hwasan-snapshot +vendor-hwasan-snapshot: $(vsdk_hwasan_static_zip) + +$(call dist-for-goals, vendor-hwasan-snapshot, $(vsdk_hwasan_static_zip)) + +else # Not for the HWASAN build +.PHONY: vendor-hwasan-snapshot +vendor-hwasan-snapshot: PRIVATE_MAKEFILE := $(current_makefile) +vendor-hwasan-snapshot: + $(call echo-error,$(PRIVATE_MAKEFILE),\ + "CANNOT generate Vendor HWASAN snapshot. SANITIZE_TARGET must be set to 'hwaddress'.") + exit 1 +endif # SANITIZE_TARGET + else # BOARD_VNDK_VERSION is NOT set to 'current' .PHONY: vendor-snapshot @@ -43,4 +93,10 @@ vendor-fake-snapshot: "CANNOT generate Vendor snapshot. BOARD_VNDK_VERSION must be set to 'current'.") exit 1 +.PHONY: vendor-hwasan-snapshot +vendor-hwasan-snapshot: PRIVATE_MAKEFILE := $(current_makefile) + $(call echo-error,$(PRIVATE_MAKEFILE),\ + "CANNOT generate Vendor HWASAN snapshot. BOARD_VNDK_VERSION must be set to 'current'.") + exit 1 + endif # BOARD_VNDK_VERSION