瀏覽代碼

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.
Robert Maynard 2 年之前
父節點
當前提交
0744c02e24
共有 1 個文件被更改,包括 17 次插入8 次删除
  1. 17 8
      Modules/FindCUDAToolkit.cmake

+ 17 - 8
Modules/FindCUDAToolkit.cmake

@@ -1012,17 +1012,26 @@ if(CUDAToolkit_FOUND)
     )
     # 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_SEARCH_DIRS}
-            ENV CUDA_PATH
-      PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs
-    )
+    set(CUDA_IMPORT_PROPERTY IMPORTED_LOCATION)
+    set(CUDA_IMPORT_TYPE     UNKNOWN)
+    if(NOT CUDA_${lib_name}_LIBRARY)
+      find_library(CUDA_${lib_name}_LIBRARY
+        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)
 
     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}")
       if(DEFINED CUDAToolkit_MATH_INCLUDE_DIR)
         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}")
         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})
         if(TARGET CUDA::${dep})
           target_link_libraries(CUDA::${lib_name} INTERFACE CUDA::${dep})