OpenCVDetectCXXCompiler.cmake 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # ----------------------------------------------------------------------------
  2. # Detect Microsoft compiler:
  3. # ----------------------------------------------------------------------------
  4. if(CMAKE_CL_64)
  5. set(MSVC64 1)
  6. endif()
  7. if(NOT APPLE)
  8. if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  9. set(CMAKE_COMPILER_IS_GNUCXX 1)
  10. set(ENABLE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
  11. endif()
  12. if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
  13. set(CMAKE_COMPILER_IS_GNUCC 1)
  14. set(ENABLE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
  15. endif()
  16. endif()
  17. # ----------------------------------------------------------------------------
  18. # Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ):
  19. # see include/opencv/cxtypes.h file for related ICC & CV_ICC defines.
  20. # NOTE: The system needs to determine if the '-fPIC' option needs to be added
  21. # for the 3rdparty static libs being compiled. The CMakeLists.txt files
  22. # in 3rdparty use the CV_ICC definition being set here to determine if
  23. # the -fPIC flag should be used.
  24. # ----------------------------------------------------------------------------
  25. if(UNIX)
  26. if (__ICL)
  27. set(CV_ICC __ICL)
  28. elseif(__ICC)
  29. set(CV_ICC __ICC)
  30. elseif(__ECL)
  31. set(CV_ICC __ECL)
  32. elseif(__ECC)
  33. set(CV_ICC __ECC)
  34. elseif(__INTEL_COMPILER)
  35. set(CV_ICC __INTEL_COMPILER)
  36. elseif(CMAKE_C_COMPILER MATCHES "icc")
  37. set(CV_ICC icc_matches_c_compiler)
  38. endif()
  39. endif()
  40. if(MSVC AND CMAKE_C_COMPILER MATCHES "icc")
  41. set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS)
  42. endif()
  43. if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR (UNIX AND CV_ICC))
  44. set(CV_COMPILER_IS_GNU TRUE)
  45. else()
  46. set(CV_COMPILER_IS_GNU FALSE)
  47. endif()
  48. # ----------------------------------------------------------------------------
  49. # Detect GNU version:
  50. # ----------------------------------------------------------------------------
  51. if(CMAKE_COMPILER_IS_GNUCXX)
  52. execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
  53. OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL
  54. OUTPUT_STRIP_TRAILING_WHITESPACE)
  55. execute_process(COMMAND ${CMAKE_CXX_COMPILER} -v
  56. ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL
  57. OUTPUT_STRIP_TRAILING_WHITESPACE)
  58. # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"
  59. # Look for the version number
  60. string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
  61. if(NOT CMAKE_GCC_REGEX_VERSION)
  62. string(REGEX MATCH "[0-9]+.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
  63. endif()
  64. # Split the three parts:
  65. string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
  66. list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)
  67. list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)
  68. set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})
  69. math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}")
  70. message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})")
  71. if(WIN32)
  72. execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
  73. OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE
  74. OUTPUT_STRIP_TRAILING_WHITESPACE)
  75. if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64")
  76. set(MINGW64 1)
  77. endif()
  78. endif()
  79. endif()
  80. if(CMAKE_SYSTEM_PROCESSOR MATCHES amd64.*|x86_64.*)
  81. set(X86_64 1)
  82. elseif(CMAKE_SYSTEM_PROCESSOR MATCHES i686.*|i386.*|x86.*)
  83. set(X86 1)
  84. endif()