diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index 3116d9fd87..282ba3e529 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -88,7 +88,17 @@ if(CUDA_FOUND) set(__cuda_arch_bin "3.2") set(__cuda_arch_ptx "") elseif(AARCH64) - set(__cuda_arch_bin "5.3") + execute_process( COMMAND "${CUDA_NVCC_EXECUTABLE}" "${OpenCV_SOURCE_DIR}/cmake/checks/OpenCVDetectCudaArch.cu" "--run" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/" + RESULT_VARIABLE _nvcc_res OUTPUT_VARIABLE _nvcc_out + 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") + 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 "8.0") @@ -96,7 +106,6 @@ if(CUDA_FOUND) else() set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1") endif() - set(__cuda_arch_ptx "") endif() endif()