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 |
| 16 | |
| 17 | ifndef LOCAL_IS_HOST_MODULE |
| 18 | ifneq ($(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS),) |
| 19 | check_elf_files_stamp := $(intermediates)/check_elf_files.timestamp |
| 20 | $(check_elf_files_stamp): PRIVATE_SONAME := $(if $(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES),$(my_installed_module_stem)) |
| 21 | $(check_elf_files_stamp): PRIVATE_ALLOW_UNDEFINED_SYMBOLS := $(LOCAL_ALLOW_UNDEFINED_SYMBOLS) |
| 22 | $(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := # This variable will be set by `core/main.mk` |
| 23 | $(check_elf_files_stamp): $(my_prebuilt_src_file) $(CHECK_ELF_FILE) $(LLVM_READOBJ) |
| 24 | @echo Check prebuilt ELF binary: $< |
| 25 | $(hide) mkdir -p $(dir $@) |
| 26 | $(hide) rm -f $@ |
| 27 | $(hide) $(CHECK_ELF_FILE) \ |
| 28 | --skip-bad-elf-magic \ |
| 29 | --skip-unknown-elf-machine \ |
| 30 | $(if $(PRIVATE_SONAME),--soname $(PRIVATE_SONAME)) \ |
| 31 | $(foreach l,$(PRIVATE_SHARED_LIBRARY_FILES),--shared-lib $(l)) \ |
| 32 | $(if $(PRIVATE_ALLOW_UNDEFINED_SYMBOLS),--allow-undefined-symbols) \ |
| 33 | --llvm-readobj=$(LLVM_READOBJ) \ |
| 34 | $< |
| 35 | $(hide) touch $@ |
| 36 | |
| 37 | ifneq ($(PRODUCT_CHECK_ELF_FILES)$(CHECK_ELF_FILES),) |
| 38 | ifneq ($(LOCAL_CHECK_ELF_FILES),false) |
| 39 | $(LOCAL_BUILT_MODULE): $(check_elf_files_stamp) |
| 40 | check-elf-files: $(check_elf_files_stamp) |
| 41 | endif # LOCAL_CHECK_ELF_FILES |
| 42 | endif # PRODUCT_CHECK_ELF_FILES or CHECK_ELF_FILES |
| 43 | |
| 44 | endif # SHARED_LIBRARIES, EXECUTABLES, NATIVE_TESTS |
| 45 | endif # !LOCAL_IS_HOST_MODULE |