Warning, /sdk/elf-dissector/cmake/FindIberty.cmake is written in an unsupported language. File is not indexed.

0001 # TODO turn this in a FindBinutils with components
0002 include(CheckCSourceCompiles)
0003 include(FindPackageHandleStandardArgs)
0004 
0005 find_path(Iberty_INCLUDE_DIR demangle.h PATH_SUFFIXES libiberty)
0006 find_library(Iberty_LIBRARY NAMES iberty)
0007 
0008 find_package_handle_standard_args(Iberty DEFAULT_MSG Iberty_LIBRARY Iberty_INCLUDE_DIR)
0009 
0010 # TODO improve this version check
0011 set(Binutils_VERSION_MAJOR 2)
0012 set(Binutils_VERSION_MINOR 22)
0013 
0014 set(_old_requires ${CMAKE_REQUIRED_INCLUDES})
0015 list(APPEND CMAKE_REQUIRED_INCLUDES ${Iberty_INCLUDE_DIR})
0016 
0017 check_c_source_compiles("
0018     #include <demangle.h>
0019     int main(int argc, char **argv) {
0020         return DEMANGLE_COMPONENT_INITIALIZER_LIST;
0021     }"
0022     Binutils_HAVE_DEMANGLE_COMPONENT_INITIALIZER_LIST
0023 )
0024 if(Binutils_HAVE_DEMANGLE_COMPONENT_INITIALIZER_LIST)
0025   set(Binutils_VERSION_MINOR 23)
0026 endif()
0027 
0028 check_c_source_compiles("
0029     #include <demangle.h>
0030     int main(int argc, char **argv) {
0031         return DEMANGLE_COMPONENT_REFERENCE_THIS;
0032     }"
0033     Binutils_HAVE_DEMANGLE_COMPONENT_REFERENCE_THIS
0034 )
0035 if(Binutils_HAVE_DEMANGLE_COMPONENT_REFERENCE_THIS)
0036   set(Binutils_VERSION_MINOR 24)
0037 endif()
0038 
0039 if(IBERTY_FOUND AND NOT TARGET Binutils::Iberty)
0040     add_library(Binutils::Iberty UNKNOWN IMPORTED)
0041     set_target_properties(Binutils::Iberty PROPERTIES
0042         IMPORTED_LOCATION "${Iberty_LIBRARY}"
0043         INTERFACE_INCLUDE_DIRECTORIES "${Iberty_INCLUDE_DIR}"
0044     )
0045 endif()
0046 
0047 mark_as_advanced(Iberty_LIBRARY Iberty_INCLUDE_DIR)
0048 
0049 
0050 find_path(Opcodes_INCLUDE_DIR dis-asm.h)
0051 find_library(Opcodes_LIBRARY NAMES opcodes)
0052 
0053 find_package_handle_standard_args(Opcodes DEFAULT_MSG Opcodes_INCLUDE_DIR Opcodes_LIBRARY)
0054 
0055 if(OPCODES_FOUND AND NOT TARGET Binutils::Opcodes)
0056     add_library(Binutils::Opcodes UNKNOWN IMPORTED)
0057     set_target_properties(Binutils::Opcodes PROPERTIES
0058         IMPORTED_LOCATION "${Opcodes_LIBRARY}"
0059         INTERFACE_INCLUDE_DIRECTORIES "${Opcodes_INCLUDE_DIR}"
0060     )
0061 endif()
0062 
0063 
0064 set(CMAKE_REQUIRED_LIBRARIES ${Opcodes_LIBRARY})
0065 check_c_source_compiles("
0066     #include <dis-asm.h>
0067     int main(int argc, char **argv) {
0068         disassembler_ftype ftype = print_insn_i386;
0069         return 0;
0070      }"
0071      Binutils_HAVE_PRINT_INSN_I386
0072 )
0073 if(NOT Binutils_HAVE_PRINT_INSN_I386)
0074   set(Binutils_VERSION_MINOR 29)
0075 endif()
0076 
0077 mark_as_advanced(Opcodes_LIBRARY Opcodes_INCLUDE_DIR)
0078 
0079 check_c_source_compiles("
0080     #include <demangle.h>
0081     int main(int argc, char **argv) {
0082         return DEMANGLE_COMPONENT_TPARM_OBJ;
0083     }"
0084     Binutils_HAVE_DEMANGLE_COMPONENT_TPARM_OBJ
0085 )
0086 if(Binutils_HAVE_DEMANGLE_COMPONENT_TPARM_OBJ)
0087   set(Binutils_VERSION_MINOR 32)
0088 endif()
0089 
0090  # we don't really care about that particular define, but about a behavior
0091  # difference in demangling, but that is much harder to check for here
0092 check_c_source_compiles("
0093     #include <ctf.h>
0094     int main(int argc, char **argv) {
0095         return CTF_F_NEWFUNCINFO;
0096     }"
0097     Binutils_HAVE_CTF_F_NEWFUNCINFO
0098 )
0099 if(Binutils_HAVE_CTF_F_NEWFUNCINFO)
0100   set(Binutils_VERSION_MINOR 36)
0101 endif()
0102 
0103 check_c_source_compiles("
0104     #include <dis-asm.h>
0105     int main(int, char**) {
0106         init_disassemble_info(NULL, NULL, NULL, NULL);
0107         return 0;
0108     }"
0109     Binutils_HAVE_4ARG_INTI_DISASSEMBLE_INFO
0110 )
0111 if (Binutils_HAVE_4ARG_INTI_DISASSEMBLE_INFO)
0112     set(Binutils_VERSION_MINOR 39)
0113 endif()
0114 
0115 if(TARGET Binutils::Iberty)
0116    target_link_libraries(Binutils::Iberty INTERFACE Binutils::Opcodes)
0117 endif()
0118 if(TARGET Binutils::Opcodes)
0119    target_link_libraries(Binutils::Opcodes INTERFACE Binutils::Iberty)
0120 endif()
0121 
0122 include(FeatureSummary)
0123 set_package_properties(binutils-devel PROPERTIES URL https://www.gcc.org/
0124   DESCRIPTION "Development files of binutils.")
0125 
0126 set(CMAKE_REQUIRED_INCLUDES ${_old_requires})