From 1d9dda3f09d164a6da66f37f622f51dd6c8b085c Mon Sep 17 00:00:00 2001 From: cudawarped <12133430+cudawarped@users.noreply.github.com> Date: Fri, 21 Mar 2025 13:41:49 +0200 Subject: [PATCH] Merge pull request #27112 from cudawarped:add_cuda_c++17 cuda: Force C++17 Standard for CUDA targets when CUDA Toolkit >=12.8 #27112 Fix https://github.com/opencv/opencv/issues/27095. ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [ ] The PR is proposed to the proper branch - [ ] There is a reference to the original bug report and related work - [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake --- cmake/OpenCVDetectCUDA.cmake | 8 +++++--- cmake/OpenCVDetectCUDALanguage.cmake | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index 06998400d7..c5ce8762f2 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -151,12 +151,14 @@ macro(ocv_cuda_compile VAR) ocv_check_windows_crt_linkage() ocv_nvcc_flags() - if(UNIX OR APPLE) - if(NOT " ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_DEBUG} ${CUDA_NVCC_FLAGS}" MATCHES "-std=") + if(NOT " ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_DEBUG} ${CUDA_NVCC_FLAGS}" MATCHES "-std=") + if(UNIX OR APPLE) if(CUDA_VERSION VERSION_LESS "11.0") list(APPEND CUDA_NVCC_FLAGS "--std=c++11") - else() + elseif(CUDA_VERSION VERSION_LESS "12.8") list(APPEND CUDA_NVCC_FLAGS "--std=c++14") + elseif(CUDA_VERSION VERSION_GREATER_EQUAL "12.8") + list(APPEND CUDA_NVCC_FLAGS "--std=c++17") endif() endif() endif() diff --git a/cmake/OpenCVDetectCUDALanguage.cmake b/cmake/OpenCVDetectCUDALanguage.cmake index 0eeea77f2c..bc40134180 100644 --- a/cmake/OpenCVDetectCUDALanguage.cmake +++ b/cmake/OpenCVDetectCUDALanguage.cmake @@ -33,10 +33,12 @@ if(CMAKE_CUDA_COMPILER AND CUDAToolkit_FOUND) set(CUDA_TOOLKIT_INCLUDE ${CUDAToolkit_INCLUDE_DIRS}) set(CUDA_VERSION_STRING ${CUDAToolkit_VERSION}) set(CUDA_VERSION ${CUDAToolkit_VERSION}) - if(NOT CUDA_VERSION VERSION_LESS 11.0) + if(CUDA_VERSION VERSION_LESS 11.0) + set(CMAKE_CUDA_STANDARD 11) + elseif(CUDA_VERSION VERSION_LESS 12.8) set(CMAKE_CUDA_STANDARD 14) else() - set(CMAKE_CUDA_STANDARD 11) + set(CMAKE_CUDA_STANDARD 17) endif() if(UNIX AND NOT BUILD_SHARED_LIBS) set(CUDA_LIB_EXT "_static")