Add python3-setuptools dependency for python 3.12
[platform/upstream/opencv.git] / cmake / OpenCVFindLibsPerf.cmake
1 # ----------------------------------------------------------------------------
2 #  Detect other 3rd-party performance and math libraries
3 # ----------------------------------------------------------------------------
4
5 # --- TBB ---
6 if(WITH_TBB)
7   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake")
8 endif(WITH_TBB)
9
10 # --- IPP ---
11 if(WITH_IPP)
12   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPP.cmake")
13   if(HAVE_IPP)
14     include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPPIW.cmake")
15     if(HAVE_IPP_IW)
16       ocv_include_directories(${IPP_IW_INCLUDES})
17       list(APPEND OPENCV_LINKER_LIBS ${IPP_IW_LIBRARIES})
18     endif()
19     ocv_include_directories(${IPP_INCLUDE_DIRS})
20     list(APPEND OPENCV_LINKER_LIBS ${IPP_LIBRARIES})
21
22     # Details: #10229
23     if(ANDROID AND NOT OPENCV_SKIP_ANDROID_IPP_FIX_1)
24       set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a ${CMAKE_SHARED_LINKER_FLAGS}")
25     elseif(ANDROID AND NOT OPENCV_SKIP_ANDROID_IPP_FIX_2)
26       set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-Bsymbolic ${CMAKE_SHARED_LINKER_FLAGS}")
27     endif()
28
29     if(OPENCV_FORCE_IPP_EXCLUDE_LIBS
30         OR (HAVE_IPP_ICV
31             AND UNIX AND NOT ANDROID AND NOT APPLE
32             AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|Intel"
33         )
34         AND NOT OPENCV_SKIP_IPP_EXCLUDE_LIBS
35     )
36       set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a ${CMAKE_SHARED_LINKER_FLAGS}")
37     endif()
38   endif()
39 endif()
40
41 # --- CUDA ---
42 if(WITH_CUDA)
43   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCUDA.cmake")
44   if(NOT HAVE_CUDA)
45     message(WARNING "OpenCV is not able to find/configure CUDA SDK (required by WITH_CUDA).
46 CUDA support will be disabled in OpenCV build.
47 To eliminate this warning remove WITH_CUDA=ON CMake configuration option.
48 ")
49   endif()
50 endif(WITH_CUDA)
51
52 # --- Eigen ---
53 if(WITH_EIGEN AND NOT HAVE_EIGEN)
54   if((OPENCV_FORCE_EIGEN_FIND_PACKAGE_CONFIG
55       OR NOT (CMAKE_VERSION VERSION_LESS "3.0.0")  # Eigen3Targets.cmake required CMake 3.0.0+
56       ) AND NOT OPENCV_SKIP_EIGEN_FIND_PACKAGE_CONFIG
57   )
58     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)
59   endif()
60   if(NOT Eigen3_FOUND)
61     find_package(Eigen3 QUIET)
62   endif()
63
64   if(Eigen3_FOUND)
65     if(TARGET Eigen3::Eigen)
66       # Use Eigen3 imported target if possible
67       list(APPEND OPENCV_LINKER_LIBS Eigen3::Eigen)
68       set(HAVE_EIGEN 1)
69     else()
70       if(DEFINED EIGEN3_INCLUDE_DIRS)
71         set(EIGEN_INCLUDE_PATH ${EIGEN3_INCLUDE_DIRS})
72         set(HAVE_EIGEN 1)
73       elseif(DEFINED EIGEN3_INCLUDE_DIR)
74         set(EIGEN_INCLUDE_PATH ${EIGEN3_INCLUDE_DIR})
75         set(HAVE_EIGEN 1)
76       endif()
77     endif()
78     if(HAVE_EIGEN)
79       if(DEFINED EIGEN3_WORLD_VERSION)  # CMake module
80         set(EIGEN_WORLD_VERSION ${EIGEN3_WORLD_VERSION})
81         set(EIGEN_MAJOR_VERSION ${EIGEN3_MAJOR_VERSION})
82         set(EIGEN_MINOR_VERSION ${EIGEN3_MINOR_VERSION})
83       else()  # Eigen config file
84         set(EIGEN_WORLD_VERSION ${EIGEN3_VERSION_MAJOR})
85         set(EIGEN_MAJOR_VERSION ${EIGEN3_VERSION_MINOR})
86         set(EIGEN_MINOR_VERSION ${EIGEN3_VERSION_PATCH})
87       endif()
88     endif()
89   endif()
90
91   if(NOT HAVE_EIGEN)
92     if(NOT EIGEN_INCLUDE_PATH OR NOT EXISTS "${EIGEN_INCLUDE_PATH}")
93       set(__find_paths "")
94       set(__find_path_extra_options "")
95       if(NOT CMAKE_CROSSCOMPILING)
96         list(APPEND __find_paths /opt)
97       endif()
98       if(DEFINED ENV{EIGEN_ROOT})
99         set(__find_paths "$ENV{EIGEN_ROOT}/include")
100         list(APPEND __find_path_extra_options NO_DEFAULT_PATH)
101       else()
102         set(__find_paths ENV ProgramFiles ENV ProgramW6432)
103       endif()
104       find_path(EIGEN_INCLUDE_PATH "Eigen/Core"
105                 PATHS ${__find_paths}
106                 PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2
107                 DOC "The path to Eigen3/Eigen2 headers"
108                 ${__find_path_extra_options}
109       )
110     endif()
111     if(EIGEN_INCLUDE_PATH AND EXISTS "${EIGEN_INCLUDE_PATH}")
112       ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION)
113       set(HAVE_EIGEN 1)
114     endif()
115   endif()
116 endif()
117 if(HAVE_EIGEN)
118   if(EIGEN_INCLUDE_PATH AND EXISTS "${EIGEN_INCLUDE_PATH}")
119     ocv_include_directories(SYSTEM ${EIGEN_INCLUDE_PATH})
120   endif()
121 endif()
122
123 # --- Clp ---
124 # Ubuntu: sudo apt-get install coinor-libclp-dev coinor-libcoinutils-dev
125 ocv_clear_vars(HAVE_CLP)
126 if(WITH_CLP)
127   if(UNIX)
128     ocv_check_modules(CLP clp)
129     if(CLP_FOUND)
130       set(HAVE_CLP TRUE)
131       if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "")
132         ocv_include_directories(${CLP_INCLUDE_DIRS})
133       endif()
134       list(APPEND OPENCV_LINKER_LIBS ${CLP_LIBRARIES})
135     endif()
136   endif()
137
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)