[Openmp-commits] [llvm] [openmp] [offload][OpenMP] Require CUDA 11.8 (PR #191100)

Kevin Sala Penades via Openmp-commits openmp-commits at lists.llvm.org
Wed Apr 15 16:58:23 PDT 2026


https://github.com/kevinsala updated https://github.com/llvm/llvm-project/pull/191100

>From 6a4f272dce768afbbac88b274fbe905ac547c832 Mon Sep 17 00:00:00 2001
From: Kevin Sala <salapenades1 at llnl.gov>
Date: Wed, 8 Apr 2026 19:35:07 -0700
Subject: [PATCH 1/2] [offload][OpenMP] Require CUDA 11.8

---
 offload/CMakeLists.txt                      |  3 +++
 offload/plugins-nextgen/cuda/CMakeLists.txt |  3 ++-
 offload/plugins-nextgen/cuda/src/rtl.cpp    | 16 ++++++++++++++++
 offload/test/CMakeLists.txt                 |  2 +-
 offload/unittests/CMakeLists.txt            |  2 +-
 openmp/docs/Building.md                     | 11 ++++++-----
 6 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/offload/CMakeLists.txt b/offload/CMakeLists.txt
index 99004d83e819a..9e8925b8610b4 100644
--- a/offload/CMakeLists.txt
+++ b/offload/CMakeLists.txt
@@ -4,6 +4,9 @@
 cmake_minimum_required(VERSION 3.20.0)
 set(LLVM_SUBPROJECT_TITLE "liboffload")
 
+# The minimum versions required for dependencies.
+set(OFFLOAD_MINIMUM_CUDA_VERSION 11.8.0)
+
 # Check that the library can actually be built.
 if(APPLE OR WIN32 OR WASM)
   message(WARNING "libomptarget cannot be built on Windows and MacOS X!")
diff --git a/offload/plugins-nextgen/cuda/CMakeLists.txt b/offload/plugins-nextgen/cuda/CMakeLists.txt
index 5fdfb8f9cf628..687842db006e9 100644
--- a/offload/plugins-nextgen/cuda/CMakeLists.txt
+++ b/offload/plugins-nextgen/cuda/CMakeLists.txt
@@ -3,7 +3,8 @@ add_target_library(omptarget.rtl.cuda CUDA)
 
 target_sources(omptarget.rtl.cuda PRIVATE src/rtl.cpp)
 
-find_package(CUDAToolkit QUIET)
+find_package(CUDAToolkit QUIET ${OFFLOAD_MINIMUM_CUDA_VERSION})
+
 if(CUDAToolkit_FOUND AND NOT "cuda" IN_LIST LIBOMPTARGET_DLOPEN_PLUGINS)
   message(STATUS "Building CUDA plugin linked against libcuda")
   target_link_libraries(omptarget.rtl.cuda PRIVATE CUDA::cuda_driver)
diff --git a/offload/plugins-nextgen/cuda/src/rtl.cpp b/offload/plugins-nextgen/cuda/src/rtl.cpp
index 7a47f2ce7e5aa..2e2b1be809e5c 100644
--- a/offload/plugins-nextgen/cuda/src/rtl.cpp
+++ b/offload/plugins-nextgen/cuda/src/rtl.cpp
@@ -1594,6 +1594,22 @@ struct CUDAPluginTy final : public GenericPluginTy {
     if (auto Err = Plugin::check(Res, "error in cuInit: %s"))
       return std::move(Err);
 
+    // Get the latest CUDA version supported by the driver.
+    int Version;
+    Res = cuDriverGetVersion(&Version);
+    if (auto Err = Plugin::check(Res, "error in cuDriverGetVersion: %s"))
+      return std::move(Err);
+
+    // Verify that the driver supports the minimum CUDA version required.
+    constexpr int MinVersion = 11080;
+    if (Version < MinVersion) {
+      ODBG(OLDT_Init) << "Minimum CUDA version not supported by the driver.";
+      return Plugin::error(
+          ErrorCode::UNSUPPORTED,
+          "CUDA driver does not support minimum CUDA version %d (%d detected)",
+          MinVersion, Version);
+    }
+
     // Get the number of devices.
     int NumDevices;
     Res = cuDeviceGetCount(&NumDevices);
diff --git a/offload/test/CMakeLists.txt b/offload/test/CMakeLists.txt
index fa1a1bacc4062..bda84de698741 100644
--- a/offload/test/CMakeLists.txt
+++ b/offload/test/CMakeLists.txt
@@ -16,7 +16,7 @@ endif()
 # char into the lit command.
 string(REPLACE " " ";" LIBOMPTARGET_LIT_ARG_LIST "${LIBOMPTARGET_LIT_ARGS}")
 
-find_package(CUDAToolkit QUIET)
+find_package(CUDAToolkit QUIET ${OFFLOAD_MINIMUM_CUDA_VERSION})
 if(CUDAToolkit_FOUND)
   get_filename_component(CUDA_ROOT "${CUDAToolkit_BIN_DIR}" DIRECTORY ABSOLUTE)
   get_filename_component(CUDA_LIBDIR "${CUDA_cudart_static_LIBRARY}" DIRECTORY)
diff --git a/offload/unittests/CMakeLists.txt b/offload/unittests/CMakeLists.txt
index 33b22b56b1955..eaaa0025bb92f 100644
--- a/offload/unittests/CMakeLists.txt
+++ b/offload/unittests/CMakeLists.txt
@@ -26,7 +26,7 @@ function(add_offload_test_device_code test_filename test_name)
 
   # Try to build with support for NVPTX devices.
   if("cuda" IN_LIST LIBOMPTARGET_PLUGINS_TO_BUILD)
-    find_package(CUDAToolkit QUIET)
+    find_package(CUDAToolkit QUIET ${OFFLOAD_MINIMUM_CUDA_VERSION})
     if(CUDAToolkit_FOUND)
       get_filename_component(cuda_path "${CUDAToolkit_BIN_DIR}" DIRECTORY ABSOLUTE)
     endif()
diff --git a/openmp/docs/Building.md b/openmp/docs/Building.md
index 460d4f03915f1..699ae60720274 100644
--- a/openmp/docs/Building.md
+++ b/openmp/docs/Building.md
@@ -20,11 +20,12 @@ for those requirements.
 ### Requirements for Building with Nvidia GPU support
 
 The CUDA SDK is required on the machine that will build and execute the
-offloading application. Normally this is only required at runtime by dynamically
-opening the CUDA driver API. This can be disabled in the build by omitting
-`cuda` from the [`LIBOMPTARGET_DLOPEN_PLUGINS`](LIBOMPTARGET_DLOPEN_PLUGINS)
-list which is present by default. With this setting we will instead find the
-CUDA library at LLVM build time and link against it directly.
+offloading application. The CUDA driver must support CUDA 11.8.0 or later.
+Normally this is only required at runtime when the CUDA driver API is
+dynamically opened. This can be disabled in the build by omitting `cuda` from
+the [`LIBOMPTARGET_DLOPEN_PLUGINS`](LIBOMPTARGET_DLOPEN_PLUGINS) list which is
+present by default. With this setting we will instead find the CUDA library at
+LLVM build time and link against it directly.
 
 
 ### Requirements for Building with AMD GPU support

>From 29f01fac300a93021f61358b7715498268586fab Mon Sep 17 00:00:00 2001
From: Kevin Sala <salapenades1 at llnl.gov>
Date: Wed, 15 Apr 2026 16:42:12 -0700
Subject: [PATCH 2/2] Forward minimum version from cmake

---
 offload/CMakeLists.txt                      | 3 ++-
 offload/plugins-nextgen/cuda/CMakeLists.txt | 5 ++++-
 offload/plugins-nextgen/cuda/src/rtl.cpp    | 7 ++++++-
 offload/test/CMakeLists.txt                 | 2 +-
 offload/unittests/CMakeLists.txt            | 2 +-
 5 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/offload/CMakeLists.txt b/offload/CMakeLists.txt
index 9e8925b8610b4..472fee8e64156 100644
--- a/offload/CMakeLists.txt
+++ b/offload/CMakeLists.txt
@@ -5,7 +5,8 @@ cmake_minimum_required(VERSION 3.20.0)
 set(LLVM_SUBPROJECT_TITLE "liboffload")
 
 # The minimum versions required for dependencies.
-set(OFFLOAD_MINIMUM_CUDA_VERSION 11.8.0)
+set(OFFLOAD_MIN_CUDA_VERSION 11.8.0)
+set(OFFLOAD_MIN_CUDA_VERSION_CODE 11080)
 
 # Check that the library can actually be built.
 if(APPLE OR WIN32 OR WASM)
diff --git a/offload/plugins-nextgen/cuda/CMakeLists.txt b/offload/plugins-nextgen/cuda/CMakeLists.txt
index 687842db006e9..b96e25e3dc517 100644
--- a/offload/plugins-nextgen/cuda/CMakeLists.txt
+++ b/offload/plugins-nextgen/cuda/CMakeLists.txt
@@ -3,7 +3,10 @@ add_target_library(omptarget.rtl.cuda CUDA)
 
 target_sources(omptarget.rtl.cuda PRIVATE src/rtl.cpp)
 
-find_package(CUDAToolkit QUIET ${OFFLOAD_MINIMUM_CUDA_VERSION})
+# Define the minimum CUDA version required by offload.
+target_compile_definitions(omptarget.rtl.cuda PRIVATE OFFLOAD_MIN_CUDA_VERSION=${OFFLOAD_MIN_CUDA_VERSION_CODE})
+
+find_package(CUDAToolkit QUIET ${OFFLOAD_MIN_CUDA_VERSION})
 
 if(CUDAToolkit_FOUND AND NOT "cuda" IN_LIST LIBOMPTARGET_DLOPEN_PLUGINS)
   message(STATUS "Building CUDA plugin linked against libcuda")
diff --git a/offload/plugins-nextgen/cuda/src/rtl.cpp b/offload/plugins-nextgen/cuda/src/rtl.cpp
index 2e2b1be809e5c..8c0acc7a5d787 100644
--- a/offload/plugins-nextgen/cuda/src/rtl.cpp
+++ b/offload/plugins-nextgen/cuda/src/rtl.cpp
@@ -34,6 +34,11 @@
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Program.h"
 
+// This macro should be defined by the build system.
+#ifndef OFFLOAD_MIN_CUDA_VERSION
+#error "Missing OFFLOAD_MIN_CUDA_VERSION macro"
+#endif
+
 using namespace llvm::offload::debug;
 using namespace error;
 
@@ -1601,7 +1606,7 @@ struct CUDAPluginTy final : public GenericPluginTy {
       return std::move(Err);
 
     // Verify that the driver supports the minimum CUDA version required.
-    constexpr int MinVersion = 11080;
+    constexpr int MinVersion = OFFLOAD_MIN_CUDA_VERSION;
     if (Version < MinVersion) {
       ODBG(OLDT_Init) << "Minimum CUDA version not supported by the driver.";
       return Plugin::error(
diff --git a/offload/test/CMakeLists.txt b/offload/test/CMakeLists.txt
index bda84de698741..e8c12a7be6417 100644
--- a/offload/test/CMakeLists.txt
+++ b/offload/test/CMakeLists.txt
@@ -16,7 +16,7 @@ endif()
 # char into the lit command.
 string(REPLACE " " ";" LIBOMPTARGET_LIT_ARG_LIST "${LIBOMPTARGET_LIT_ARGS}")
 
-find_package(CUDAToolkit QUIET ${OFFLOAD_MINIMUM_CUDA_VERSION})
+find_package(CUDAToolkit QUIET ${OFFLOAD_MIN_CUDA_VERSION})
 if(CUDAToolkit_FOUND)
   get_filename_component(CUDA_ROOT "${CUDAToolkit_BIN_DIR}" DIRECTORY ABSOLUTE)
   get_filename_component(CUDA_LIBDIR "${CUDA_cudart_static_LIBRARY}" DIRECTORY)
diff --git a/offload/unittests/CMakeLists.txt b/offload/unittests/CMakeLists.txt
index eaaa0025bb92f..d6cf3a5deb337 100644
--- a/offload/unittests/CMakeLists.txt
+++ b/offload/unittests/CMakeLists.txt
@@ -26,7 +26,7 @@ function(add_offload_test_device_code test_filename test_name)
 
   # Try to build with support for NVPTX devices.
   if("cuda" IN_LIST LIBOMPTARGET_PLUGINS_TO_BUILD)
-    find_package(CUDAToolkit QUIET ${OFFLOAD_MINIMUM_CUDA_VERSION})
+    find_package(CUDAToolkit QUIET ${OFFLOAD_MIN_CUDA_VERSION})
     if(CUDAToolkit_FOUND)
       get_filename_component(cuda_path "${CUDAToolkit_BIN_DIR}" DIRECTORY ABSOLUTE)
     endif()



More information about the Openmp-commits mailing list