|
1 |
| -include(CheckLinkerFlag OPTIONAL) |
| 1 | +include(CMakePushCheckState) |
2 | 2 |
|
3 |
| -if (COMMAND check_linker_flag) |
4 |
| - macro(llvm_check_compiler_linker_flag) |
5 |
| - check_linker_flag(${ARGN}) |
6 |
| - endmacro() |
7 |
| -else() |
8 |
| - # Until the minimum CMAKE version is 3.18 |
| 3 | +include(CheckCompilerFlag OPTIONAL) |
9 | 4 |
|
| 5 | +if(NOT COMMAND check_compiler_flag) |
| 6 | + include(CheckCCompilerFlag) |
10 | 7 | include(CheckCXXCompilerFlag)
|
| 8 | +endif() |
| 9 | + |
| 10 | +function(llvm_check_compiler_linker_flag lang flag out_var) |
| 11 | + # If testing a flag with check_c_compiler_flag, it gets added to the compile |
| 12 | + # command only, but not to the linker command in that test. If the flag |
| 13 | + # is vital for linking to succeed, the test would fail even if it would |
| 14 | + # have succeeded if it was included on both commands. |
| 15 | + # |
| 16 | + # Therefore, try adding the flag to CMAKE_REQUIRED_FLAGS, which gets |
| 17 | + # added to both compiling and linking commands in the tests. |
11 | 18 |
|
12 |
| - # cmake builtin compatible, except we assume lang is C or CXX |
13 |
| - function(llvm_check_compiler_linker_flag lang flag out_var) |
14 |
| - cmake_policy(PUSH) |
15 |
| - cmake_policy(SET CMP0056 NEW) |
16 |
| - set(_CMAKE_EXE_LINKER_FLAGS_SAVE ${CMAKE_EXE_LINKER_FLAGS}) |
17 |
| - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}") |
| 19 | + cmake_push_check_state() |
| 20 | + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}") |
| 21 | + if(COMMAND check_compiler_flag) |
| 22 | + check_compiler_flag("${lang}" "" ${out_var}) |
| 23 | + else() |
| 24 | + # Until the minimum CMAKE version is 3.19 |
| 25 | + # cmake builtin compatible, except we assume lang is C or CXX |
18 | 26 | if("${lang}" STREQUAL "C")
|
19 | 27 | check_c_compiler_flag("" ${out_var})
|
20 | 28 | elseif("${lang}" STREQUAL "CXX")
|
21 | 29 | check_cxx_compiler_flag("" ${out_var})
|
22 | 30 | else()
|
23 | 31 | message(FATAL_ERROR "\"${lang}\" is not C or CXX")
|
24 | 32 | endif()
|
25 |
| - set(CMAKE_EXE_LINKER_FLAGS ${_CMAKE_EXE_LINKER_FLAGS_SAVE}) |
26 |
| - cmake_policy(POP) |
27 |
| - endfunction() |
28 |
| -endif() |
| 33 | + endif() |
| 34 | + cmake_pop_check_state() |
| 35 | +endfunction() |
0 commit comments