Просмотр исходного кода

Merge topic 'linker-launcher'

d176a8c5ce Fortran: Add support for [CMAKE_]Fortran_LINKER_LAUNCHER

Acked-by: Kitware Robot <[email protected]>
Merge-request: !10831
Brad King 7 месяцев назад
Родитель
Сommit
bc9785a12b

+ 9 - 2
Help/prop_tgt/LANG_LINKER_LAUNCHER.rst

@@ -3,8 +3,15 @@
 
 
 .. versionadded:: 3.21
 .. 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
 Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a
 command line for a linker launching tool. The :ref:`Makefile Generators` and the
 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
 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.
 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`
 This variable is initialized to the :envvar:`CMAKE_<LANG>_LINKER_LAUNCHER`
 environment variable if it is set.
 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.")
     CACHE STRING "Compiler launcher for Fortran.")
 endif()
 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)
 include(CMakeCommonLanguageInclude)
 _cmake_common_language_platform_flags(Fortran)
 _cmake_common_language_platform_flags(Fortran)
 
 

+ 2 - 0
Source/cmTarget.cxx

@@ -457,6 +457,8 @@ TargetProperty const StaticTargetProperties[] = {
   { "OBJC_LINKER_LAUNCHER"_s, IC::CanCompileSources },
   { "OBJC_LINKER_LAUNCHER"_s, IC::CanCompileSources },
   // ---- Objective C++
   // ---- Objective C++
   { "OBJCXX_LINKER_LAUNCHER"_s, IC::CanCompileSources },
   { "OBJCXX_LINKER_LAUNCHER"_s, IC::CanCompileSources },
+  // ---- Fortran
+  { "Fortran_LINKER_LAUNCHER"_s, IC::CanCompileSources },
 
 
   // Static analysis
   // Static analysis
   // -- C
   // -- 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()
 endfunction()
 
 
 set(langs C CXX)
 set(langs C CXX)
+if(CMake_TEST_Fortran)
+  list(APPEND langs Fortran)
+endif()
 if(CMake_TEST_OBJC)
 if(CMake_TEST_OBJC)
   list(APPEND langs OBJC OBJCXX)
   list(APPEND langs OBJC OBJCXX)
 endif()
 endif()

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

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