2 # - CV_GCC - GNU compiler (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
3 # - CV_CLANG - Clang-compatible compiler (CMAKE_CXX_COMPILER_ID MATCHES "Clang" - Clang or AppleClang, see CMP0025)
4 # - CV_ICC - Intel compiler
5 # - MSVC - Microsoft Visual Compiler (CMake variable)
6 # - MINGW / CYGWIN / CMAKE_COMPILER_IS_MINGW / CMAKE_COMPILER_IS_CYGWIN (CMake original variables)
10 # - ARM - ARM CPU, not defined for AArch64
11 # - AARCH64 - ARMv8+ (64-bit)
12 # - PPC64 / PPC64LE - PowerPC
16 # - WIN32 - Windows | MINGW
17 # - UNIX - Linux | MacOSX | ANDROID
20 # - APPLE - MacOSX | iOS
21 # ----------------------------------------------------------------------------
23 ocv_declare_removed_variables(MINGW64 MSVC64)
24 # do not use (CMake variables): CMAKE_CL_64
26 if(NOT DEFINED CV_GCC AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
29 if(NOT DEFINED CV_CLANG AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Clang or AppleClang (see CMP0025)
31 set(CMAKE_COMPILER_IS_CLANGCXX 1) # TODO next release: remove this
32 set(CMAKE_COMPILER_IS_CLANGCC 1) # TODO next release: remove this
35 function(access_CMAKE_COMPILER_IS_CLANGCXX)
36 if(NOT OPENCV_SUPPRESS_DEPRECATIONS)
37 message(WARNING "DEPRECATED: CMAKE_COMPILER_IS_CLANGCXX support is deprecated in OpenCV.
40 - CV_CLANG # Clang or AppleClang (see CMP0025)
44 variable_watch(CMAKE_COMPILER_IS_CLANGCXX access_CMAKE_COMPILER_IS_CLANGCXX)
45 variable_watch(CMAKE_COMPILER_IS_CLANGCC access_CMAKE_COMPILER_IS_CLANGCXX)
48 # ----------------------------------------------------------------------------
49 # Detect Intel ICC compiler
50 # ----------------------------------------------------------------------------
60 elseif(__INTEL_COMPILER)
61 set(CV_ICC __INTEL_COMPILER)
62 elseif(CMAKE_C_COMPILER MATCHES "icc")
63 set(CV_ICC icc_matches_c_compiler)
67 if(MSVC AND CMAKE_C_COMPILER MATCHES "icc|icl")
68 set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS)
71 if(NOT DEFINED CMAKE_CXX_COMPILER_VERSION
72 AND NOT OPENCV_SUPPRESS_MESSAGE_MISSING_COMPILER_VERSION)
73 message(WARNING "OpenCV: Compiler version is not available: CMAKE_CXX_COMPILER_VERSION is not set")
75 if((NOT DEFINED CMAKE_SYSTEM_PROCESSOR OR CMAKE_SYSTEM_PROCESSOR STREQUAL "")
76 AND NOT OPENCV_SUPPRESS_MESSAGE_MISSING_CMAKE_SYSTEM_PROCESSOR)
77 message(WARNING "OpenCV: CMAKE_SYSTEM_PROCESSOR is not defined. Perhaps CMake toolchain is broken")
79 if(NOT DEFINED CMAKE_SIZEOF_VOID_P
80 AND NOT OPENCV_SUPPRESS_MESSAGE_MISSING_CMAKE_SIZEOF_VOID_P)
81 message(WARNING "OpenCV: CMAKE_SIZEOF_VOID_P is not defined. Perhaps CMake toolchain is broken")
84 message(STATUS "Detected processor: ${CMAKE_SYSTEM_PROCESSOR}")
85 if(OPENCV_SKIP_SYSTEM_PROCESSOR_DETECTION)
86 # custom setup: required variables are passed through cache / CMake's command-line
87 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
89 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*")
91 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)")
93 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
95 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le")
97 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
99 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips.*|MIPS.*)")
102 if(NOT OPENCV_SUPPRESS_MESSAGE_UNRECOGNIZED_SYSTEM_PROCESSOR)
103 message(WARNING "OpenCV: unrecognized target processor configuration")
107 # Workaround for 32-bit operating systems on x86_64
108 if(CMAKE_SIZEOF_VOID_P EQUAL 4 AND X86_64
109 AND NOT FORCE_X86_64 # deprecated (2019-12)
110 AND NOT OPENCV_FORCE_X86_64
112 message(STATUS "sizeof(void) = 4 on 64 bit processor. Assume 32-bit compilation mode")
118 # Workaround for 32-bit operating systems on aarch64 processor
119 if(CMAKE_SIZEOF_VOID_P EQUAL 4 AND AARCH64
120 AND NOT OPENCV_FORCE_AARCH64
122 message(STATUS "sizeof(void) = 4 on 64 bit processor. Assume 32-bit compilation mode")
130 # Similar code exists in OpenCVConfig.cmake
131 if(NOT DEFINED OpenCV_STATIC)
132 # look for global setting
133 if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
134 set(OpenCV_STATIC OFF)
136 set(OpenCV_STATIC ON)
140 if(DEFINED OpenCV_ARCH AND DEFINED OpenCV_RUNTIME)
141 # custom overridden values
143 # see Modules/CMakeGenericSystem.cmake
144 if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
146 elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
147 set(arch_hint "ARM64")
148 elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
150 elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
156 if(MSVC_VERSION EQUAL 1400)
157 set(OpenCV_RUNTIME vc8)
158 elseif(MSVC_VERSION EQUAL 1500)
159 set(OpenCV_RUNTIME vc9)
160 elseif(MSVC_VERSION EQUAL 1600)
161 set(OpenCV_RUNTIME vc10)
162 elseif(MSVC_VERSION EQUAL 1700)
163 set(OpenCV_RUNTIME vc11)
164 elseif(MSVC_VERSION EQUAL 1800)
165 set(OpenCV_RUNTIME vc12)
166 elseif(MSVC_VERSION EQUAL 1900)
167 set(OpenCV_RUNTIME vc14)
168 elseif(MSVC_VERSION MATCHES "^191[0-9]$")
169 set(OpenCV_RUNTIME vc15)
170 elseif(MSVC_VERSION MATCHES "^192[0-9]$")
171 set(OpenCV_RUNTIME vc16)
173 message(WARNING "OpenCV does not recognize MSVC_VERSION \"${MSVC_VERSION}\". Cannot set OpenCV_RUNTIME")
176 set(OpenCV_RUNTIME mingw)
178 if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
185 # Fix handling of duplicated files in the same static library:
186 # https://public.kitware.com/Bug/view.php?id=14874
187 if(CMAKE_VERSION VERSION_LESS "3.1")
188 foreach(var CMAKE_C_ARCHIVE_APPEND CMAKE_CXX_ARCHIVE_APPEND)
189 if(${var} MATCHES "^<CMAKE_AR> r")
190 string(REPLACE "<CMAKE_AR> r" "<CMAKE_AR> q" ${var} "${${var}}")
196 #cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
197 set(CMAKE_CXX_STANDARD 11)
198 set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
199 set(CMAKE_CXX_EXTENSIONS OFF) # use -std=c++11 instead of -std=gnu++11
200 if(CMAKE_CXX11_COMPILE_FEATURES)
205 ocv_check_compiler_flag(CXX "" HAVE_CXX11 "${OpenCV_SOURCE_DIR}/cmake/checks/cxx11.cpp")
206 if(NOT HAVE_CXX11 AND ENABLE_CXX11)
207 ocv_check_compiler_flag(CXX "-std=c++11" HAVE_STD_CXX11 "${OpenCV_SOURCE_DIR}/cmake/checks/cxx11.cpp")
209 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
217 AND NOT (X86 OR X86_64)
218 AND NOT OPENCV_SKIP_LIBATOMIC_COMPILER_CHECK)
219 OR OPENCV_FORCE_LIBATOMIC_COMPILER_CHECK
221 ocv_check_compiler_flag(CXX "" HAVE_CXX_ATOMICS_WITHOUT_LIB "${OpenCV_SOURCE_DIR}/cmake/checks/atomic_check.cpp")
222 if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
223 list(APPEND CMAKE_REQUIRED_LIBRARIES atomic)
224 ocv_check_compiler_flag(CXX "" HAVE_CXX_ATOMICS_WITH_LIB "${OpenCV_SOURCE_DIR}/cmake/checks/atomic_check.cpp")
225 if(HAVE_CXX_ATOMICS_WITH_LIB)
226 list(APPEND OPENCV_LINKER_LIBS atomic)
228 message(FATAL_ERROR "C++11 compiler must support std::atomic")