1include(CheckLinkerFlag OPTIONAL)
2
3if (COMMAND check_linker_flag)
4  macro(llvm_check_linker_flag)
5    check_linker_flag(${ARGN})
6  endmacro()
7else()
8  # Until the minimum CMAKE version is 3.18
9
10  include(CheckCXXCompilerFlag)
11
12  # cmake builtin compatible, except we assume lang is C or CXX
13  function(llvm_check_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}")
18    if("${lang}" STREQUAL "C")
19      check_c_compiler_flag("" ${out_var})
20    elseif("${lang}" STREQUAL "CXX")
21      check_cxx_compiler_flag("" ${out_var})
22    else()
23      message(FATAL_ERROR "\"${lang}\" is not C or CXX")
24    endif()
25    set(CMAKE_EXE_LINKER_FLAGS ${_CMAKE_EXE_LINKER_FLAGS_SAVE})
26    cmake_policy(POP)
27  endfunction()
28endif()
29