summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Modules/CheckLinkerFlag.cmake17
-rw-r--r--cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake35
2 files changed, 35 insertions, 17 deletions
diff --git a/cmake/Modules/CheckLinkerFlag.cmake b/cmake/Modules/CheckLinkerFlag.cmake
deleted file mode 100644
index 722fe5b1b8ea..000000000000
--- a/cmake/Modules/CheckLinkerFlag.cmake
+++ /dev/null
@@ -1,17 +0,0 @@
-include(CMakePushCheckState)
-include(CheckCCompilerFlag)
-
-function(llvm_check_linker_flag flag dest)
- # 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.
-
- cmake_push_check_state()
- set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")
- check_c_compiler_flag("" ${dest})
- cmake_pop_check_state()
-endfunction()
diff --git a/cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake b/cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake
new file mode 100644
index 000000000000..f61ec0585f9a
--- /dev/null
+++ b/cmake/Modules/LLVMCheckCompilerLinkerFlag.cmake
@@ -0,0 +1,35 @@
+include(CMakePushCheckState)
+
+include(CheckCompilerFlag OPTIONAL)
+
+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.
+
+ 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
+ # cmake builtin compatible, except we assume lang is C or CXX
+ if("${lang}" STREQUAL "C")
+ check_c_compiler_flag("" ${out_var})
+ elseif("${lang}" STREQUAL "CXX")
+ check_cxx_compiler_flag("" ${out_var})
+ else()
+ message(FATAL_ERROR "\"${lang}\" is not C or CXX")
+ endif()
+ endif()
+ cmake_pop_check_state()
+endfunction()