From b63bcda72229122ff91ec00608e2bf38e77f35f0 Mon Sep 17 00:00:00 2001 From: Tyler Yankee Date: Thu, 17 Sep 2026 17:10:45 -0400 Subject: [PATCH 1/2] CUDA, HIP: Revert false support for LINKER_LAUNCHER The implementation in commits 77312cc6 (CUDA: Add support for [CMAKE_]CUDA_LINKER_LAUNCHER, 2025-05-30, v4.1.0-rc1~80^2~1) and cdf2a36f (HIP: Add support for [CMAKE_]HIP_LINKER_LAUNCHER, 2025-05-30, v4.1.0-rc1~80^2) is broken, and the tests are wrongly configured so as to never actually run. Revert the entire feature to avoid future confusion, including documented support. Enable the test for Fortran, which was added but untested by commit d176a8c5ce (Fortran: Add support for [CMAKE_]Fortran_LINKER_LAUNCHER, 2025-05-26, v4.1.0-rc1~96^2), and whose implementation works. Issue: #26967 --- Help/prop_tgt/LANG_LINKER_LAUNCHER.rst | 12 -------- Help/release/4.1.rst | 2 +- Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst | 8 ----- Modules/CMakeCUDAInformation.cmake | 5 ---- Modules/CMakeHIPInformation.cmake | 5 ---- Source/cmTarget.cxx | 2 -- Tests/RunCMake/CMakeLists.txt | 30 +++++++++++-------- .../LinkerLauncher/CUDA-Build-stdout.txt | 1 - .../RunCMake/LinkerLauncher/CUDA-common.cmake | 4 --- .../LinkerLauncher/CUDA-env-Build-stdout.txt | 1 - Tests/RunCMake/LinkerLauncher/CUDA-env.cmake | 1 - .../CUDA-launch-Build-stdout.txt | 1 - .../CUDA-launch-env-Build-stdout.txt | 1 - .../LinkerLauncher/CUDA-launch-env.cmake | 3 -- .../RunCMake/LinkerLauncher/CUDA-launch.cmake | 3 -- Tests/RunCMake/LinkerLauncher/CUDA.cmake | 2 -- .../RunCMake/LinkerLauncher/HIP-common.cmake | 5 ---- .../LinkerLauncher/HIP-env-Build-stdout.txt | 1 - Tests/RunCMake/LinkerLauncher/HIP-env.cmake | 1 - .../HIP-launch-Build-stdout.txt | 1 - .../HIP-launch-env-Build-stdout.txt | 1 - .../LinkerLauncher/HIP-launch-env.cmake | 3 -- .../RunCMake/LinkerLauncher/HIP-launch.cmake | 3 -- Tests/RunCMake/LinkerLauncher/HIP.cmake | 2 -- .../LinkerLauncher/RunCMakeTest.cmake | 6 ---- Tests/RunCMake/LinkerLauncher/main.cu | 4 --- Tests/RunCMake/LinkerLauncher/main.hip | 4 --- 27 files changed, 18 insertions(+), 94 deletions(-) delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-common.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-env-Build-stdout.txt delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-env.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch-env-Build-stdout.txt delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch-env.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/CUDA.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP-common.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP-env.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/HIP.cmake delete mode 100644 Tests/RunCMake/LinkerLauncher/main.cu delete mode 100644 Tests/RunCMake/LinkerLauncher/main.hip diff --git a/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst b/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst index 875cf740bc..1669504d97 100644 --- a/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst +++ b/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst @@ -6,25 +6,13 @@ This property is implemented only when ```` is one of: * ``C`` - * ``CXX`` - -* ``CUDA`` - - .. versionadded:: 4.1 - * ``OBJC`` - * ``OBJCXX`` - * ``Fortran`` .. versionadded:: 4.1 -* ``HIP`` - - .. versionadded:: 4.1 - Specify a :ref:`semicolon-separated list ` containing a command line for a linker launching tool. The :ref:`Makefile Generators` and the :generator:`Ninja` generator will run this tool and pass the linker and its diff --git a/Help/release/4.1.rst b/Help/release/4.1.rst index 7b69e0a9e5..811ae21e3d 100644 --- a/Help/release/4.1.rst +++ b/Help/release/4.1.rst @@ -21,7 +21,7 @@ Generators ---------- * :ref:`Makefile Generators` and :ref:`Ninja Generators` gained support - for adding a linker launcher with ``Fortran``, ``CUDA``, and ``HIP``. + for adding a linker launcher with ``Fortran``. 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 d51951ac4e..a9997f0e3f 100644 --- a/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst +++ b/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst @@ -11,10 +11,6 @@ This is done only when ```` is one of: * ``CXX`` -* ``CUDA`` - - .. versionadded:: 4.1 - * ``OBJC`` * ``OBJCXX`` @@ -23,9 +19,5 @@ This is done only when ```` is one of: .. versionadded:: 4.1 -* ``HIP`` - - .. versionadded:: 4.1 - This variable is initialized to the :envvar:`CMAKE__LINKER_LAUNCHER` environment variable if it is set. diff --git a/Modules/CMakeCUDAInformation.cmake b/Modules/CMakeCUDAInformation.cmake index 70a0e714c1..bc47aa1320 100644 --- a/Modules/CMakeCUDAInformation.cmake +++ b/Modules/CMakeCUDAInformation.cmake @@ -75,11 +75,6 @@ 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/Modules/CMakeHIPInformation.cmake b/Modules/CMakeHIPInformation.cmake index e8d02323e5..a141b4cefd 100644 --- a/Modules/CMakeHIPInformation.cmake +++ b/Modules/CMakeHIPInformation.cmake @@ -55,11 +55,6 @@ if(NOT CMAKE_HIP_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_HIP_COMPILER_LAUNCHER}) CACHE STRING "Compiler launcher for HIP.") endif() -if(NOT CMAKE_HIP_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_HIP_LINKER_LAUNCHER}) - set(CMAKE_HIP_LINKER_LAUNCHER "$ENV{CMAKE_HIP_LINKER_LAUNCHER}" - CACHE STRING "Linker launcher for HIP.") -endif() - include(CMakeCommonLanguageInclude) _cmake_common_language_platform_flags(HIP) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index a1f69cd9ba..8eeecad5e5 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -458,11 +458,9 @@ 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 - { "HIP_LINKER_LAUNCHER"_s, IC::CanCompileSources }, { "HIP_RUNTIME_LIBRARY"_s, IC::CanCompileSources }, // ---- Objective C { "OBJC_LINKER_LAUNCHER"_s, IC::CanCompileSources }, diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index e6f01484e6..bf1f31c617 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1298,29 +1298,33 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja|FASTBuild") -DPSEUDO_CPPCHECK=$ ) + add_RunCMake_test(ctest_labels_for_subprojects) + add_RunCMake_test(CompilerArgs) + + # Enable supported languages for {Compiler,Linker}Launcher. + if(DEFINED CMake_TEST_OBJC) + list(APPEND LauncherCommon_ARGS -DCMake_TEST_OBJC=${CMake_TEST_OBJC}) + endif() + if(CMAKE_Fortran_COMPILER) + list(APPEND LauncherCommon_ARGS -DCMake_TEST_Fortran=1) + endif() + set(CompilerLauncher_ARGS ${LauncherCommon_ARGS}) + set(LinkerLauncher_ARGS ${LauncherCommon_ARGS}) + if(DEFINED CMake_TEST_ISPC) + list(APPEND CompilerLauncher_ARGS -DCMake_TEST_ISPC=${CMake_TEST_ISPC}) + endif() if(DEFINED CMake_TEST_CUDA) list(APPEND CompilerLauncher_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA}) endif() if(DEFINED CMake_TEST_HIP) list(APPEND CompilerLauncher_ARGS -DCMake_TEST_HIP=${CMake_TEST_HIP}) endif() - if(DEFINED CMake_TEST_ISPC) - list(APPEND CompilerLauncher_ARGS -DCMake_TEST_ISPC=${CMake_TEST_ISPC}) - endif() - if(DEFINED CMake_TEST_OBJC) - list(APPEND CompilerLauncher_ARGS -DCMake_TEST_OBJC=${CMake_TEST_OBJC}) - list(APPEND LinkerLauncher_ARGS -DCMake_TEST_OBJC=${CMake_TEST_OBJC}) - endif() - if(CMAKE_Fortran_COMPILER) - list(APPEND CompilerLauncher_ARGS -DCMake_TEST_Fortran=1) - endif() add_RunCMake_test(CompilerLauncher) set_property(TEST RunCMake.CompilerLauncher APPEND PROPERTY LABELS "CUDA" "HIP" "ISPC" "Fortran") - - add_RunCMake_test(ctest_labels_for_subprojects) - add_RunCMake_test(CompilerArgs) add_RunCMake_test(LinkerLauncher) + set_property(TEST RunCMake.LinkerLauncher APPEND + PROPERTY LABELS "Fortran") endif() set(cpack_tests diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt deleted file mode 100644 index 3313e31f63..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-Build-stdout.txt +++ /dev/null @@ -1 +0,0 @@ -.*-E env USED_LAUNCHER=1.* diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-common.cmake b/Tests/RunCMake/LinkerLauncher/CUDA-common.cmake deleted file mode 100644 index ca25b2a262..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-common.cmake +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index a6e8b0aba6..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-env-Build-stdout.txt +++ /dev/null @@ -1 +0,0 @@ -.*-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 deleted file mode 100644 index cefbe9ede8..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-env.cmake +++ /dev/null @@ -1 +0,0 @@ -include(CUDA-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt deleted file mode 100644 index 3313e31f63..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-launch-Build-stdout.txt +++ /dev/null @@ -1 +0,0 @@ -.*-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 deleted file mode 100644 index a6e8b0aba6..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-launch-env-Build-stdout.txt +++ /dev/null @@ -1 +0,0 @@ -.*-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 deleted file mode 100644 index d0d777aeb2..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-launch-env.cmake +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 6b4b816e92..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake +++ /dev/null @@ -1,3 +0,0 @@ -set(CTEST_USE_LAUNCHERS 1) -include(CTestUseLaunchers) -include(CUDA.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/CUDA.cmake b/Tests/RunCMake/LinkerLauncher/CUDA.cmake deleted file mode 100644 index 3ce1ef381c..0000000000 --- a/Tests/RunCMake/LinkerLauncher/CUDA.cmake +++ /dev/null @@ -1,2 +0,0 @@ -set(CMAKE_CUDA_LINKER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1") -include(CUDA-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/HIP-common.cmake b/Tests/RunCMake/LinkerLauncher/HIP-common.cmake deleted file mode 100644 index 53ece7814e..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP-common.cmake +++ /dev/null @@ -1,5 +0,0 @@ -enable_language(HIP) -enable_language(CXX) -set(CMAKE_VERBOSE_MAKEFILE TRUE) - -add_executable(main main.hip) diff --git a/Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt deleted file mode 100644 index 354e317028..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt +++ /dev/null @@ -1 +0,0 @@ -.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=HIP.* diff --git a/Tests/RunCMake/LinkerLauncher/HIP-env.cmake b/Tests/RunCMake/LinkerLauncher/HIP-env.cmake deleted file mode 100644 index 1bf56cee95..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP-env.cmake +++ /dev/null @@ -1 +0,0 @@ -include(HIP-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt deleted file mode 100644 index 3313e31f63..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt +++ /dev/null @@ -1 +0,0 @@ -.*-E env USED_LAUNCHER=1.* diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt deleted file mode 100644 index 354e317028..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt +++ /dev/null @@ -1 +0,0 @@ -.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=HIP.* diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake b/Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake deleted file mode 100644 index 37985a52a3..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake +++ /dev/null @@ -1,3 +0,0 @@ -set(CTEST_USE_LAUNCHERS 1) -include(CTestUseLaunchers) -include(HIP-env.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch.cmake b/Tests/RunCMake/LinkerLauncher/HIP-launch.cmake deleted file mode 100644 index 78fd16ba0f..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP-launch.cmake +++ /dev/null @@ -1,3 +0,0 @@ -set(CTEST_USE_LAUNCHERS 1) -include(CTestUseLaunchers) -include(HIP.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/HIP.cmake b/Tests/RunCMake/LinkerLauncher/HIP.cmake deleted file mode 100644 index 32a750b497..0000000000 --- a/Tests/RunCMake/LinkerLauncher/HIP.cmake +++ /dev/null @@ -1,2 +0,0 @@ -set(CMAKE_HIP_LINKER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1") -include(HIP-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake b/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake index b63a1a7abe..67f32e8e84 100644 --- a/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake +++ b/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake @@ -27,15 +27,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() -if(CMake_TEST_HIP) - list(APPEND langs HIP) -endif() if(CMake_TEST_OBJC) list(APPEND langs OBJC OBJCXX) endif() diff --git a/Tests/RunCMake/LinkerLauncher/main.cu b/Tests/RunCMake/LinkerLauncher/main.cu deleted file mode 100644 index f8b643afbf..0000000000 --- a/Tests/RunCMake/LinkerLauncher/main.cu +++ /dev/null @@ -1,4 +0,0 @@ -int main() -{ - return 0; -} diff --git a/Tests/RunCMake/LinkerLauncher/main.hip b/Tests/RunCMake/LinkerLauncher/main.hip deleted file mode 100644 index f8b643afbf..0000000000 --- a/Tests/RunCMake/LinkerLauncher/main.hip +++ /dev/null @@ -1,4 +0,0 @@ -int main() -{ - return 0; -} From 584a9297c0d78117233eefa2c090d9156af18b2f Mon Sep 17 00:00:00 2001 From: Tyler Yankee Date: Thu, 17 Sep 2026 17:27:15 -0400 Subject: [PATCH 2/2] CUDA, HIP: Restore support for LINKER_LAUNCHER Reapply the implementation in commits commits 77312cc6 (CUDA: Add support for [CMAKE_]CUDA_LINKER_LAUNCHER, 2025-05-30, v4.1.0-rc1~80^2~1) and cdf2a36f (HIP: Add support for [CMAKE_]HIP_LINKER_LAUNCHER, 2025-05-30, v4.1.0-rc1~80^2). Add a special case to expand the correct rule placeholder for these languages, which is spelled `CMAKE__HOST_LINK_LAUNCHER`. Enable the tests for these languages correctly. Re-document support under CMake 4.5. Fixes: #26967 --- Help/prop_tgt/LANG_LINKER_LAUNCHER.rst | 12 ++++++++++++ Help/release/dev/cuda-hip-linker-launcher.rst | 7 +++++++ Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst | 8 ++++++++ Modules/CMakeCUDAInformation.cmake | 5 +++++ Modules/CMakeHIPInformation.cmake | 5 +++++ Source/cmRulePlaceholderExpander.cxx | 13 +++++++++++++ Source/cmTarget.cxx | 2 ++ Tests/RunCMake/CMakeLists.txt | 14 +++++++------- .../RunCMake/LinkerLauncher/CUDA-Build-stdout.txt | 1 + Tests/RunCMake/LinkerLauncher/CUDA-common.cmake | 4 ++++ .../LinkerLauncher/CUDA-env-Build-stdout.txt | 1 + Tests/RunCMake/LinkerLauncher/CUDA-env.cmake | 1 + .../LinkerLauncher/CUDA-launch-Build-stdout.txt | 1 + .../CUDA-launch-env-Build-stdout.txt | 1 + .../RunCMake/LinkerLauncher/CUDA-launch-env.cmake | 3 +++ Tests/RunCMake/LinkerLauncher/CUDA-launch.cmake | 3 +++ Tests/RunCMake/LinkerLauncher/CUDA.cmake | 2 ++ Tests/RunCMake/LinkerLauncher/HIP-common.cmake | 5 +++++ .../LinkerLauncher/HIP-env-Build-stdout.txt | 1 + Tests/RunCMake/LinkerLauncher/HIP-env.cmake | 1 + .../LinkerLauncher/HIP-launch-Build-stdout.txt | 1 + .../LinkerLauncher/HIP-launch-env-Build-stdout.txt | 1 + Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake | 3 +++ Tests/RunCMake/LinkerLauncher/HIP-launch.cmake | 3 +++ Tests/RunCMake/LinkerLauncher/HIP.cmake | 2 ++ Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake | 6 ++++++ Tests/RunCMake/LinkerLauncher/main.cu | 4 ++++ Tests/RunCMake/LinkerLauncher/main.hip | 4 ++++ 28 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 Help/release/dev/cuda-hip-linker-launcher.rst 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/HIP-common.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt create mode 100644 Tests/RunCMake/LinkerLauncher/HIP-env.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt create mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt create mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/HIP-launch.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/HIP.cmake create mode 100644 Tests/RunCMake/LinkerLauncher/main.cu create mode 100644 Tests/RunCMake/LinkerLauncher/main.hip diff --git a/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst b/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst index 1669504d97..86f5f871fd 100644 --- a/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst +++ b/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst @@ -6,13 +6,25 @@ This property is implemented only when ```` is one of: * ``C`` + * ``CXX`` + +* ``CUDA`` + + .. versionadded:: 4.5 + * ``OBJC`` + * ``OBJCXX`` + * ``Fortran`` .. versionadded:: 4.1 +* ``HIP`` + + .. versionadded:: 4.5 + Specify a :ref:`semicolon-separated list ` containing a command line for a linker launching tool. The :ref:`Makefile Generators` and the :generator:`Ninja` generator will run this tool and pass the linker and its diff --git a/Help/release/dev/cuda-hip-linker-launcher.rst b/Help/release/dev/cuda-hip-linker-launcher.rst new file mode 100644 index 0000000000..f6b7012de7 --- /dev/null +++ b/Help/release/dev/cuda-hip-linker-launcher.rst @@ -0,0 +1,7 @@ +cuda-hip-linker-launcher +------------------------ + +* :ref:`Makefile Generators` and :ref:`Ninja Generators` gained support + for adding a linker launcher with ``CUDA`` and ``HIP``. + 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 a9997f0e3f..f2db00b69a 100644 --- a/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst +++ b/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst @@ -11,6 +11,10 @@ This is done only when ```` is one of: * ``CXX`` +* ``CUDA`` + + .. versionadded:: 4.5 + * ``OBJC`` * ``OBJCXX`` @@ -19,5 +23,9 @@ This is done only when ```` is one of: .. versionadded:: 4.1 +* ``HIP`` + + .. versionadded:: 4.5 + This variable is initialized to the :envvar:`CMAKE__LINKER_LAUNCHER` environment variable if it is set. diff --git a/Modules/CMakeCUDAInformation.cmake b/Modules/CMakeCUDAInformation.cmake index bc47aa1320..70a0e714c1 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/Modules/CMakeHIPInformation.cmake b/Modules/CMakeHIPInformation.cmake index a141b4cefd..e8d02323e5 100644 --- a/Modules/CMakeHIPInformation.cmake +++ b/Modules/CMakeHIPInformation.cmake @@ -55,6 +55,11 @@ if(NOT CMAKE_HIP_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_HIP_COMPILER_LAUNCHER}) CACHE STRING "Compiler launcher for HIP.") endif() +if(NOT CMAKE_HIP_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_HIP_LINKER_LAUNCHER}) + set(CMAKE_HIP_LINKER_LAUNCHER "$ENV{CMAKE_HIP_LINKER_LAUNCHER}" + CACHE STRING "Linker launcher for HIP.") +endif() + include(CMakeCommonLanguageInclude) _cmake_common_language_platform_flags(HIP) diff --git a/Source/cmRulePlaceholderExpander.cxx b/Source/cmRulePlaceholderExpander.cxx index 1c7000144b..0386a4d1bf 100644 --- a/Source/cmRulePlaceholderExpander.cxx +++ b/Source/cmRulePlaceholderExpander.cxx @@ -54,6 +54,19 @@ std::string cmRulePlaceholderExpander::ExpandVariable( return result; } } + if (this->ReplaceValues->Language && this->ReplaceValues->Launcher && + variable == + cmStrCat("CMAKE_", this->ReplaceValues->Language, + "_HOST_LINK_LAUNCHER")) { + auto mapIt = this->VariableMappings.find(variable); + std::string result = mapIt != this->VariableMappings.end() + ? this->ConvertToOutputForExisting(mapIt->second) + : variable; + // Add launcher as part of expansion so that it always appears + // immediately before the command itself, regardless of whether the + // overall rule template contains other content at the front. + return cmStrCat(this->ReplaceValues->Launcher, ' ', result); + } if (this->ReplaceValues->Manifests) { if (variable == "MANIFESTS") { return this->ReplaceValues->Manifests; diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 2bffa36c59..623bc41942 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -464,9 +464,11 @@ 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 + { "HIP_LINKER_LAUNCHER"_s, IC::CanCompileSources }, { "HIP_RUNTIME_LIBRARY"_s, IC::CanCompileSources }, // ---- Objective C { "OBJC_LINKER_LAUNCHER"_s, IC::CanCompileSources }, diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 97cf742856..c4ebb115a0 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1340,6 +1340,12 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja|FASTBuild") add_RunCMake_test(CompilerArgs) # Enable supported languages for {Compiler,Linker}Launcher. + if(DEFINED CMake_TEST_CUDA) + list(APPEND LauncherCommon_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA}) + endif() + if(DEFINED CMake_TEST_HIP) + list(APPEND LauncherCommon_ARGS -DCMake_TEST_HIP=${CMake_TEST_HIP}) + endif() if(DEFINED CMake_TEST_OBJC) list(APPEND LauncherCommon_ARGS -DCMake_TEST_OBJC=${CMake_TEST_OBJC}) endif() @@ -1351,18 +1357,12 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja|FASTBuild") if(DEFINED CMake_TEST_ISPC) list(APPEND CompilerLauncher_ARGS -DCMake_TEST_ISPC=${CMake_TEST_ISPC}) endif() - if(DEFINED CMake_TEST_CUDA) - list(APPEND CompilerLauncher_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA}) - endif() - if(DEFINED CMake_TEST_HIP) - list(APPEND CompilerLauncher_ARGS -DCMake_TEST_HIP=${CMake_TEST_HIP}) - endif() add_RunCMake_test(CompilerLauncher) set_property(TEST RunCMake.CompilerLauncher APPEND PROPERTY LABELS "CUDA" "HIP" "ISPC" "Fortran") add_RunCMake_test(LinkerLauncher) set_property(TEST RunCMake.LinkerLauncher APPEND - PROPERTY LABELS "Fortran") + PROPERTY LABEL "CUDA" "HIP" "Fortran") endif() set(cpack_tests 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/HIP-common.cmake b/Tests/RunCMake/LinkerLauncher/HIP-common.cmake new file mode 100644 index 0000000000..53ece7814e --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP-common.cmake @@ -0,0 +1,5 @@ +enable_language(HIP) +enable_language(CXX) +set(CMAKE_VERBOSE_MAKEFILE TRUE) + +add_executable(main main.hip) diff --git a/Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt new file mode 100644 index 0000000000..354e317028 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt @@ -0,0 +1 @@ +.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=HIP.* diff --git a/Tests/RunCMake/LinkerLauncher/HIP-env.cmake b/Tests/RunCMake/LinkerLauncher/HIP-env.cmake new file mode 100644 index 0000000000..1bf56cee95 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP-env.cmake @@ -0,0 +1 @@ +include(HIP-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt new file mode 100644 index 0000000000..3313e31f63 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt @@ -0,0 +1 @@ +.*-E env USED_LAUNCHER=1.* diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt b/Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt new file mode 100644 index 0000000000..354e317028 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt @@ -0,0 +1 @@ +.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=HIP.* diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake b/Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake new file mode 100644 index 0000000000..37985a52a3 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake @@ -0,0 +1,3 @@ +set(CTEST_USE_LAUNCHERS 1) +include(CTestUseLaunchers) +include(HIP-env.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/HIP-launch.cmake b/Tests/RunCMake/LinkerLauncher/HIP-launch.cmake new file mode 100644 index 0000000000..78fd16ba0f --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP-launch.cmake @@ -0,0 +1,3 @@ +set(CTEST_USE_LAUNCHERS 1) +include(CTestUseLaunchers) +include(HIP.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/HIP.cmake b/Tests/RunCMake/LinkerLauncher/HIP.cmake new file mode 100644 index 0000000000..32a750b497 --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/HIP.cmake @@ -0,0 +1,2 @@ +set(CMAKE_HIP_LINKER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1") +include(HIP-common.cmake) diff --git a/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake b/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake index 67f32e8e84..b63a1a7abe 100644 --- a/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake +++ b/Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake @@ -27,9 +27,15 @@ 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() +if(CMake_TEST_HIP) + list(APPEND langs HIP) +endif() if(CMake_TEST_OBJC) list(APPEND langs OBJC OBJCXX) 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; +} diff --git a/Tests/RunCMake/LinkerLauncher/main.hip b/Tests/RunCMake/LinkerLauncher/main.hip new file mode 100644 index 0000000000..f8b643afbf --- /dev/null +++ b/Tests/RunCMake/LinkerLauncher/main.hip @@ -0,0 +1,4 @@ +int main() +{ + return 0; +}