[Openmp-commits] [openmp] r323787 - [libomptarget] Check for library with CUDA Driver API

Jonas Hahnfeld via Openmp-commits openmp-commits at lists.llvm.org
Tue Jan 30 08:49:13 PST 2018


Author: hahnfeld
Date: Tue Jan 30 08:49:13 2018
New Revision: 323787

URL: http://llvm.org/viewvc/llvm-project?rev=323787&view=rev
Log:
[libomptarget] Check for library with CUDA Driver API

That's what we really need to link the CUDA plugin against,
not the CUDA runtime API in CUDA_LIBRARIES! While the latter
comes with the CUDA SDK, the Driver API is installed with
the kernel driver and there is at most one per system. As
fallback we can use the stubs library distributed with the
CUDA SDK for linking.

Differential Revision: https://reviews.llvm.org/D42643

Modified:
    openmp/trunk/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake
    openmp/trunk/libomptarget/plugins/cuda/CMakeLists.txt

Modified: openmp/trunk/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake?rev=323787&r1=323786&r2=323787&view=diff
==============================================================================
--- openmp/trunk/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake (original)
+++ openmp/trunk/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake Tue Jan 30 08:49:13 2018
@@ -115,10 +115,37 @@ mark_as_advanced(
 find_package(CUDA QUIET)
 
 set(LIBOMPTARGET_DEP_CUDA_FOUND ${CUDA_FOUND})
-set(LIBOMPTARGET_DEP_CUDA_LIBRARIES ${CUDA_LIBRARIES})
 set(LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS})
 
 mark_as_advanced(
   LIBOMPTARGET_DEP_CUDA_FOUND 
-  LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS
-  LIBOMPTARGET_DEP_CUDA_LIBRARIES)
+  LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS)
+
+################################################################################
+# Looking for CUDA Driver API... (needed for CUDA plugin)
+################################################################################
+
+find_library (
+    LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES
+  NAMES
+    cuda
+  PATHS
+    /lib64)
+
+# There is a libcuda.so in lib64/stubs that can be used for linking.
+if (NOT LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES AND CUDA_FOUND)
+  get_filename_component(CUDA_LIBDIR ${CUDA_LIBRARIES} DIRECTORY)
+  find_library (
+      LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES
+    NAMES
+      cuda
+    HINTS
+      "${CUDA_LIBDIR}/stubs")
+endif()
+
+find_package_handle_standard_args(
+  LIBOMPTARGET_DEP_CUDA_DRIVER
+  DEFAULT_MSG
+  LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES)
+
+mark_as_advanced(LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES)

Modified: openmp/trunk/libomptarget/plugins/cuda/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/plugins/cuda/CMakeLists.txt?rev=323787&r1=323786&r2=323787&view=diff
==============================================================================
--- openmp/trunk/libomptarget/plugins/cuda/CMakeLists.txt (original)
+++ openmp/trunk/libomptarget/plugins/cuda/CMakeLists.txt Tue Jan 30 08:49:13 2018
@@ -10,41 +10,41 @@
 # Build a plugin for a CUDA machine if available.
 #
 ##===----------------------------------------------------------------------===##
-if(LIBOMPTARGET_DEP_LIBELF_FOUND)
-  if(LIBOMPTARGET_DEP_CUDA_FOUND)
-    if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(ppc64le)$" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
-    
-      libomptarget_say("Building CUDA offloading plugin.")
-    
-      # Define the suffix for the runtime messaging dumps.
-      add_definitions(-DTARGET_NAME=CUDA)
-    
-      if(LIBOMPTARGET_CMAKE_BUILD_TYPE MATCHES debug)
-          add_definitions(-DCUDA_ERROR_REPORT)
-      endif()
-      
-      include_directories(${LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS})
-      include_directories(${LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIRS})
-    
-      add_library(omptarget.rtl.cuda SHARED src/rtl.cpp)
-      
-      # Install plugin under the lib destination folder.
-      install(TARGETS omptarget.rtl.cuda LIBRARY DESTINATION lib${OPENMP_LIBDIR_SUFFIX})
-      
-      target_link_libraries(omptarget.rtl.cuda 
-        ${LIBOMPTARGET_DEP_CUDA_LIBRARIES} 
-        cuda 
-        ${LIBOMPTARGET_DEP_LIBELF_LIBRARIES}
-        "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports")
-    
-      # Report to the parent scope that we are building a plugin for CUDA.
-      set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS} nvptx64-nvidia-cuda" PARENT_SCOPE)
-    else()
-      libomptarget_say("Not building CUDA offloading plugin: only support CUDA in Linux x86_64 or ppc64le hosts.")
-    endif()
-  else()
-    libomptarget_say("Not building CUDA offloading plugin: CUDA not found in system.")
-  endif()
-else(LIBOMPTARGET_DEP_LIBELF_FOUND)
+if (NOT(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(ppc64le)$" AND CMAKE_SYSTEM_NAME MATCHES "Linux"))
+  libomptarget_say("Not building CUDA offloading plugin: only support CUDA in Linux x86_64 or ppc64le hosts.")
+  return()
+elseif (NOT LIBOMPTARGET_DEP_LIBELF_FOUND)
   libomptarget_say("Not building CUDA offloading plugin: libelf dependency not found.")
-endif(LIBOMPTARGET_DEP_LIBELF_FOUND)
+  return()
+elseif(NOT LIBOMPTARGET_DEP_CUDA_FOUND)
+  libomptarget_say("Not building CUDA offloading plugin: CUDA not found in system.")
+  return()
+elseif(NOT LIBOMPTARGET_DEP_CUDA_DRIVER_FOUND)
+  libomptarget_say("Not building CUDA offloading plugin: CUDA Driver API not found in system.")
+  return()
+endif()
+
+libomptarget_say("Building CUDA offloading plugin.")
+
+# Define the suffix for the runtime messaging dumps.
+add_definitions(-DTARGET_NAME=CUDA)
+
+if(LIBOMPTARGET_CMAKE_BUILD_TYPE MATCHES debug)
+    add_definitions(-DCUDA_ERROR_REPORT)
+endif()
+
+include_directories(${LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS})
+include_directories(${LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIRS})
+
+add_library(omptarget.rtl.cuda SHARED src/rtl.cpp)
+
+# Install plugin under the lib destination folder.
+install(TARGETS omptarget.rtl.cuda LIBRARY DESTINATION lib${OPENMP_LIBDIR_SUFFIX})
+
+target_link_libraries(omptarget.rtl.cuda
+  ${LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES}
+  ${LIBOMPTARGET_DEP_LIBELF_LIBRARIES}
+  "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports")
+
+# Report to the parent scope that we are building a plugin for CUDA.
+set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS} nvptx64-nvidia-cuda" PARENT_SCOPE)




More information about the Openmp-commits mailing list