return()
endif()
-if(NOT APPLE AND CV_CLANG)
+if(NOT UNIX AND CV_CLANG)
message(STATUS "CUDA compilation is disabled (due to Clang unsupported on your platform).")
return()
endif()
-set(CMAKE_MODULE_PATH "${OpenCV_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
-if(ANDROID)
- set(CUDA_TARGET_OS_VARIANT "Android")
-endif()
-find_host_package(CUDA "${MIN_VER_CUDA}" QUIET)
+if(((NOT CMAKE_VERSION VERSION_LESS "3.9.0") # requires https://gitlab.kitware.com/cmake/cmake/merge_requests/663
+ OR OPENCV_CUDA_FORCE_EXTERNAL_CMAKE_MODULE)
+ AND NOT OPENCV_CUDA_FORCE_BUILTIN_CMAKE_MODULE)
+ ocv_update(CUDA_LINK_LIBRARIES_KEYWORD "LINK_PRIVATE")
+ find_host_package(CUDA "${MIN_VER_CUDA}" QUIET)
+else()
+ # Use OpenCV's patched "FindCUDA" module
+ set(CMAKE_MODULE_PATH "${OpenCV_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
-list(REMOVE_AT CMAKE_MODULE_PATH 0)
+ if(ANDROID)
+ set(CUDA_TARGET_OS_VARIANT "Android")
+ endif()
+ find_host_package(CUDA "${MIN_VER_CUDA}" QUIET)
+
+ list(REMOVE_AT CMAKE_MODULE_PATH 0)
+endif()
if(CUDA_FOUND)
set(HAVE_CUDA 1)
message(STATUS "CUDA detected: " ${CUDA_VERSION})
- set(_generations "Fermi" "Kepler" "Maxwell" "Pascal" "Volta")
+ set(_generations "Fermi" "Kepler" "Maxwell" "Pascal" "Volta" "Turing")
if(NOT CMAKE_CROSSCOMPILING)
list(APPEND _generations "Auto")
endif()
set(__cuda_arch_bin "6.0 6.1")
elseif(CUDA_GENERATION STREQUAL "Volta")
set(__cuda_arch_bin "7.0")
+ elseif(CUDA_GENERATION STREQUAL "Turing")
+ set(__cuda_arch_bin "7.5")
elseif(CUDA_GENERATION STREQUAL "Auto")
execute_process( COMMAND "${CUDA_NVCC_EXECUTABLE}" ${CUDA_NVCC_FLAGS} "${OpenCV_SOURCE_DIR}/cmake/checks/OpenCVDetectCudaArch.cu" "--run"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/"
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT _nvcc_res EQUAL 0)
message(STATUS "Automatic detection of CUDA generation failed. Going to build for all known architectures.")
- set(__cuda_arch_bin "5.3 6.2 7.0")
+ set(__cuda_arch_bin "5.3 6.2 7.2")
else()
set(__cuda_arch_bin "${_nvcc_out}")
string(REPLACE "2.1" "2.1(2.0)" __cuda_arch_bin "${__cuda_arch_bin}")
endif()
set(__cuda_arch_ptx "")
else()
- if(${CUDA_VERSION} VERSION_LESS "9.0")
+ if(CUDA_VERSION VERSION_LESS "9.0")
set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1")
- else()
+ elseif(CUDA_VERSION VERSION_LESS "10.0")
set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1 7.0")
+ else()
+ set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1 7.0 7.5")
endif()
endif()
endif()
foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG)
set(${var}_backup_in_cuda_compile_ "${${var}}")
+ if (CV_CLANG)
+ # we remove -Winconsistent-missing-override and -Qunused-arguments
+ # just in case we are compiling CUDA with gcc but OpenCV with clang
+ string(REPLACE "-Winconsistent-missing-override" "" ${var} "${${var}}")
+ string(REPLACE "-Qunused-arguments" "" ${var} "${${var}}")
+ endif()
+
# we remove /EHa as it generates warnings under windows
string(REPLACE "/EHa" "" ${var} "${${var}}")
# cc1: warning: command line option '-Wsuggest-override' is valid for C++/ObjC++ but not for C
string(REPLACE "-Wsuggest-override" "" ${var} "${${var}}")
+
+ # issue: #11552 (from OpenCVCompilerOptions.cmake)
+ string(REGEX REPLACE "-Wimplicit-fallthrough(=[0-9]+)? " "" ${var} "${${var}}")
+
+ # removal of custom specified options
+ if(OPENCV_CUDA_NVCC_FILTEROUT_OPTIONS)
+ foreach(__flag ${OPENCV_CUDA_NVCC_FILTEROUT_OPTIONS})
+ string(REPLACE "${__flag}" "" ${var} "${${var}}")
+ endforeach()
+ endif()
endforeach()
endmacro()