OpenCVFindLibsPerf.cmake 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. # ----------------------------------------------------------------------------
  2. # Detect other 3rd-party performance and math libraries
  3. # ----------------------------------------------------------------------------
  4. # --- TBB ---
  5. if(WITH_TBB)
  6. include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake")
  7. endif(WITH_TBB)
  8. # --- IPP ---
  9. if(WITH_IPP)
  10. include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPP.cmake")
  11. if(HAVE_IPP)
  12. include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPPIW.cmake")
  13. if(HAVE_IPP_IW)
  14. ocv_include_directories(${IPP_IW_INCLUDES})
  15. list(APPEND OPENCV_LINKER_LIBS ${IPP_IW_LIBRARIES})
  16. endif()
  17. ocv_include_directories(${IPP_INCLUDE_DIRS})
  18. list(APPEND OPENCV_LINKER_LIBS ${IPP_LIBRARIES})
  19. # Details: #10229
  20. if(ANDROID AND NOT OPENCV_SKIP_ANDROID_IPP_FIX_1)
  21. set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a ${CMAKE_SHARED_LINKER_FLAGS}")
  22. elseif(ANDROID AND NOT OPENCV_SKIP_ANDROID_IPP_FIX_2)
  23. set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-Bsymbolic ${CMAKE_SHARED_LINKER_FLAGS}")
  24. endif()
  25. if(OPENCV_FORCE_IPP_EXCLUDE_LIBS
  26. OR (HAVE_IPP_ICV
  27. AND UNIX AND NOT ANDROID AND NOT APPLE
  28. AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|Intel"
  29. )
  30. AND NOT OPENCV_SKIP_IPP_EXCLUDE_LIBS
  31. )
  32. set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a ${CMAKE_SHARED_LINKER_FLAGS}")
  33. endif()
  34. endif()
  35. endif()
  36. # --- CUDA ---
  37. if(WITH_CUDA)
  38. if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE)
  39. include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCUDALanguage.cmake")
  40. else()
  41. include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCUDA.cmake")
  42. endif()
  43. if(NOT HAVE_CUDA)
  44. message(WARNING "OpenCV is not able to find/configure CUDA SDK (required by WITH_CUDA).
  45. CUDA support will be disabled in OpenCV build.
  46. To eliminate this warning remove WITH_CUDA=ON CMake configuration option.
  47. ")
  48. endif()
  49. endif(WITH_CUDA)
  50. # --- Eigen ---
  51. if(WITH_EIGEN AND NOT HAVE_EIGEN)
  52. if((OPENCV_FORCE_EIGEN_FIND_PACKAGE_CONFIG
  53. OR NOT (CMAKE_VERSION VERSION_LESS "3.0.0") # Eigen3Targets.cmake required CMake 3.0.0+
  54. ) AND NOT OPENCV_SKIP_EIGEN_FIND_PACKAGE_CONFIG
  55. )
  56. find_package(Eigen3 CONFIG QUIET) # Ceres 2.0.0 CMake scripts doesn't work with CMake's FindEigen3.cmake module (due to missing EIGEN3_VERSION_STRING)
  57. endif()
  58. if(NOT Eigen3_FOUND)
  59. find_package(Eigen3 QUIET)
  60. endif()
  61. if(Eigen3_FOUND)
  62. if(TARGET Eigen3::Eigen)
  63. # Use Eigen3 imported target if possible
  64. list(APPEND OPENCV_LINKER_LIBS Eigen3::Eigen)
  65. set(HAVE_EIGEN 1)
  66. else()
  67. if(DEFINED EIGEN3_INCLUDE_DIRS)
  68. set(EIGEN_INCLUDE_PATH ${EIGEN3_INCLUDE_DIRS})
  69. set(HAVE_EIGEN 1)
  70. elseif(DEFINED EIGEN3_INCLUDE_DIR)
  71. set(EIGEN_INCLUDE_PATH ${EIGEN3_INCLUDE_DIR})
  72. set(HAVE_EIGEN 1)
  73. endif()
  74. endif()
  75. if(HAVE_EIGEN)
  76. if(DEFINED EIGEN3_WORLD_VERSION) # CMake module
  77. set(EIGEN_WORLD_VERSION ${EIGEN3_WORLD_VERSION})
  78. set(EIGEN_MAJOR_VERSION ${EIGEN3_MAJOR_VERSION})
  79. set(EIGEN_MINOR_VERSION ${EIGEN3_MINOR_VERSION})
  80. elseif(DEFINED Eigen3_VERSION_MAJOR) # Recommended package config variables
  81. # see https://github.com/opencv/opencv/issues/27530
  82. set(EIGEN_WORLD_VERSION ${Eigen3_VERSION_MAJOR})
  83. set(EIGEN_MAJOR_VERSION ${Eigen3_VERSION_MINOR})
  84. set(EIGEN_MINOR_VERSION ${Eigen3_VERSION_PATCH})
  85. else() # Deprecated package config variables
  86. # Removed on master at https://gitlab.com/libeigen/eigen/-/commit/f2984cd0778dd0a1d7e74216d826eaff2bc6bfab
  87. set(EIGEN_WORLD_VERSION ${EIGEN3_VERSION_MAJOR})
  88. set(EIGEN_MAJOR_VERSION ${EIGEN3_VERSION_MINOR})
  89. set(EIGEN_MINOR_VERSION ${EIGEN3_VERSION_PATCH})
  90. endif()
  91. endif()
  92. endif()
  93. if(NOT HAVE_EIGEN)
  94. if(NOT EIGEN_INCLUDE_PATH OR NOT EXISTS "${EIGEN_INCLUDE_PATH}")
  95. set(__find_paths "")
  96. set(__find_path_extra_options "")
  97. if(NOT CMAKE_CROSSCOMPILING)
  98. list(APPEND __find_paths /opt)
  99. endif()
  100. if(DEFINED ENV{EIGEN_ROOT})
  101. set(__find_paths "$ENV{EIGEN_ROOT}/include")
  102. list(APPEND __find_path_extra_options NO_DEFAULT_PATH)
  103. else()
  104. set(__find_paths ENV ProgramFiles ENV ProgramW6432)
  105. endif()
  106. find_path(EIGEN_INCLUDE_PATH "Eigen/Core"
  107. PATHS ${__find_paths}
  108. PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2
  109. DOC "The path to Eigen3/Eigen2 headers"
  110. ${__find_path_extra_options}
  111. )
  112. endif()
  113. if(EIGEN_INCLUDE_PATH AND EXISTS "${EIGEN_INCLUDE_PATH}")
  114. ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION)
  115. set(HAVE_EIGEN 1)
  116. endif()
  117. endif()
  118. endif()
  119. if(HAVE_EIGEN)
  120. if(EIGEN_INCLUDE_PATH AND EXISTS "${EIGEN_INCLUDE_PATH}")
  121. ocv_include_directories(SYSTEM ${EIGEN_INCLUDE_PATH})
  122. endif()
  123. endif()
  124. # --- Clp ---
  125. # Ubuntu: sudo apt-get install coinor-libclp-dev coinor-libcoinutils-dev
  126. ocv_clear_vars(HAVE_CLP)
  127. if(WITH_CLP)
  128. if(UNIX)
  129. ocv_check_modules(CLP clp)
  130. if(CLP_FOUND)
  131. set(HAVE_CLP TRUE)
  132. if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "")
  133. ocv_include_directories(${CLP_INCLUDE_DIRS})
  134. endif()
  135. list(APPEND OPENCV_LINKER_LIBS ${CLP_LIBRARIES})
  136. endif()
  137. endif()
  138. if(NOT CLP_FOUND)
  139. find_path(CLP_INCLUDE_PATH "coin"
  140. PATHS "/usr/local/include" "/usr/include" "/opt/include"
  141. DOC "The path to Clp headers")
  142. if(CLP_INCLUDE_PATH)
  143. ocv_include_directories(${CLP_INCLUDE_PATH} "${CLP_INCLUDE_PATH}/coin")
  144. get_filename_component(_CLP_LIBRARY_DIR "${CLP_INCLUDE_PATH}/../lib" ABSOLUTE)
  145. set(CLP_LIBRARY_DIR "${_CLP_LIBRARY_DIR}" CACHE PATH "Full path of Clp library directory")
  146. link_directories(${CLP_LIBRARY_DIR})
  147. if(UNIX)
  148. set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} Clp CoinUtils m)
  149. else()
  150. if(MINGW)
  151. set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} Clp CoinUtils)
  152. else()
  153. set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} libClp libCoinUtils)
  154. endif()
  155. endif()
  156. set(HAVE_CLP TRUE)
  157. endif()
  158. endif()
  159. endif(WITH_CLP)
  160. # --- ARM KleidiCV
  161. if(WITH_KLEIDICV)
  162. if(KLEIDICV_SOURCE_PATH AND EXISTS "${KLEIDICV_SOURCE_PATH}/adapters/opencv/CMakeLists.txt")
  163. message(STATUS "Use external KleidiCV ${KLEIDICV_SOURCE_PATH}")
  164. set(HAVE_KLEIDICV ON)
  165. endif()
  166. if(NOT HAVE_KLEIDICV)
  167. include("${OpenCV_SOURCE_DIR}/hal/kleidicv/kleidicv.cmake")
  168. download_kleidicv(KLEIDICV_SOURCE_PATH)
  169. if(KLEIDICV_SOURCE_PATH)
  170. set(HAVE_KLEIDICV ON)
  171. endif()
  172. endif()
  173. endif(WITH_KLEIDICV)
  174. # --- FastCV ---
  175. if(WITH_FASTCV)
  176. if((EXISTS ${FastCV_INCLUDE_PATH}) AND (EXISTS ${FastCV_LIB_PATH}))
  177. message(STATUS "Use external FastCV ${FastCV_INCLUDE_PATH}, ${FastCV_LIB_PATH}")
  178. find_library(FASTCV_LIBRARY NAMES "fastcv"
  179. PATHS "${FastCV_LIB_PATH}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
  180. mark_as_advanced(FASTCV_LIBRARY)
  181. if (FASTCV_LIBRARY)
  182. set(HAVE_FASTCV TRUE CACHE BOOL "FastCV status")
  183. else()
  184. set(HAVE_FASTCV FALSE CACHE BOOL "FastCV status")
  185. endif()
  186. else()
  187. include("${OpenCV_SOURCE_DIR}/3rdparty/fastcv/fastcv.cmake")
  188. set(FCV_ROOT_DIR "${OpenCV_BINARY_DIR}/3rdparty/fastcv")
  189. download_fastcv(${FCV_ROOT_DIR})
  190. if(HAVE_FASTCV)
  191. set(FastCV_INCLUDE_PATH "${FCV_ROOT_DIR}/inc" CACHE PATH "FastCV includes directory")
  192. set(FastCV_LIB_PATH "${FCV_ROOT_DIR}/libs" CACHE PATH "FastCV library directory")
  193. ocv_install_3rdparty_licenses(FastCV "${OpenCV_BINARY_DIR}/3rdparty/fastcv/LICENSE")
  194. add_library(fastcv STATIC IMPORTED)
  195. set_target_properties(fastcv PROPERTIES
  196. IMPORTED_LINK_INTERFACE_LIBRARIES "dl"
  197. IMPORTED_LOCATION "${FastCV_LIB_PATH}/libfastcv.a"
  198. )
  199. if (NOT BUILD_SHARED_LIBS)
  200. install(FILES "${FastCV_LIB_PATH}/libfastcv.a" DESTINATION "${OPENCV_3P_LIB_INSTALL_PATH}" COMPONENT "dev")
  201. set(FASTCV_LOCATION_PATH "${FastCV_LIB_PATH}/libfastcv.a" CACHE INTERNAL "" FORCE)
  202. set(FASTCV_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_3P_LIB_INSTALL_PATH}/libfastcv.a" CACHE INTERNAL "" FORCE)
  203. endif()
  204. set(FASTCV_LIBRARY "fastcv" CACHE PATH "FastCV library")
  205. list(APPEND OPENCV_LINKER_LIBS ${FASTCV_LIBRARY})
  206. else()
  207. set(HAVE_FASTCV FALSE CACHE BOOL "FastCV status")
  208. endif()
  209. endif()
  210. endif(WITH_FASTCV)