Changeset View
Changeset View
Standalone View
Standalone View
cmake/modules/AddCompilerFlags.cmake
Show First 20 Lines • Show All 111 Lines • ▼ Show 20 Lines | function(check_linker_flag RESULT FLAG) | ||||
check_compiler_flag(IS_WERROR_SUPPORTED CXX ${WERROR_UNUSED_ARG}) | check_compiler_flag(IS_WERROR_SUPPORTED CXX ${WERROR_UNUSED_ARG}) | ||||
if(${IS_WERROR_SUPPORTED}) | if(${IS_WERROR_SUPPORTED}) | ||||
set(CMAKE_REQUIRED_FLAGS ${WERROR_UNUSED_ARG}) | set(CMAKE_REQUIRED_FLAGS ${WERROR_UNUSED_ARG}) | ||||
endif() | endif() | ||||
# Save the current linker flags | # Save the current linker flags | ||||
set(SAVE_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) | set(SAVE_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) | ||||
# If the flag is already set, avoid duplicating it | # Append the flag under test to the linker flags | ||||
string(FIND "${CMAKE_EXE_LINKER_FLAGS}" "${FLAG}" FLAG_POSITION) | |||||
if(${FLAG_POSITION} LESS 0) | |||||
string(APPEND CMAKE_EXE_LINKER_FLAGS " ${FLAG}") | string(APPEND CMAKE_EXE_LINKER_FLAGS " ${FLAG}") | ||||
endif() | |||||
# CHECK_CXX_COMPILER_FLAG calls CHECK_CXX_SOURCE_COMPILES which in turn | # CHECK_CXX_COMPILER_FLAG calls CHECK_CXX_SOURCE_COMPILES which in turn | ||||
# calls try_compile, so it will check our flag | # calls try_compile, so it will check our flag | ||||
CHECK_CXX_COMPILER_FLAG("" ${RESULT}) | CHECK_CXX_COMPILER_FLAG("" ${RESULT}) | ||||
# Restore CMAKE_EXE_LINKER_FLAGS | # Restore CMAKE_EXE_LINKER_FLAGS | ||||
set(CMAKE_EXE_LINKER_FLAGS ${SAVE_CMAKE_EXE_LINKER_FLAGS}) | set(CMAKE_EXE_LINKER_FLAGS ${SAVE_CMAKE_EXE_LINKER_FLAGS}) | ||||
set(${RESULT} ${${RESULT}} PARENT_SCOPE) | set(${RESULT} ${${RESULT}} PARENT_SCOPE) | ||||
endfunction() | endfunction() | ||||
function(add_linker_flags) | function(add_linker_flags) | ||||
foreach(f ${ARGN}) | foreach(f ${ARGN}) | ||||
sanitize_c_cxx_definition("have_linker_" ${f} FLAG_IS_SUPPORTED) | sanitize_c_cxx_definition("have_linker_" ${f} FLAG_IS_SUPPORTED) | ||||
check_linker_flag(${FLAG_IS_SUPPORTED} ${f}) | check_linker_flag(${FLAG_IS_SUPPORTED} ${f}) | ||||
# If the flag is supported, add it to CMAKE_EXE_LINKER_FLAGS | |||||
if(${FLAG_IS_SUPPORTED}) | if(${FLAG_IS_SUPPORTED}) | ||||
string(APPEND CMAKE_EXE_LINKER_FLAGS " ${f}") | add_link_options(${f}) | ||||
endif() | endif() | ||||
endforeach() | endforeach() | ||||
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} PARENT_SCOPE) | |||||
endfunction() | endfunction() |