[PATCH] D143052: [CMake] Only set the linker flag for link commands

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 1 00:30:07 PST 2023


phosek created this revision.
phosek added a reviewer: mstorsjo.
Herald added a project: All.
phosek requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

llvm_check_compiler_linker_flag used CMAKE_REQUIRED_FLAGS which affects
flags used both for compilation and linking which is problematic because
some flags may be link-only and trigger unused argument warning when set
during compilation.

      

This change revises the implementation to address the issue, and aligns
llvm_check_compiler_linker_flag with check_linker_flag. Once we switch
to CMake 3.19 we could replace the former with the latter.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D143052

Files:
  cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake


Index: cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake
===================================================================
--- cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake
+++ cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake
@@ -1,27 +1,21 @@
-include(CMakePushCheckState)
+include(CheckLinkerFlag OPTIONAL)
 
-include(CheckCompilerFlag OPTIONAL)
+if (COMMAND check_linker_flag)
+  macro(llvm_check_compiler_linker_flag)
+    check_linker_flag(${ARGN})
+  endmacro()
+else()
+  # Until the minimum CMAKE version is 3.19
 
-if(NOT COMMAND check_compiler_flag)
   include(CheckCCompilerFlag)
   include(CheckCXXCompilerFlag)
-endif()
-
-function(llvm_check_compiler_linker_flag lang flag out_var)
-  # If testing a flag with check_c_compiler_flag, it gets added to the compile
-  # command only, but not to the linker command in that test. If the flag
-  # is vital for linking to succeed, the test would fail even if it would
-  # have succeeded if it was included on both commands.
-  #
-  # Therefore, try adding the flag to CMAKE_REQUIRED_FLAGS, which gets
-  # added to both compiling and linking commands in the tests.
+  include(CMakePushCheckState)
 
-  cmake_push_check_state()
-  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")
-  if(COMMAND check_compiler_flag)
-    check_compiler_flag("${lang}" "" ${out_var})
-  else()
-    # Until the minimum CMAKE version is 3.19
+  function(llvm_check_compiler_linker_flag lang flag out_var)
+    cmake_policy(PUSH)
+    cmake_policy(SET CMP0056 NEW)
+    cmake_push_check_state()
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
     # cmake builtin compatible, except we assume lang is C or CXX
     if("${lang}" STREQUAL "C")
       check_c_compiler_flag("" ${out_var})
@@ -30,6 +24,6 @@
     else()
       message(FATAL_ERROR "\"${lang}\" is not C or CXX")
     endif()
-  endif()
-  cmake_pop_check_state()
-endfunction()
+    cmake_pop_check_state()
+  endfunction()
+endif()


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D143052.493854.patch
Type: text/x-patch
Size: 1965 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230201/4fc0323b/attachment.bin>


More information about the llvm-commits mailing list