|
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