mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-09 07:11:05 -06:00
FindCUDAToolkit: Ensure that paths provided have no symlinks
Fixes: #24188
This commit is contained in:
committed by
Brad King
parent
f72c405d4e
commit
9d012b1f69
@@ -31,9 +31,6 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "nvhpc_")
|
||||
list(APPEND test_exclusions
|
||||
# FIXME(#24187): This test fails with NVHPC as the CUDA host compiler.
|
||||
"^CudaOnly.SeparateCompilationPTX$"
|
||||
|
||||
# FIXME(#24188): FindCUDAToolkit breaks on some symlink layouts.
|
||||
"^Cuda.Toolkit$"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -894,8 +894,25 @@ mark_as_advanced(CUDA_CUDART
|
||||
if(CUDAToolkit_FOUND)
|
||||
set(CUDAToolkit_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIR})
|
||||
get_filename_component(CUDAToolkit_LIBRARY_DIR ${CUDA_CUDART} DIRECTORY ABSOLUTE)
|
||||
|
||||
# Build search paths without any symlinks
|
||||
file(REAL_PATH "${CUDAToolkit_LIBRARY_DIR}" _cmake_search_dir)
|
||||
set(CUDAToolkit_LIBRARY_SEARCH_DIRS "${_cmake_search_dir}")
|
||||
|
||||
# Detect we are in a splayed nvhpc toolkit layout and add extra
|
||||
# search paths without symlinks
|
||||
if(CUDAToolkit_LIBRARY_DIR MATCHES ".*/cuda/${CUDAToolkit_VERSION_MAJOR}.${CUDAToolkit_VERSION_MINOR}/lib64$")
|
||||
# Search location for math_libs/
|
||||
file(REAL_PATH "${CUDAToolkit_LIBRARY_DIR}/../../../" _cmake_search_dir)
|
||||
list(APPEND CUDAToolkit_LIBRARY_SEARCH_DIRS "${_cmake_search_dir}")
|
||||
|
||||
# Search location for extras like cupti
|
||||
file(REAL_PATH "${CUDAToolkit_LIBRARY_DIR}/../" _cmake_search_dir)
|
||||
list(APPEND CUDAToolkit_LIBRARY_SEARCH_DIRS "${_cmake_search_dir}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Construct import targets
|
||||
if(CUDAToolkit_FOUND)
|
||||
@@ -907,21 +924,21 @@ if(CUDAToolkit_FOUND)
|
||||
|
||||
find_library(CUDA_${lib_name}_LIBRARY
|
||||
NAMES ${search_names}
|
||||
HINTS ${CUDAToolkit_LIBRARY_DIR}
|
||||
HINTS ${CUDAToolkit_LIBRARY_SEARCH_DIRS}
|
||||
ENV CUDA_PATH
|
||||
PATH_SUFFIXES nvidia/current lib64 lib/x64 lib
|
||||
# Support NVHPC splayed math library layout
|
||||
math_libs/${CUDAToolkit_VERSION_MAJOR}.${CUDAToolkit_VERSION_MINOR}/lib64
|
||||
math_libs/lib64
|
||||
${arg_EXTRA_PATH_SUFFIXES}
|
||||
)
|
||||
# Don't try any stub directories until we have exhausted all other
|
||||
# search locations.
|
||||
find_library(CUDA_${lib_name}_LIBRARY
|
||||
NAMES ${search_names}
|
||||
HINTS ${CUDAToolkit_LIBRARY_DIR}
|
||||
HINTS ${CUDAToolkit_LIBRARY_SEARCH_DIRS}
|
||||
ENV CUDA_PATH
|
||||
PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs
|
||||
# Support NVHPC splayed math library layout
|
||||
../../math_libs/${CUDAToolkit_VERSION_MAJOR}.${CUDAToolkit_VERSION_MINOR}/lib64
|
||||
../../math_libs/lib64
|
||||
)
|
||||
|
||||
mark_as_advanced(CUDA_${lib_name}_LIBRARY)
|
||||
@@ -1054,11 +1071,15 @@ if(CUDAToolkit_FOUND)
|
||||
|
||||
if(CUDAToolkit_CUPTI_INCLUDE_DIR)
|
||||
_CUDAToolkit_find_and_add_import_lib(cupti
|
||||
EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/
|
||||
EXTRA_PATH_SUFFIXES extras/CUPTI/lib64/
|
||||
extras/CUPTI/lib/
|
||||
../extras/CUPTI/lib64/
|
||||
../extras/CUPTI/lib/
|
||||
EXTRA_INCLUDE_DIRS "${CUDAToolkit_CUPTI_INCLUDE_DIR}")
|
||||
_CUDAToolkit_find_and_add_import_lib(cupti_static
|
||||
EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/
|
||||
EXTRA_PATH_SUFFIXES extras/CUPTI/lib64/
|
||||
extras/CUPTI/lib/
|
||||
../extras/CUPTI/lib64/
|
||||
../extras/CUPTI/lib/
|
||||
EXTRA_INCLUDE_DIRS "${CUDAToolkit_CUPTI_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
@@ -30,6 +30,8 @@ endif()
|
||||
foreach (cuda_lib IN LISTS cuda_libs)
|
||||
if(NOT CUDA_${cuda_lib}_LIBRARY)
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
|
||||
elseif(CUDA_${cuda_lib}_LIBRARY MATCHES [[\.\./]])
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY[\"${CUDA_${cuda_lib}_LIBRARY}\"] to not contain /..")
|
||||
endif()
|
||||
if(NOT TARGET CUDA::${cuda_lib})
|
||||
message(FATAL_ERROR "expected CUDAToolkit target CUDA::${cuda_lib} not found")
|
||||
@@ -41,6 +43,9 @@ if(CUDAToolkit_VERSION_MAJOR VERSION_LESS 11)
|
||||
list(APPEND npp_libs nppicom)
|
||||
endif()
|
||||
foreach (cuda_lib IN LISTS npp_libs)
|
||||
if(CUDA_${cuda_lib}_LIBRARY MATCHES [[\.\./]])
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY[\"${CUDA_${cuda_lib}_LIBRARY}\"] to not contain /..")
|
||||
endif()
|
||||
if(NOT TARGET CUDA::${cuda_lib})
|
||||
message(FATAL_ERROR "The CUDA::${cuda_lib} target was expected but couldn't be found")
|
||||
endif()
|
||||
|
||||
@@ -28,6 +28,8 @@ endif()
|
||||
foreach (cuda_lib IN LISTS cuda_libs)
|
||||
if(NOT CUDA_${cuda_lib}_LIBRARY)
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
|
||||
elseif(CUDA_${cuda_lib}_LIBRARY MATCHES [[\.\./]])
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY[\"${CUDA_${cuda_lib}_LIBRARY}\"] to not contain /..")
|
||||
endif()
|
||||
if(NOT TARGET CUDA::${cuda_lib})
|
||||
message(FATAL_ERROR "expected CUDAToolkit target CUDA::${cuda_lib} not found")
|
||||
@@ -41,6 +43,8 @@ endif()
|
||||
foreach (cuda_lib )
|
||||
if(NOT CUDA_${cuda_lib}_LIBRARY)
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
|
||||
elseif(CUDA_${cuda_lib}_LIBRARY MATCHES [[\.\./]])
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY[\"${CUDA_${cuda_lib}_LIBRARY}\"] to not contain /..")
|
||||
endif()
|
||||
if(NOT TARGET CUDA::${cuda_lib})
|
||||
message(FATAL_ERROR "expected CUDAToolkit target CUDA::${cuda_lib} not found")
|
||||
@@ -50,6 +54,8 @@ endforeach()
|
||||
foreach (cuda_lib nvrtc nvToolsExt OpenCL)
|
||||
if(NOT CUDA_${cuda_lib}_LIBRARY)
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
|
||||
elseif(CUDA_${cuda_lib}_LIBRARY MATCHES [[\.\./]])
|
||||
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY[\"${CUDA_${cuda_lib}_LIBRARY}\"] to not contain /..")
|
||||
endif()
|
||||
|
||||
if(NOT TARGET CUDA::${cuda_lib})
|
||||
|
||||
Reference in New Issue
Block a user