1include(CMakePushCheckState) 2 3include(CheckCompilerFlag OPTIONAL) 4 5if(NOT COMMAND check_compiler_flag) 6 include(CheckCCompilerFlag) 7 include(CheckCXXCompilerFlag) 8endif() 9 10function(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. 18 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 26 if("${lang}" STREQUAL "C") 27 check_c_compiler_flag("" ${out_var}) 28 elseif("${lang}" STREQUAL "CXX") 29 check_cxx_compiler_flag("" ${out_var}) 30 else() 31 message(FATAL_ERROR "\"${lang}\" is not C or CXX") 32 endif() 33 endif() 34 cmake_pop_check_state() 35endfunction() 36