diff options
author | Brad King <brad.king@kitware.com> | 2023-06-26 13:43:40 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-06-26 13:43:55 (GMT) |
commit | 529b818378843c8c3c6da807a79c1496c1acdb9a (patch) | |
tree | 7cbcf43e4a99d0e7e144a0960861dbe3ad797e59 | |
parent | f58c7659d8652c1172fc15a0bae9d71ee477c1eb (diff) | |
parent | 5945a98ced2e1f4794f26f39256c95d875220408 (diff) | |
download | CMake-529b818378843c8c3c6da807a79c1496c1acdb9a.zip CMake-529b818378843c8c3c6da807a79c1496c1acdb9a.tar.gz CMake-529b818378843c8c3c6da807a79c1496c1acdb9a.tar.bz2 |
Merge topic 'link-depends-is-OFF' into release-3.27
5945a98ced link dependencies: deactivate the feature
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8587
-rw-r--r-- | Help/variable/CMAKE_LINK_DEPENDS_USE_LINKER.rst | 8 | ||||
-rw-r--r-- | Modules/Compiler/GNU.cmake | 13 | ||||
-rw-r--r-- | Tests/RunCMake/BuildDepends/LinkDependsCheck.cmake | 3 | ||||
-rw-r--r-- | Tests/RunCMake/BuildDepends/RunCMakeTest.cmake | 4 |
4 files changed, 22 insertions, 6 deletions
diff --git a/Help/variable/CMAKE_LINK_DEPENDS_USE_LINKER.rst b/Help/variable/CMAKE_LINK_DEPENDS_USE_LINKER.rst index e1b37a5..1867ad8 100644 --- a/Help/variable/CMAKE_LINK_DEPENDS_USE_LINKER.rst +++ b/Help/variable/CMAKE_LINK_DEPENDS_USE_LINKER.rst @@ -10,3 +10,11 @@ variable with value ``FALSE``, you can deactivate this feature. This feature is also deactivated if the :prop_tgt:`LINK_DEPENDS_NO_SHARED` target property is true. + +.. note:: + + CMake version |release| defaults this variable to ``FALSE`` because + GNU binutils linkers (``ld``, ``ld.bfd``, ``ld.gold``) generate spurious + dependencies on temporary files when LTO is enabled. See `GNU bug 30568`_. + +.. _`GNU bug 30568`: https://sourceware.org/bugzilla/show_bug.cgi?id=30568 diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake index 251e05a..d01054b 100644 --- a/Modules/Compiler/GNU.cmake +++ b/Modules/Compiler/GNU.cmake @@ -53,6 +53,9 @@ macro(__compiler_gnu lang) endif() # define flags for linker depfile generation + set(CMAKE_${lang}_LINKER_DEPFILE_FLAGS "LINKER:--dependency-file,<DEP_FILE>") + set(CMAKE_${lang}_LINKER_DEPFILE_FORMAT gcc) + if(NOT DEFINED CMAKE_${lang}_LINKER_DEPFILE_SUPPORTED) ## Ensure ninja tool is recent enough... if(CMAKE_GENERATOR MATCHES "^Ninja") @@ -82,15 +85,19 @@ macro(__compiler_gnu lang) unset(_linker_capabilities) endif() endif() - if (CMAKE_${lang}_LINKER_DEPFILE_SUPPORTED) - set(CMAKE_${lang}_LINKER_DEPFILE_FLAGS "LINKER:--dependency-file,<DEP_FILE>") - set(CMAKE_${lang}_LINKER_DEPFILE_FORMAT gcc) set(CMAKE_${lang}_LINK_DEPENDS_USE_LINKER TRUE) else() unset(CMAKE_${lang}_LINK_DEPENDS_USE_LINKER) endif() + # For now, due to GNU binutils ld bug when LTO is enabled (see GNU bug + # `30568 <https://sourceware.org/bugzilla/show_bug.cgi?id=30568>`_), + # deactivate this feature. + if (NOT DEFINED CMAKE_LINK_DEPENDS_USE_LINKER) + set(CMAKE_LINK_DEPENDS_USE_LINKER FALSE) + endif() + # Initial configuration flags. string(APPEND CMAKE_${lang}_FLAGS_INIT " ") string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g") diff --git a/Tests/RunCMake/BuildDepends/LinkDependsCheck.cmake b/Tests/RunCMake/BuildDepends/LinkDependsCheck.cmake index a21096b..596e1eb 100644 --- a/Tests/RunCMake/BuildDepends/LinkDependsCheck.cmake +++ b/Tests/RunCMake/BuildDepends/LinkDependsCheck.cmake @@ -2,7 +2,8 @@ enable_language(C) file(WRITE "${CMAKE_BINARY_DIR}/LinkDependsUseLinker.cmake" - "set(CMAKE_C_LINK_DEPENDS_USE_LINKER \"${CMAKE_C_LINK_DEPENDS_USE_LINKER}\")\n") + "set(CMAKE_LINK_DEPENDS_USE_LINKER ${CMAKE_LINK_DEPENDS_USE_LINKER}) +set(CMAKE_C_LINK_DEPENDS_USE_LINKER ${CMAKE_C_LINK_DEPENDS_USE_LINKER})\n") file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/check-$<LOWER_CASE:$<CONFIG>>.cmake" diff --git a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake index dfa4f49..fada37a 100644 --- a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake +++ b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake @@ -199,12 +199,12 @@ endif() run_BuildDepends(CustomCommandUnityBuild) unset(run_BuildDepends_skip_step_2) -#if (RunCMake_GENERATOR MATCHES "Make|Ninja" AND CMAKE_C_LINK_DEPENDS_USE_LINKER) if (RunCMake_GENERATOR MATCHES "Make|Ninja") set(run_BuildDepends_skip_step_2 1) run_BuildDepends(LinkDependsCheck) include("${RunCMake_BINARY_DIR}/LinkDependsCheck-build/LinkDependsUseLinker.cmake") - if (CMAKE_C_LINK_DEPENDS_USE_LINKER) + if ((NOT DEFINED CMAKE_LINK_DEPENDS_USE_LINKER OR CMAKE_LINK_DEPENDS_USE_LINKER) + AND CMAKE_C_LINK_DEPENDS_USE_LINKER) run_BuildDepends(LinkDependsExternalLibrary) unset(run_BuildDepends_skip_step_2) run_BuildDepends(LinkDepends) |