[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