ctkMacroBFDCheck.cmake 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #
  2. # ctkMacroBFDCheck.cmake - After this file is included into your main CMake script,
  3. # HAVE_BFD will be defined if libbfd is available.
  4. #
  5. if(CTK_LIB_Core_WITH_BFD_STATIC AND CTK_LIB_Core_WITH_BFD_SHARED)
  6. message(FATAL_ERROR "error: Options WITH_BFD_STATIC and WITH_BFD_SHARED are mutually exclusive ! "
  7. "hint: Enable either WITH_BFD_STATIC or WITH_BFD_SHARED.")
  8. endif()
  9. if(NOT CTK_BUILD_SHARED_LIBS AND CTK_LIB_Core_WITH_BFD_SHARED)
  10. message(FATAL_ERROR "error: Options CTK_BUILD_SHARED_LIBS and WITH_BFD_STATIC are mutually exclusive ! "
  11. "hint: Disable WITH_BFD_SHARED and enable WITH_BFD_STATIC if needed.")
  12. endif()
  13. set(BFD_LIBRARIES)
  14. unset(HAVE_BFD CACHE)
  15. set(TestBFD_BUILD_LOG "${CMAKE_CURRENT_BINARY_DIR}/CMake/TestBFD-build-log.txt")
  16. if(CTK_LIB_Core_WITH_BFD_STATIC OR CTK_LIB_Core_WITH_BFD_SHARED)
  17. if(WIN32)
  18. message(FATAL_ERROR "error: Options WITH_BFD_STATIC or WITH_BFD_SHARED are not support on Windows !")
  19. endif()
  20. if(NOT WIN32)
  21. include(CheckIncludeFile)
  22. CHECK_INCLUDE_file(bfd.h HAVE_BFD_HEADER)
  23. if(NOT HAVE_BFD_HEADER)
  24. file(WRITE ${TestBFD_BUILD_LOG} "Could *NOT* find the required header file: bfd.h")
  25. endif()
  26. set(BFD_LIBRARY_NAME libbfd.a)
  27. set(TestBFD_LIBRARY_MODE STATIC)
  28. if(CTK_LIB_Core_WITH_BFD_SHARED)
  29. set(BFD_LIBRARY_NAME libbfd${CMAKE_SHARED_LIBRARY_SUFFIX})
  30. set(TestBFD_LIBRARY_MODE SHARED)
  31. endif()
  32. unset(BFD_LIBRARY CACHE)
  33. find_library(BFD_LIBRARY ${BFD_LIBRARY_NAME})
  34. if(NOT BFD_LIBRARY)
  35. file(WRITE ${TestBFD_BUILD_LOG} "Could *NOT* find the required bfd library: ${BFD_LIBRARY_NAME}")
  36. endif()
  37. if(HAVE_BFD_HEADER AND BFD_LIBRARY)
  38. # make sure we can build with libbfd
  39. #message(STATUS "Checking libbfd")
  40. try_compile(HAVE_BFD
  41. ${CMAKE_CURRENT_BINARY_DIR}/CMake/TestBFD
  42. ${CMAKE_CURRENT_SOURCE_DIR}/CMake/TestBFD
  43. TestBFD
  44. CMAKE_FLAGS
  45. -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
  46. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
  47. -DBFD_LIBRARY_NAME:STRING=${BFD_LIBRARY_NAME}
  48. OUTPUT_VARIABLE OUTPUT)
  49. file(WRITE ${TestBFD_BUILD_LOG} ${OUTPUT})
  50. #message(${OUTPUT})
  51. if(HAVE_BFD)
  52. set(BFD_LIBRARIES ${BFD_LIBRARY})
  53. endif()
  54. endif()
  55. endif()
  56. endif()
  57. if(CTK_LIB_Core_WITH_BFD_SHARED AND NOT HAVE_BFD)
  58. message(WARNING "warning: CTKCore: Failed to enable BFD support. Disabling CTKCore WITH_BFD_SHARED library option. "
  59. "See ${TestBFD_BUILD_LOG} for more details.")
  60. set(CTK_LIB_Core_WITH_BFD_SHARED OFF CACHE BOOL "Enable CTKCore Library WITH_BFD_SHARED option" FORCE)
  61. endif()
  62. if(CTK_LIB_Core_WITH_BFD_STATIC AND NOT HAVE_BFD)
  63. message(WARNING "warning: CTKCore: Failed to enable BFD support. Disabling CTKCore WITH_BFD_STATIC library option. "
  64. "See ${TestBFD_BUILD_LOG} for more details.")
  65. set(CTK_LIB_Core_WITH_BFD_STATIC OFF CACHE BOOL "Enable CTKCore Library WITH_BFD_STATIC option" FORCE)
  66. endif()
  67. if(HAVE_BFD)
  68. message(STATUS "CTKCore: BFD support enabled [${BFD_LIBRARIES}]")
  69. else()
  70. message(STATUS "CTKCore: BFD support disabled")
  71. endif()