From 332ff4bf1cb34605ab66a324c52f5bbc23cb0b04 Mon Sep 17 00:00:00 2001 From: CSBVision Date: Fri, 21 Oct 2022 09:22:25 +0200 Subject: [PATCH] Update OpenCVDetectCUDA.cmake Adds the option to enable delay loading of CUDA DLLs on Windows. This is particularly useful to use the same binary on systems with and without CUDA support without distributing the CUDA DLLs to systems that cannot use them at all due to missing CUDA-supported hardware. Resolves #13509 --- cmake/OpenCVDetectCUDA.cmake | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index acc101396c..f7f054ac89 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -342,6 +342,8 @@ if(CUDA_FOUND) set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --use_fast_math) endif() + OCV_OPTION(CUDA_ENABLE_DELAYLOAD "Enable delayed loading of CUDA DLLs" OFF VISIBLE_IF MSVC AND (CMAKE_GENERATOR MATCHES "Visual Studio")) + mark_as_advanced(CUDA_BUILD_CUBIN CUDA_BUILD_EMULATION CUDA_VERBOSE_BUILD CUDA_SDK_ROOT_DIR) macro(ocv_cuda_filter_options) @@ -537,4 +539,15 @@ if(HAVE_CUDA) set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CMAKE_LIBRARY_PATH_FLAG}${p}) endif() endforeach() + + if(MSVC AND CUDA_ENABLE_DELAYLOAD) + file(GLOB CUDA_DLLS "${CUDA_TOOLKIT_ROOT_DIR}/bin/*.dll") + foreach(d ${CUDA_DLLS}) + cmake_path(GET "d" FILENAME DLL_NAME) + if(NOT ${DLL_NAME} MATCHES "cudart") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DELAYLOAD:${DLL_NAME}") + endif() + endforeach() + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4199") + endif() endif()