Home | History | Annotate | Download | only in core
      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 # - my_check_elf_file_shared_lib_files
     17 
     18 ifndef LOCAL_IS_HOST_MODULE
     19 ifneq ($(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS),)
     20 check_elf_files_stamp := $(intermediates)/check_elf_files.timestamp
     21 $(check_elf_files_stamp): PRIVATE_SONAME := $(if $(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES),$(my_installed_module_stem))
     22 $(check_elf_files_stamp): PRIVATE_ALLOW_UNDEFINED_SYMBOLS := $(LOCAL_ALLOW_UNDEFINED_SYMBOLS)
     23 # PRIVATE_SHARED_LIBRARY_FILES are file paths to built shared libraries.
     24 # In addition to $(my_check_elf_file_shared_lib_files), some file paths are
     25 # added by `resolve-shared-libs-for-elf-file-check` from `core/main.mk`.
     26 $(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := $(my_check_elf_file_shared_lib_files)
     27 $(check_elf_files_stamp): $(my_prebuilt_src_file) $(my_check_elf_file_shared_lib_files) $(CHECK_ELF_FILE) $(LLVM_READOBJ)
     28 	@echo Check prebuilt ELF binary: $<
     29 	$(hide) mkdir -p $(dir $@)
     30 	$(hide) rm -f $@
     31 	$(hide) $(CHECK_ELF_FILE) \
     32 	    --skip-bad-elf-magic \
     33 	    --skip-unknown-elf-machine \
     34 	    $(if $(PRIVATE_SONAME),--soname $(PRIVATE_SONAME)) \
     35 	    $(foreach l,$(PRIVATE_SHARED_LIBRARY_FILES),--shared-lib $(l)) \
     36 	    $(if $(PRIVATE_ALLOW_UNDEFINED_SYMBOLS),--allow-undefined-symbols) \
     37 	    --llvm-readobj=$(LLVM_READOBJ) \
     38 	    $<
     39 	$(hide) touch $@
     40 
     41 ifneq ($(PRODUCT_CHECK_ELF_FILES)$(CHECK_ELF_FILES),)
     42 ifneq ($(strip $(LOCAL_CHECK_ELF_FILES)),false)
     43 $(LOCAL_BUILT_MODULE): $(check_elf_files_stamp)
     44 check-elf-files: $(check_elf_files_stamp)
     45 endif  # LOCAL_CHECK_ELF_FILES
     46 endif  # PRODUCT_CHECK_ELF_FILES or CHECK_ELF_FILES
     47 
     48 endif  # SHARED_LIBRARIES, EXECUTABLES, NATIVE_TESTS
     49 endif  # !LOCAL_IS_HOST_MODULE
     50