Browse Source

Merge topic 'linker-launcher'

d176a8c5ce Fortran: Add support for [CMAKE_]Fortran_LINKER_LAUNCHER

Acked-by: Kitware Robot <[email protected]>
Merge-request: !10831
Brad King 5 months ago
parent
commit
bc9785a12b

+ 9 - 2
Help/prop_tgt/LANG_LINKER_LAUNCHER.rst

@@ -3,8 +3,15 @@
 
 .. versionadded:: 3.21
 
-This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
-``OBJC``, or ``OBJCXX``
+This property is implemented only when ``<LANG>`` is one of:
+
+* ``C``
+* ``CXX``
+* ``OBJC``
+* ``OBJCXX``
+* ``Fortran``
+
+  .. 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

+ 7 - 0
Help/release/dev/linker-launcher.rst

@@ -0,0 +1,7 @@
+linker-launcher
+---------------
+
+* :ref:`Makefile Generators` and :ref:`Ninja Generators` gained support
+  for adding a linker launcher with ``Fortran``.
+  See the :variable:`CMAKE_<LANG>_LINKER_LAUNCHER` variable
+  and :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property for details.

+ 9 - 1
Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst

@@ -5,7 +5,15 @@ CMAKE_<LANG>_LINKER_LAUNCHER
 
 Default value for :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property. This
 variable is used to initialize the property on each target as it is created.
-This is done only when ``<LANG>`` is ``C``, ``CXX``, ``OBJC``, or ``OBJCXX``.
+This is done only when ``<LANG>`` is one of:
+
+* ``C``
+* ``CXX``
+* ``OBJC``
+* ``OBJCXX``
+* ``Fortran``
+
+  .. versionadded:: 4.1
 
 This variable is initialized to the :envvar:`CMAKE_<LANG>_LINKER_LAUNCHER`
 environment variable if it is set.

+ 5 - 0
Modules/CMakeFortranInformation.cmake

@@ -78,6 +78,11 @@ if(NOT CMAKE_Fortran_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_Fortran_COMPILER_LA
     CACHE STRING "Compiler launcher for Fortran.")
 endif()
 
+if(NOT CMAKE_Fortran_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_Fortran_LINKER_LAUNCHER})
+  set(CMAKE_Fortran_LINKER_LAUNCHER "$ENV{CMAKE_Fortran_LINKER_LAUNCHER}"
+          CACHE STRING "Linker launcher for Fortran.")
+endif()
+
 include(CMakeCommonLanguageInclude)
 _cmake_common_language_platform_flags(Fortran)
 

+ 2 - 0
Source/cmTarget.cxx

@@ -457,6 +457,8 @@ TargetProperty const StaticTargetProperties[] = {
   { "OBJC_LINKER_LAUNCHER"_s, IC::CanCompileSources },
   // ---- Objective C++
   { "OBJCXX_LINKER_LAUNCHER"_s, IC::CanCompileSources },
+  // ---- Fortran
+  { "Fortran_LINKER_LAUNCHER"_s, IC::CanCompileSources },
 
   // Static analysis
   // -- C

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

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

+ 3 - 0
Tests/RunCMake/LinkerLauncher/Fortran-common.cmake

@@ -0,0 +1,3 @@
+enable_language(Fortran)
+set(CMAKE_VERBOSE_MAKEFILE TRUE)
+add_executable(main main.f90)

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

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

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

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

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

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

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

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

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

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

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

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

+ 2 - 0
Tests/RunCMake/LinkerLauncher/Fortran.cmake

@@ -0,0 +1,2 @@
+set(CMAKE_Fortran_LINKER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1")
+include(Fortran-common.cmake)

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

@@ -24,6 +24,9 @@ function(run_linker_launcher_env lang)
 endfunction()
 
 set(langs C CXX)
+if(CMake_TEST_Fortran)
+  list(APPEND langs Fortran)
+endif()
 if(CMake_TEST_OBJC)
   list(APPEND langs OBJC OBJCXX)
 endif()

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

@@ -0,0 +1,4 @@
+program main
+    implicit none
+    ! Do nothing
+end program main