Browse Source

HIP: Add support for [CMAKE_]HIP_LINKER_LAUNCHER

`CMAKE_<LANG>_LINKER_LAUNCHER` and `<LANG>_LINKER_LAUNCHER` are
already support for C, CXX, CUDA, OBJC, OBJCXX, and Fortran.  Add HIP.

Closes: #26967
Maximilian Sander 6 months ago
parent
commit
cdf2a36f48

+ 4 - 0
Help/prop_tgt/LANG_LINKER_LAUNCHER.rst

@@ -21,6 +21,10 @@ This property is implemented only when ``<LANG>`` is one of:
 
   .. versionadded:: 4.1
 
+* ``HIP``
+
+  .. versionadded:: 4.1
+
 Specify a :ref:`semicolon-separated list <CMake Language Lists>` 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

+ 1 - 1
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`` and ``CUDA``.
+  for adding a linker launcher with ``Fortran``, ``CUDA``, and ``HIP``.
   See the :variable:`CMAKE_<LANG>_LINKER_LAUNCHER` variable
   and :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property for details.

+ 4 - 0
Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst

@@ -23,5 +23,9 @@ This is done only when ``<LANG>`` is one of:
 
   .. versionadded:: 4.1
 
+* ``HIP``
+
+  .. versionadded:: 4.1
+
 This variable is initialized to the :envvar:`CMAKE_<LANG>_LINKER_LAUNCHER`
 environment variable if it is set.

+ 5 - 0
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)
 

+ 1 - 0
Source/cmTarget.cxx

@@ -453,6 +453,7 @@ TargetProperty const StaticTargetProperties[] = {
   { "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 },

+ 5 - 0
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)

+ 1 - 0
Tests/RunCMake/LinkerLauncher/HIP-env-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=HIP.*

+ 1 - 0
Tests/RunCMake/LinkerLauncher/HIP-env.cmake

@@ -0,0 +1 @@
+include(HIP-common.cmake)

+ 1 - 0
Tests/RunCMake/LinkerLauncher/HIP-launch-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1.*

+ 1 - 0
Tests/RunCMake/LinkerLauncher/HIP-launch-env-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1 TARGET_NAME=main LANGUAGE=HIP.*

+ 3 - 0
Tests/RunCMake/LinkerLauncher/HIP-launch-env.cmake

@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(HIP-env.cmake)

+ 3 - 0
Tests/RunCMake/LinkerLauncher/HIP-launch.cmake

@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(HIP.cmake)

+ 2 - 0
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)

+ 3 - 0
Tests/RunCMake/LinkerLauncher/RunCMakeTest.cmake

@@ -30,6 +30,9 @@ 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()

+ 4 - 0
Tests/RunCMake/LinkerLauncher/main.hip

@@ -0,0 +1,4 @@
+int main()
+{
+  return 0;
+}