summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake33
-rw-r--r--openmp/libomptarget/plugins/cuda/CMakeLists.txt74
2 files changed, 67 insertions, 40 deletions
diff --git a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake
index 37227c09648..acdaff21e2c 100644
--- a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake
+++ b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake
@@ -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)
diff --git a/openmp/libomptarget/plugins/cuda/CMakeLists.txt b/openmp/libomptarget/plugins/cuda/CMakeLists.txt
index 83ece5409e8..8763065e78c 100644
--- a/openmp/libomptarget/plugins/cuda/CMakeLists.txt
+++ b/openmp/libomptarget/plugins/cuda/CMakeLists.txt
@@ -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)
OpenPOWER on IntegriCloud