FindCUDAToolkit: targets pointing to stubs now use IMPORTED_IMPLIB

This ensures that we don't add rpath entries to the stubs directory
which would cause runtime loading of the wrong libraries.
This commit is contained in:
Robert Maynard
2023-07-24 14:56:28 -04:00
parent 6194193a8a
commit 0744c02e24

View File

@@ -1012,17 +1012,26 @@ if(CUDAToolkit_FOUND)
) )
# Don't try any stub directories until we have exhausted all other # Don't try any stub directories until we have exhausted all other
# search locations. # search locations.
find_library(CUDA_${lib_name}_LIBRARY set(CUDA_IMPORT_PROPERTY IMPORTED_LOCATION)
NAMES ${search_names} set(CUDA_IMPORT_TYPE UNKNOWN)
HINTS ${CUDAToolkit_LIBRARY_SEARCH_DIRS} if(NOT CUDA_${lib_name}_LIBRARY)
ENV CUDA_PATH find_library(CUDA_${lib_name}_LIBRARY
PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs NAMES ${search_names}
) HINTS ${CUDAToolkit_LIBRARY_SEARCH_DIRS}
ENV CUDA_PATH
PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs
)
if(CUDA_${lib_name}_LIBRARY AND NOT WIN32)
# Use `IMPORTED_IMPLIB` so that we don't add a `-rpath` entry for stub directories
set(CUDA_IMPORT_PROPERTY IMPORTED_IMPLIB)
set(CUDA_IMPORT_TYPE SHARED)
endif()
endif()
mark_as_advanced(CUDA_${lib_name}_LIBRARY) mark_as_advanced(CUDA_${lib_name}_LIBRARY)
if (NOT TARGET CUDA::${lib_name} AND CUDA_${lib_name}_LIBRARY) if (NOT TARGET CUDA::${lib_name} AND CUDA_${lib_name}_LIBRARY)
add_library(CUDA::${lib_name} UNKNOWN IMPORTED) add_library(CUDA::${lib_name} ${CUDA_IMPORT_TYPE} IMPORTED)
target_include_directories(CUDA::${lib_name} SYSTEM INTERFACE "${CUDAToolkit_INCLUDE_DIRS}") target_include_directories(CUDA::${lib_name} SYSTEM INTERFACE "${CUDAToolkit_INCLUDE_DIRS}")
if(DEFINED CUDAToolkit_MATH_INCLUDE_DIR) if(DEFINED CUDAToolkit_MATH_INCLUDE_DIR)
string(FIND ${CUDA_${lib_name}_LIBRARY} "math_libs" math_libs) string(FIND ${CUDA_${lib_name}_LIBRARY} "math_libs" math_libs)
@@ -1030,7 +1039,7 @@ if(CUDAToolkit_FOUND)
target_include_directories(CUDA::${lib_name} SYSTEM INTERFACE "${CUDAToolkit_MATH_INCLUDE_DIR}") target_include_directories(CUDA::${lib_name} SYSTEM INTERFACE "${CUDAToolkit_MATH_INCLUDE_DIR}")
endif() endif()
endif() endif()
set_property(TARGET CUDA::${lib_name} PROPERTY IMPORTED_LOCATION "${CUDA_${lib_name}_LIBRARY}") set_property(TARGET CUDA::${lib_name} PROPERTY ${CUDA_IMPORT_PROPERTY} "${CUDA_${lib_name}_LIBRARY}")
foreach(dep ${arg_DEPS}) foreach(dep ${arg_DEPS})
if(TARGET CUDA::${dep}) if(TARGET CUDA::${dep})
target_link_libraries(CUDA::${lib_name} INTERFACE CUDA::${dep}) target_link_libraries(CUDA::${lib_name} INTERFACE CUDA::${dep})