From b1c11de3c1967d45c3d6e6561579f6e939f427e5 Mon Sep 17 00:00:00 2001 From: Logan Chien Date: Thu, 14 Feb 2019 20:52:21 +0800 Subject: [PATCH] Fix check_elf_file with LOCAL_SDK_VERSION and NDK libs This commit fixes prebuilt ELF checker for modules with LOCAL_SDK_VERSIONS and depend on NDK shared libraries. This fix is required because dynamic_binary.mk filters out NDK libraries thus those libraries do not show up in DEPENDENCIES_ON_SHARED_LIBRARIES. Bug: 119084334 Test: Create a prebuilt module with LOCAL_SDK_VERSION and check whether the NDK libs in LOCAL_SHARED_LIBRARIES are passed to check_elf_file.py. Change-Id: I0f72ae1b0edc3e8d7e43eb70829e74d606564966 --- core/check_elf_file.mk | 8 ++++++-- core/prebuilt_internal.mk | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/check_elf_file.mk b/core/check_elf_file.mk index 8f2eafb11..0faaadd3f 100644 --- a/core/check_elf_file.mk +++ b/core/check_elf_file.mk @@ -13,14 +13,18 @@ # - intermediates # - my_installed_module_stem # - my_prebuilt_src_file +# - my_check_elf_file_shared_lib_files ifndef LOCAL_IS_HOST_MODULE ifneq ($(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS),) check_elf_files_stamp := $(intermediates)/check_elf_files.timestamp $(check_elf_files_stamp): PRIVATE_SONAME := $(if $(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES),$(my_installed_module_stem)) $(check_elf_files_stamp): PRIVATE_ALLOW_UNDEFINED_SYMBOLS := $(LOCAL_ALLOW_UNDEFINED_SYMBOLS) -$(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := # This variable will be set by `core/main.mk` -$(check_elf_files_stamp): $(my_prebuilt_src_file) $(CHECK_ELF_FILE) $(LLVM_READOBJ) +# PRIVATE_SHARED_LIBRARY_FILES are file paths to built shared libraries. +# In addition to $(my_check_elf_file_shared_lib_files), some file paths are +# added by `resolve-shared-libs-for-elf-file-check` from `core/main.mk`. +$(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := $(my_check_elf_file_shared_lib_files) +$(check_elf_files_stamp): $(my_prebuilt_src_file) $(my_check_elf_file_shared_lib_files) $(CHECK_ELF_FILE) $(LLVM_READOBJ) @echo Check prebuilt ELF binary: $< $(hide) mkdir -p $(dir $@) $(hide) rm -f $@ diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index 49613e95c..c5ea53830 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -108,6 +108,8 @@ $(error $(LOCAL_MODULE) : LOCAL_COMPRESSED_MODULE can only be defined for module endif # LOCAL_COMPRESSED_MODULE endif +my_check_elf_file_shared_lib_files := + ifneq ($(filter true keep_symbols no_debuglink mini-debug-info,$(my_strip_module)),) ifdef LOCAL_IS_HOST_MODULE $(call pretty-error,Cannot strip/pack host module) @@ -123,6 +125,12 @@ ifneq ($(filter true keep_symbols no_debuglink mini-debug-info,$(my_strip_module include $(BUILD_SYSTEM)/dynamic_binary.mk built_module := $(linked_module) + ifneq ($(LOCAL_SDK_VERSION),) + # binary.mk filters out NDK_MIGRATED_LIBS from my_shared_libs, thus those NDK libs are not added + # to DEPENDENCIES_ON_SHARED_LIBRARIES. Assign $(my_ndk_shared_libraries_fullpath) to + # my_check_elf_file_shared_lib_files so that check_elf_file.py can see those NDK stub libs. + my_check_elf_file_shared_lib_files := $(my_ndk_shared_libraries_fullpath) + endif else # my_strip_module not true include $(BUILD_SYSTEM)/base_rules.mk built_module := $(LOCAL_BUILT_MODULE)