From 07ece13f06a165b9a7c5c0216a2e7b338f01b5b5 Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Thu, 18 Jul 2019 13:36:50 +0800 Subject: [PATCH] Ensure no redundant ABI reference dumps This commit ensures that all ABI dumps under prebuilts/abi-dumps/ have corresponding NDK/VNDK libraries. When an NDK/VNDK library is removed but its ABI dump isn't, the build system reports an error. The build system does not check whether all NDK/VNDK libraries have ABI reference dumps because the owners of the libraries may intend to disable ABI check in some cases. Test: touch prebuilts/abi-dumps/vndk/R/32/x86/test.so.lsdump && make Bug: 132140703 Change-Id: I615ac8b509f151b75f57f35cd78c518fae798974 --- target/product/gsi/Android.mk | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/target/product/gsi/Android.mk b/target/product/gsi/Android.mk index 56932342c..ad649374c 100644 --- a/target/product/gsi/Android.mk +++ b/target/product/gsi/Android.mk @@ -38,6 +38,7 @@ endif droidcore: check-vndk-list check-vndk-list-timestamp := $(call intermediates-dir-for,PACKAGING,vndk)/check-list-timestamp +check-vndk-abi-dump-list-timestamp := $(call intermediates-dir-for,PACKAGING,vndk)/check-abi-dump-list-timestamp ifeq ($(TARGET_IS_64_BIT)|$(TARGET_2ND_ARCH),true|) # TODO(b/110429754) remove this condition when we support 64-bit-only device @@ -50,6 +51,9 @@ else ifeq ($(TARGET_SKIP_CURRENT_VNDK),true) check-vndk-list: ; else check-vndk-list: $(check-vndk-list-timestamp) +ifneq ($(SKIP_ABI_CHECKS),true) +check-vndk-list: $(check-vndk-abi-dump-list-timestamp) +endif endif _vndk_check_failure_message := " error: VNDK library list has been changed.\n" @@ -97,6 +101,43 @@ else endif @chmod a+x $@ +##################################################################### +# Check that all ABI reference dumps have corresponding NDK/VNDK +# libraries. + +# $(1): The directory containing ABI dumps. +# Return a list of ABI dump paths ending with .so.lsdump. +define find-abi-dump-paths +$(if $(wildcard $(1)), \ + $(addprefix $(1)/, \ + $(call find-files-in-subdirs,$(1),"*.so.lsdump" -and -type f,.))) +endef + +VNDK_ABI_DUMP_DIR := prebuilts/abi-dumps/vndk/$(PLATFORM_VNDK_VERSION) +NDK_ABI_DUMP_DIR := prebuilts/abi-dumps/ndk/$(PLATFORM_VNDK_VERSION) +VNDK_ABI_DUMPS := $(call find-abi-dump-paths,$(VNDK_ABI_DUMP_DIR)) +NDK_ABI_DUMPS := $(call find-abi-dump-paths,$(NDK_ABI_DUMP_DIR)) + +$(check-vndk-abi-dump-list-timestamp): $(VNDK_ABI_DUMPS) $(NDK_ABI_DUMPS) + $(eval added_vndk_abi_dumps := $(strip $(sort $(filter-out \ + $(addsuffix .so.lsdump,$(VNDK_SAMEPROCESS_LIBRARIES) $(VNDK_CORE_LIBRARIES)), \ + $(notdir $(VNDK_ABI_DUMPS)))))) + $(if $(added_vndk_abi_dumps), \ + echo -e "Found ABI reference dumps for non-VNDK libraries. Run \`find \$${ANDROID_BUILD_TOP}/$(VNDK_ABI_DUMP_DIR) '(' -name $(subst $(space), -or -name ,$(added_vndk_abi_dumps)) ')' -delete\` to delete the dumps.") + + $(eval added_ndk_abi_dumps := $(strip $(sort $(filter-out \ + $(addsuffix .so.lsdump,$(NDK_MIGRATED_LIBS) $(LLNDK_LIBRARIES)), \ + $(notdir $(NDK_ABI_DUMPS)))))) + $(if $(added_ndk_abi_dumps), \ + echo -e "Found ABI reference dumps for non-NDK libraries. Run \`find \$${ANDROID_BUILD_TOP}/$(NDK_ABI_DUMP_DIR) '(' -name $(subst $(space), -or -name ,$(added_ndk_abi_dumps)) ')' -delete\` to delete the dumps.") + + $(if $(added_vndk_abi_dumps)$(added_ndk_abi_dumps),exit 1) + $(hide) mkdir -p $(dir $@) + $(hide) touch $@ + +##################################################################### +# VNDK package and snapshot. + ifneq ($(BOARD_VNDK_VERSION),) include $(CLEAR_VARS)