blob: 69d891cfdb7c8867cebd5fbe1c8124bfa6901732 [file] [log] [blame]
Logan Chien0e53d882018-11-06 17:32:40 +08001# 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
17ifndef LOCAL_IS_HOST_MODULE
18ifneq ($(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS),)
19check_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
37ifneq ($(PRODUCT_CHECK_ELF_FILES)$(CHECK_ELF_FILES),)
38ifneq ($(LOCAL_CHECK_ELF_FILES),false)
39$(LOCAL_BUILT_MODULE): $(check_elf_files_stamp)
40check-elf-files: $(check_elf_files_stamp)
41endif # LOCAL_CHECK_ELF_FILES
42endif # PRODUCT_CHECK_ELF_FILES or CHECK_ELF_FILES
43
44endif # SHARED_LIBRARIES, EXECUTABLES, NATIVE_TESTS
45endif # !LOCAL_IS_HOST_MODULE