From 77312cc63673b3946d3369acf99dc45f896167ae Mon Sep 17 00:00:00 2001 From: Maximilian Sander Date: Fri, 30 May 2025 14:38:24 +0200 Subject: [PATCH] CUDA: Add support for [CMAKE_]CUDA_LINKER_LAUNCHER `CMAKE__LINKER_LAUNCHER` and `_LINKER_LAUNCHER` are already support for C, CXX, OBJC, OBJCXX, and Fortran. Add CUDA. Issue: #26967 --- Help/prop_tgt/LANG_LINKER_LAUNCHER.rst | 8 ++++++++ Help/release/dev/linker-launcher.rst | 2 +- Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst | 8 ++++++++ Modules/CMakeCUDAInformation.cmake | 5 +++++ Source/cmTarget.cxx | 1 + Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt | 1 + Tests/RunCMake/LinkerLauncher/CUDA-common.cmake | 4 ++++ Tests/RunCMake/LinkerLauncher/CUDA-env-Build-stdout.txt | 1 + Tests/RunCMake/LinkerLauncher/CUDA-env.cmake | 1 + .../RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt | 1 + .../LinkerLauncher/CUDA-launch-env-Build-stdout.txt | 1 + Tests/RunCMake/LinkerLauncher/CUDA-launch-env.cmake | 3 +++ Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake | 3 +++ Tests/RunCMake/LinkerLauncher/CUDA.cmake | 2 ++ Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake | 3 +++ Tests/RunCMake/LinkerLauncher/main.cu | 4 ++++ 16 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-common.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-env-Build-stdout.txt create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-env.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch-env-Build-stdout.txt create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch-env.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/CUDA.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/main.cu diff --git a/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst b/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst index 1669504d97..df3a4f47f1 100644 --- a/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst +++ b/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst @@ -6,9 +6,17 @@ This property is implemented only when ```` is one of: * ``C`` + * ``CXX`` + +* ``CUDA`` + + .. versionadded:: 4.1 + * ``OBJC`` + * ``OBJCXX`` + * ``Fortran`` .. versionadded:: 4.1 diff --git a/Help/release/dev/linker-launcher.rst b/Help/release/dev/linker-launcher.rst index 438bf3d988..29bf5e622f 100644 --- a/Help/release/dev/linker-launcher.rst +++ b/Help/release/dev/linker-launcher.rst @@ -2,6 +2,6 @@ linker-launcher --------------- * :ref:`Makefile Generators` and :ref:`Ninja Generators` gained support - for adding a linker launcher with ``Fortran``. + for adding a linker launcher with ``Fortran`` and ``CUDA``. See the :variable:`CMAKE__LINKER_LAUNCHER` variable and :prop_tgt:`_LINKER_LAUNCHER` target property for details. diff --git a/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst b/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst index c28627976d..77338f4ad1 100644 --- a/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst +++ b/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst @@ -8,9 +8,17 @@ variable is used to initialize the property on each target as it is created. This is done only when ```` is one of: * ``C`` + * ``CXX`` + +* ``CUDA`` + + .. versionadded:: 4.1 + * ``OBJC`` + * ``OBJCXX`` + * ``Fortran`` .. versionadded:: 4.1 diff --git a/Modules/CMakeCUDAInformation.cmake b/Modules/CMakeCUDAInformation.cmake index 49a4270a83..7ce3112301 100644 --- a/Modules/CMakeCUDAInformation.cmake +++ b/Modules/CMakeCUDAInformation.cmake @@ -75,6 +75,11 @@ if(NOT CMAKE_CUDA_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_CUDA_COMPILER_LAUNCHER CACHE STRING "Compiler launcher for CUDA.") endif() +if(NOT CMAKE_CUDA_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_CUDA_LINKER_LAUNCHER}) + set(CMAKE_CUDA_LINKER_LAUNCHER "$ENV{CMAKE_CUDA_LINKER_LAUNCHER}" + CACHE STRING "Linker launcher for CUDA.") +endif() + include(CMakeCommonLanguageInclude) _cmake_common_language_platform_flags(CUDA) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index e0610fcd5d..5675ca4f53 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -449,6 +449,7 @@ TargetProperty const StaticTargetProperties[] = { // ---- C++ { "CXX_LINKER_LAUNCHER"_s, IC::CanCompileSources }, // ---- CUDA + { "CUDA_LINKER_LAUNCHER"_s, IC::CanCompileSources }, { "CUDA_RESOLVE_DEVICE_SYMBOLS"_s, IC::CanCompileSources }, { "CUDA_RUNTIME_LIBRARY"_s, IC::CanCompileSources }, // ---- HIP diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt new file mode 100644 index 0000000000..3313e31f63 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt @@ -0,0 +1 @@ +.*-E env USED_LAUNCHER=1.* diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-common.cmake b/Tests/RunCMake/LinkerLauncher/CUDA-common.cmake new file mode 100644 index 0000000000..ca25b2a262 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-common.cmake @@ -0,0 +1,4 @@ +cmake_policy(SET CMP0104 NEW) +enable_language(CUDA) +set(CMAKE_VERBOSE_MAKEFILE TRUE) +add_executable(main main.cu) diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-env-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/CUDA-env-Build-stdout.txt new file mode 100644 index 0000000000..a6e8b0aba6 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-env-Build-stdout.txt @@ -0,0 +1 @@ +.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=CUDA.* diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-env.cmake b/Tests/RunCMake/LinkerLauncher/CUDA-env.cmake new file mode 100644 index 0000000000..cefbe9ede8 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-env.cmake @@ -0,0 +1 @@ +include(CUDA-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt new file mode 100644 index 0000000000..3313e31f63 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt @@ -0,0 +1 @@ +.*-E env USED_LAUNCHER=1.* diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-launch-env-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/CUDA-launch-env-Build-stdout.txt new file mode 100644 index 0000000000..a6e8b0aba6 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-launch-env-Build-stdout.txt @@ -0,0 +1 @@ +.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=CUDA.* diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-launch-env.cmake b/Tests/RunCMake/LinkerLauncher/CUDA-launch-env.cmake new file mode 100644 index 0000000000..d0d777aeb2 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-launch-env.cmake @@ -0,0 +1,3 @@ +set(CTEST_USE_LAUNCHERS 1) +include(CTestUseLaunchers) +include(CUDA-env.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake b/Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake new file mode 100644 index 0000000000..6b4b816e92 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake @@ -0,0 +1,3 @@ +set(CTEST_USE_LAUNCHERS 1) +include(CTestUseLaunchers) +include(CUDA.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/CUDA.cmake b/Tests/RunCMake/LinkerLauncher/CUDA.cmake new file mode 100644 index 0000000000..3ce1ef381c --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/CUDA.cmake @@ -0,0 +1,2 @@ +set(CMAKE_CUDA_LINKER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1") +include(CUDA-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake b/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake index 754377ccca..e29427f779 100644 --- a/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake +++ b/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake @@ -24,6 +24,9 @@ function(run_linker_launcher_env lang) endfunction() set(langs C CXX) +if(CMake_TEST_CUDA) + list(APPEND langs CUDA) +endif() if(CMake_TEST_Fortran) list(APPEND langs Fortran) endif() diff --git a/Tests/RunCMake/LinkerLauncher/main.cu b/Tests/RunCMake/LinkerLauncher/main.cu new file mode 100644 index 0000000000..f8b643afbf --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/main.cu @@ -0,0 +1,4 @@ +int main() +{ + return 0; +}