58 lines
2.1 KiB
CMake
58 lines
2.1 KiB
CMake
# - Check whether the C linker supports a given flag.
|
|
# CHECK_C_LINKER_FLAG(FLAG VARIABLE)
|
|
#
|
|
# FLAG - the compiler flag
|
|
# VARIABLE - variable to store the result
|
|
#
|
|
# This actually calls the check_c_source_compiles macro.
|
|
# See help for CheckCSourceCompiles for a listing of variables
|
|
# that can modify the build.
|
|
|
|
# Copyright (c) 2010, Joerg Mayer (see AUTHORS file)
|
|
#
|
|
# Redistribution and use is allowed according to the terms of the BSD license.
|
|
|
|
INCLUDE(CheckCSourceRuns)
|
|
|
|
MACRO (CHECK_C_LINKER_FLAG _FLAG _RESULT)
|
|
#
|
|
# This is ugly.
|
|
#
|
|
# See CMake bug 0015934:
|
|
#
|
|
# https://cmake.org/Bug/view.php?id=15934
|
|
#
|
|
# So we add the flags to CMAKE_REQUIRED_LIBRARIES, to sneak it into
|
|
# the linker flags.
|
|
#
|
|
# This may or may not work with versions earlier than 2.8.11, although
|
|
# 2.8.10's Xcode generator doesn't appear to work at all - it fails
|
|
# with an internal CMake error.
|
|
#
|
|
# With 3.2 and later, we could also set policy CMP0056 to NEW and
|
|
# set CMAKE_EXE_LINKER_FLAGS.
|
|
#
|
|
set(save_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
|
|
if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
|
#
|
|
# This means the linker is presumably the Microsoft linker;
|
|
# we need to pass /WX in order to have the linker fail,
|
|
# rather than just complaining and driving on, if it's
|
|
# passed a flag it doesn't handle.
|
|
#
|
|
set(CMAKE_REQUIRED_LIBRARIES "/WX")
|
|
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
#
|
|
# We'll be running the linker through the compiler driver, so
|
|
# we may need to pass -Werror=unused-command-line-argument to have it
|
|
# fail, rather than just complaining and driving on, if it's
|
|
# passed a flag it doesn't handle.
|
|
set(CMAKE_REQUIRED_LIBRARIES "-Werror=unused-command-line-argument")
|
|
endif()
|
|
set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES} ${_FLAG}")
|
|
message(status "check linker flag - test linker flags: ${_FLAG}")
|
|
check_c_source_compiles("int main() { return 0;}" ${_RESULT})
|
|
set(CMAKE_REQUIRED_LIBRARIES "${save_CMAKE_REQUIRED_LIBRARIES}")
|
|
ENDMACRO (CHECK_C_LINKER_FLAG)
|
|
|