Index: libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake =================================================================== --- libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake +++ libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake @@ -115,10 +115,37 @@ 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) Index: libomptarget/plugins/cuda/CMakeLists.txt =================================================================== --- libomptarget/plugins/cuda/CMakeLists.txt +++ 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)