diff --git a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake --- a/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake +++ b/openmp/libomptarget/cmake/Modules/LibomptargetGetDependencies.cmake @@ -101,12 +101,13 @@ ################################################################################ # Looking for CUDA... ################################################################################ -if (CUDA_TOOLKIT_ROOT_DIR) - set(LIBOMPTARGET_CUDA_TOOLKIT_ROOT_DIR_PRESET TRUE) -endif() -find_package(CUDA QUIET) -# Identify any locally installed GPUs to use for testing. +find_package(CUDAToolkit QUIET) +set(LIBOMPTARGET_DEP_CUDA_FOUND ${CUDAToolkit_FOUND}) + +################################################################################ +# Looking for NVIDIA GPUs... +################################################################################ set(LIBOMPTARGET_DEP_CUDA_ARCH "sm_35") find_program(LIBOMPTARGET_NVPTX_ARCH NAMES nvptx-arch PATHS ${LLVM_BINARY_DIR}/bin) @@ -123,41 +124,6 @@ endif() endif() -set(LIBOMPTARGET_DEP_CUDA_FOUND ${CUDA_FOUND}) -set(LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS}) - -mark_as_advanced( - LIBOMPTARGET_DEP_CUDA_FOUND - 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_cudart_static_LIBRARY}" 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) ################################################################################ # Looking for AMD GPUs... @@ -234,33 +200,4 @@ LIBOMPTARGET_DEP_VEO_FOUND LIBOMPTARGET_DEP_VEO_INCLUDE_DIRS) -# Looking for CUDA libdevice subdirectory -# -# Special case for Debian/Ubuntu to have nvidia-cuda-toolkit work -# out of the box. More info on http://bugs.debian.org/882505 -################################################################################ - -set(LIBOMPTARGET_CUDA_LIBDEVICE_SUBDIR nvvm/libdevice) - -# Don't alter CUDA_TOOLKIT_ROOT_DIR if the user specified it, if a value was -# already cached for it, or if it already has libdevice. Otherwise, on -# Debian/Ubuntu, look where the nvidia-cuda-toolkit package normally installs -# libdevice. -if (NOT LIBOMPTARGET_CUDA_TOOLKIT_ROOT_DIR_PRESET AND - NOT EXISTS - "${CUDA_TOOLKIT_ROOT_DIR}/${LIBOMPTARGET_CUDA_LIBDEVICE_SUBDIR}") - find_program(LSB_RELEASE lsb_release) - if (LSB_RELEASE) - execute_process(COMMAND ${LSB_RELEASE} -is - OUTPUT_VARIABLE LSB_RELEASE_ID - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(candidate_dir /usr/lib/cuda) - if ((LSB_RELEASE_ID STREQUAL "Debian" OR LSB_RELEASE_ID STREQUAL "Ubuntu") - AND EXISTS "${candidate_dir}/${LIBOMPTARGET_CUDA_LIBDEVICE_SUBDIR}") - set(CUDA_TOOLKIT_ROOT_DIR "${candidate_dir}" CACHE PATH - "Toolkit location." FORCE) - endif() - endif() -endif() - set(OPENMP_PTHREAD_LIB ${LLVM_PTHREAD_LIB}) diff --git a/openmp/libomptarget/plugins-nextgen/cuda/CMakeLists.txt b/openmp/libomptarget/plugins-nextgen/cuda/CMakeLists.txt --- a/openmp/libomptarget/plugins-nextgen/cuda/CMakeLists.txt +++ b/openmp/libomptarget/plugins-nextgen/cuda/CMakeLists.txt @@ -23,76 +23,45 @@ libomptarget_say("Building CUDA NextGen offloading plugin.") -# Define the suffix for the runtime messaging dumps. -add_definitions("-DTARGET_NAME=CUDA") - -# Define debug prefix. TODO: This should be automatized in the Debug.h but it -# requires changing the original plugins. -add_definitions(-DDEBUG_PREFIX="TARGET CUDA RTL") - set(LIBOMPTARGET_DLOPEN_LIBCUDA OFF) option(LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA "Build with dlopened libcuda" ${LIBOMPTARGET_DLOPEN_LIBCUDA}) -set(LIBOMPTARGET_CAN_LINK_LIBCUDA FALSE) -if (LIBOMPTARGET_DEP_CUDA_FOUND AND LIBOMPTARGET_DEP_CUDA_DRIVER_FOUND) - set(LIBOMPTARGET_CAN_LINK_LIBCUDA TRUE) -endif() +add_llvm_library(omptarget.rtl.cuda.nextgen SHARED + src/rtl.cpp -if (LIBOMPTARGET_CAN_LINK_LIBCUDA AND NOT LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA) - libomptarget_say("Building CUDA NextGen plugin linked against libcuda") - include_directories(${LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS}) - add_llvm_library(omptarget.rtl.cuda.nextgen SHARED + LINK_COMPONENTS + Support + Object - src/rtl.cpp + LINK_LIBS PRIVATE + elf_common + MemoryManager + PluginInterface + ${OPENMP_PTHREAD_LIB} + "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports,-z,defs" - ADDITIONAL_HEADER_DIRS - ${LIBOMPTARGET_INCLUDE_DIR} - - LINK_LIBS - PRIVATE - elf_common - MemoryManager - PluginInterface - ${LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES} - ${OPENMP_PTHREAD_LIB} - "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports" - "-Wl,-z,defs" + NO_INSTALL_RPATH +) - NO_INSTALL_RPATH - ) +if(LIBOMPTARGET_DEP_CUDA_FOUND AND NOT LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA) + libomptarget_say("Building CUDA plugin linked against libcuda") + target_link_libraries(omptarget.rtl.cuda.nextgen PRIVATE CUDA::cuda_driver) else() - libomptarget_say("Building CUDA NextGen plugin for dlopened libcuda") - include_directories(../../plugins/cuda/dynamic_cuda) - add_llvm_library(omptarget.rtl.cuda.nextgen - SHARED - - src/rtl.cpp - ../../plugins/cuda/dynamic_cuda/cuda.cpp - - ADDITIONAL_HEADER_DIRS - ${LIBOMPTARGET_INCLUDE_DIR} - - LINK_LIBS - PRIVATE - elf_common - MemoryManager - PluginInterface - ${CMAKE_DL_LIBS} - ${OPENMP_PTHREAD_LIB} - "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports" - "-Wl,-z,defs" - - NO_INSTALL_RPATH - ) + libomptarget_say("Building CUDA plugin for dlopened libcuda") + target_include_directories(omptarget.rtl.cuda.nextgen PRIVATE dynamic_cuda) + target_sources(omptarget.rtl.cuda.nextgen PRIVATE dynamic_cuda/cuda.cpp) endif() add_dependencies(omptarget.rtl.cuda.nextgen omptarget.devicertl.nvptx) +# Define debug prefix. TODO: This should be automatized in the Debug.h but it +# requires changing the original plugins. +target_compile_definitions(omptarget.rtl.cuda.nextgen PRIVATE TARGET_NAME="CUDA") +target_compile_definitions(omptarget.rtl.cuda.nextgen PRIVATE DEBUG_PREFIX="TARGET CUDA RTL") + +target_include_directories(omptarget.rtl.cuda.nextgen PRIVATE ${LIBOMPTARGET_INCLUDE_DIR}) + # Install plugin under the lib destination folder. install(TARGETS omptarget.rtl.cuda.nextgen LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}") set_target_properties(omptarget.rtl.cuda.nextgen PROPERTIES INSTALL_RPATH "$ORIGIN" BUILD_RPATH "$ORIGIN:${CMAKE_CURRENT_BINARY_DIR}/.." CXX_VISIBILITY_PRESET protected) - -target_include_directories(omptarget.rtl.cuda.nextgen PRIVATE - ${LIBOMPTARGET_INCLUDE_DIR} -) diff --git a/openmp/libomptarget/plugins/cuda/CMakeLists.txt b/openmp/libomptarget/plugins/cuda/CMakeLists.txt --- a/openmp/libomptarget/plugins/cuda/CMakeLists.txt +++ b/openmp/libomptarget/plugins/cuda/CMakeLists.txt @@ -23,77 +23,45 @@ libomptarget_say("Building CUDA offloading plugin.") -# Define the suffix for the runtime messaging dumps. -add_definitions(-DTARGET_NAME=CUDA) - set(LIBOMPTARGET_DLOPEN_LIBCUDA OFF) option(LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA "Build with dlopened libcuda" ${LIBOMPTARGET_DLOPEN_LIBCUDA}) -set(LIBOMPTARGET_CAN_LINK_LIBCUDA FALSE) -if (LIBOMPTARGET_DEP_CUDA_FOUND AND LIBOMPTARGET_DEP_CUDA_DRIVER_FOUND) - set(LIBOMPTARGET_CAN_LINK_LIBCUDA TRUE) -endif() - -if (LIBOMPTARGET_CAN_LINK_LIBCUDA AND NOT LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA) - libomptarget_say("Building CUDA plugin linked against libcuda") - include_directories(${LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS}) - add_llvm_library(omptarget.rtl.cuda SHARED - - src/rtl.cpp +add_llvm_library(omptarget.rtl.cuda SHARED + src/rtl.cpp - ADDITIONAL_HEADER_DIRS - ${LIBOMPTARGET_INCLUDE_DIR} + LINK_COMPONENTS + Support + Object - LINK_COMPONENTS - Support - Object + LINK_LIBS PRIVATE + elf_common + MemoryManager + ${OPENMP_PTHREAD_LIB} + "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports,-z,defs" - LINK_LIBS - PRIVATE - elf_common - MemoryManager - ${LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES} - ${OPENMP_PTHREAD_LIB} - "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports" - "-Wl,-z,defs" + NO_INSTALL_RPATH +) - NO_INSTALL_RPATH - ) +if(LIBOMPTARGET_DEP_CUDA_FOUND AND NOT LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA) + libomptarget_say("Building CUDA plugin linked against libcuda") + target_link_libraries(omptarget.rtl.cuda PRIVATE CUDA::cuda_driver) else() libomptarget_say("Building CUDA plugin for dlopened libcuda") - include_directories(dynamic_cuda) - add_llvm_library(omptarget.rtl.cuda - SHARED - - src/rtl.cpp - dynamic_cuda/cuda.cpp - - ADDITIONAL_HEADER_DIRS - ${LIBOMPTARGET_INCLUDE_DIR} - - LINK_LIBS - PRIVATE - elf_common - MemoryManager - ${OPENMP_PTHREAD_LIB} - "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports" - "-Wl,-z,defs" - - NO_INSTALL_RPATH - ) + target_include_directories(omptarget.rtl.cuda PRIVATE dynamic_cuda) + target_sources(omptarget.rtl.cuda PRIVATE dynamic_cuda/cuda.cpp) endif() add_dependencies(omptarget.rtl.cuda omptarget.devicertl.nvptx) +# Define the suffix for the runtime messaging dumps. +target_compile_definitions(omptarget.rtl.cuda PRIVATE TARGET_NAME="CUDA") +target_include_directories(omptarget.rtl.cuda PRIVATE ${LIBOMPTARGET_INCLUDE_DIR}) + # Install plugin under the lib destination folder. install(TARGETS omptarget.rtl.cuda LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}") set_target_properties(omptarget.rtl.cuda PROPERTIES INSTALL_RPATH "$ORIGIN" BUILD_RPATH "$ORIGIN:${CMAKE_CURRENT_BINARY_DIR}/.." CXX_VISIBILITY_PRESET protected) -target_include_directories(omptarget.rtl.cuda PRIVATE - ${LIBOMPTARGET_INCLUDE_DIR} -) - # Report to the parent scope that we are building a plugin for CUDA. # This controls whether tests are run for the nvptx offloading target # Run them if libcuda is available, or if the user explicitly asked for dlopen @@ -101,7 +69,6 @@ option(LIBOMPTARGET_FORCE_NVIDIA_TESTS "Build NVIDIA libomptarget tests" OFF) if (LIBOMPTARGET_FOUND_NVIDIA_GPU OR LIBOMPTARGET_FORCE_NVIDIA_TESTS) libomptarget_say("Enable tests using CUDA plugin") - set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS} nvptx64-nvidia-cuda nvptx64-nvidia-cuda-oldDriver" PARENT_SCOPE) set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS} nvptx64-nvidia-cuda nvptx64-nvidia-cuda-LTO" PARENT_SCOPE) list(APPEND LIBOMPTARGET_TESTED_PLUGINS "omptarget.rtl.cuda") set(LIBOMPTARGET_TESTED_PLUGINS "${LIBOMPTARGET_TESTED_PLUGINS}" PARENT_SCOPE)