Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 1 | # Check the correctness of the prebuilt ELF files |
| 2 | # |
| 3 | # This check ensures that DT_SONAME matches with the filename, DT_NEEDED |
| 4 | # matches the shared libraries specified in LOCAL_SHARED_LIBRARIES, and all |
| 5 | # undefined symbols in the prebuilt binary can be found in one of the shared |
| 6 | # libraries specified in LOCAL_SHARED_LIBRARIES. |
| 7 | # |
| 8 | # Inputs: |
| 9 | # - LOCAL_ALLOW_UNDEFINED_SYMBOLS |
| 10 | # - LOCAL_BUILT_MODULE |
| 11 | # - LOCAL_IS_HOST_MODULE |
| 12 | # - LOCAL_MODULE_CLASS |
| 13 | # - intermediates |
| 14 | # - my_installed_module_stem |
| 15 | # - my_prebuilt_src_file |
Logan Chien | b1c11de | 2019-02-14 20:52:21 +0800 | [diff] [blame] | 16 | # - my_check_elf_file_shared_lib_files |
Logan Chien | 751a987 | 2019-12-16 15:55:16 -0800 | [diff] [blame^] | 17 | # - my_system_shared_libraries |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 18 | |
| 19 | ifndef LOCAL_IS_HOST_MODULE |
| 20 | ifneq ($(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS),) |
| 21 | check_elf_files_stamp := $(intermediates)/check_elf_files.timestamp |
| 22 | $(check_elf_files_stamp): PRIVATE_SONAME := $(if $(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES),$(my_installed_module_stem)) |
| 23 | $(check_elf_files_stamp): PRIVATE_ALLOW_UNDEFINED_SYMBOLS := $(LOCAL_ALLOW_UNDEFINED_SYMBOLS) |
Logan Chien | 751a987 | 2019-12-16 15:55:16 -0800 | [diff] [blame^] | 24 | $(check_elf_files_stamp): PRIVATE_SYSTEM_SHARED_LIBRARIES := $(my_system_shared_libraries) |
Logan Chien | b1c11de | 2019-02-14 20:52:21 +0800 | [diff] [blame] | 25 | # PRIVATE_SHARED_LIBRARY_FILES are file paths to built shared libraries. |
| 26 | # In addition to $(my_check_elf_file_shared_lib_files), some file paths are |
| 27 | # added by `resolve-shared-libs-for-elf-file-check` from `core/main.mk`. |
| 28 | $(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := $(my_check_elf_file_shared_lib_files) |
| 29 | $(check_elf_files_stamp): $(my_prebuilt_src_file) $(my_check_elf_file_shared_lib_files) $(CHECK_ELF_FILE) $(LLVM_READOBJ) |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 30 | @echo Check prebuilt ELF binary: $< |
| 31 | $(hide) mkdir -p $(dir $@) |
| 32 | $(hide) rm -f $@ |
| 33 | $(hide) $(CHECK_ELF_FILE) \ |
| 34 | --skip-bad-elf-magic \ |
| 35 | --skip-unknown-elf-machine \ |
| 36 | $(if $(PRIVATE_SONAME),--soname $(PRIVATE_SONAME)) \ |
| 37 | $(foreach l,$(PRIVATE_SHARED_LIBRARY_FILES),--shared-lib $(l)) \ |
Logan Chien | 751a987 | 2019-12-16 15:55:16 -0800 | [diff] [blame^] | 38 | $(foreach l,$(PRIVATE_SYSTEM_SHARED_LIBRARIES),--system-shared-lib $(l)) \ |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 39 | $(if $(PRIVATE_ALLOW_UNDEFINED_SYMBOLS),--allow-undefined-symbols) \ |
| 40 | --llvm-readobj=$(LLVM_READOBJ) \ |
| 41 | $< |
| 42 | $(hide) touch $@ |
| 43 | |
Dan Willemsen | 17315c2 | 2020-04-28 14:30:56 -0700 | [diff] [blame] | 44 | CHECK_ELF_FILES.$(check_elf_files_stamp) := 1 |
| 45 | |
Logan Chien | e87ff2d | 2019-02-14 14:27:33 +0800 | [diff] [blame] | 46 | ifneq ($(strip $(LOCAL_CHECK_ELF_FILES)),false) |
Logan Chien | 2a88075 | 2019-09-17 09:45:09 -0700 | [diff] [blame] | 47 | ifneq ($(strip $(BUILD_BROKEN_PREBUILT_ELF_FILES)),true) |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 48 | $(LOCAL_BUILT_MODULE): $(check_elf_files_stamp) |
Logan Chien | 2a88075 | 2019-09-17 09:45:09 -0700 | [diff] [blame] | 49 | check-elf-files: $(check_elf_files_stamp) |
| 50 | endif # BUILD_BROKEN_PREBUILT_ELF_FILES |
| 51 | endif # LOCAL_CHECK_ELF_FILES |
| 52 | |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 53 | endif # SHARED_LIBRARIES, EXECUTABLES, NATIVE_TESTS |
| 54 | endif # !LOCAL_IS_HOST_MODULE |