@@ -118,14 +118,42 @@ if (OSL_USE_OPTIX)
118118 message (STATUS "CUDA_TOOLKIT_ROOT_DIR = ${CUDA_TOOLKIT_ROOT_DIR} " )
119119 endif ()
120120
121- checked_find_package (CUDA REQUIRED
121+ if (CUDA_TOOLKIT_ROOT_DIR)
122+ set (CUDAToolkit_ROOT "${CUDA_TOOLKIT_ROOT_DIR} " )
123+ endif ()
124+
125+ checked_find_package (CUDAToolkit REQUIRED
122126 VERSION_MIN 9.0
123127 RECOMMEND_MIN 11.0
124128 RECOMMEND_MIN_REASON
125129 "We don't actively test CUDA older than 11"
126- PRINT CUDA_INCLUDES )
127- set (CUDA_INCLUDES ${CUDA_TOOLKIT_ROOT_DIR} /include)
128- include_directories (BEFORE "${CUDA_INCLUDES} " )
130+ PRINT CUDAToolkit_INCLUDE_DIRS CUDAToolkit_NVCC_EXECUTABLE )
131+
132+ # Compatibility bridge: legacy CUDA variables.
133+ set (CUDA_FOUND ${CUDAToolkit_FOUND} )
134+ set (CUDA_VERSION ${CUDAToolkit_VERSION} )
135+ set (CUDA_INCLUDES ${CUDAToolkit_INCLUDE_DIRS} )
136+ if (CUDA_INCLUDES)
137+ list (GET CUDA_INCLUDES 0 CUDA_INCLUDES)
138+ endif ()
139+
140+ # Derive the root dir. See https://cmake.org/cmake/help/latest/module/FindCUDAToolkit.html
141+ if (CUDAToolkit_LIBRARY_ROOT)
142+ set (CUDA_TOOLKIT_ROOT_DIR "${CUDAToolkit_LIBRARY_ROOT} " )
143+ elseif (CUDAToolkit_TARGET_DIR)
144+ set (CUDA_TOOLKIT_ROOT_DIR "${CUDAToolkit_TARGET_DIR} " )
145+ elseif (CUDAToolkit_BIN_DIR)
146+ get_filename_component (CUDA_TOOLKIT_ROOT_DIR "${CUDAToolkit_BIN_DIR} " DIRECTORY )
147+ endif ()
148+ if (NOT CUDA_TOOLKIT_ROOT_DIR)
149+ message (FATAL_ERROR "Could not determine CUDA toolkit root directory." )
150+ endif ()
151+
152+ if (CUDAToolkit_NVCC_EXECUTABLE)
153+ set (CUDA_NVCC_EXECUTABLE "${CUDAToolkit_NVCC_EXECUTABLE} " )
154+ else ()
155+ find_program (CUDA_NVCC_EXECUTABLE NAMES nvcc HINTS "${CUDA_TOOLKIT_ROOT_DIR} /bin" )
156+ endif ()
129157
130158 STRING (FIND ${LLVM_TARGETS} "NVPTX" nvptx_index)
131159 if (NOT ${nvptx_index} GREATER -1)
@@ -138,7 +166,11 @@ if (OSL_USE_OPTIX)
138166 # suffixes earlier in the suffix list. Don't forget to restore after
139167 # so that this only applies to these library searches right here.
140168 set (save_lib_path ${CMAKE_FIND_LIBRARY_SUFFIXES} )
141- if (CUDA_PREFER_STATIC_LIBS)
169+ if (CUDA_PREFER_STATIC_LIBS AND TARGET CUDA::cudart_static)
170+ set (cudart_lib CUDA::cudart_static)
171+ elseif (TARGET CUDA::cudart)
172+ set (cudart_lib CUDA::cudart)
173+ elseif (CUDA_PREFER_STATIC_LIBS)
142174 set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES} )
143175 find_library (cudart_lib REQUIRED
144176 NAMES cudart_static cudart
@@ -148,7 +180,6 @@ if (OSL_USE_OPTIX)
148180 NAMES cudart
149181 PATHS "${CUDA_TOOLKIT_ROOT_DIR} /lib64" "${CUDA_TOOLKIT_ROOT_DIR} /x64" "${CUDA_TOOLKIT_ROOT_DIR} /lib/x64" )
150182 endif ()
151- # Is it really a good idea to completely reset CUDA_LIBRARIES here?
152183 set (CUDA_LIBRARIES ${cudart_lib} )
153184 set (CUDA_EXTRA_LIBS ${CUDA_EXTRA_LIBS} dl rt)
154185 set (CMAKE_FIND_LIBRARY_SUFFIXES ${save_lib_path} )
0 commit comments