diff options
author | Paweł Bylica <chfast@gmail.com> | 2017-08-23 20:01:51 +0800 |
---|---|---|
committer | Paweł Bylica <chfast@gmail.com> | 2017-08-24 18:26:37 +0800 |
commit | d223b1361b5c8b614a5464ce5227b04d8e778e74 (patch) | |
tree | 8d4a98cbed880f12e16cd9b46429ea68c7b5e949 /cmake/EthCompilerSettings.cmake | |
parent | 8af6f193bcf279381df3cca51b179b48e9cf5d5d (diff) | |
download | dexon-solidity-d223b1361b5c8b614a5464ce5227b04d8e778e74.tar.gz dexon-solidity-d223b1361b5c8b614a5464ce5227b04d8e778e74.tar.zst dexon-solidity-d223b1361b5c8b614a5464ce5227b04d8e778e74.zip |
CMake: Better handle -fstack-protector flag support
Diffstat (limited to 'cmake/EthCompilerSettings.cmake')
-rw-r--r-- | cmake/EthCompilerSettings.cmake | 45 |
1 files changed, 12 insertions, 33 deletions
diff --git a/cmake/EthCompilerSettings.cmake b/cmake/EthCompilerSettings.cmake index 9b294e27..117dd319 100644 --- a/cmake/EthCompilerSettings.cmake +++ b/cmake/EthCompilerSettings.cmake @@ -22,6 +22,18 @@ if(CCACHE_FOUND) message("Using ccache") endif(CCACHE_FOUND) +include(CheckCXXCompilerFlag) + +check_cxx_compiler_flag(-fstack-protector-strong have_stack_protector_strong) +if (have_stack_protector_strong) + add_compile_options(-fstack-protector-strong) +else() + check_cxx_compiler_flag(-fstack-protector have_stack_protector) + if(have_stack_protector) + add_compile_options(-fstack-protector) + endif() +endif() + if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")) # Use ISO C++11 standard language. @@ -79,14 +91,6 @@ if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MA message(FATAL_ERROR "${PROJECT_NAME} requires g++ 4.7 or greater.") endif () - # Strong stack protection was only added in GCC 4.9. - # Use it if we have the option to do so. - # See https://lwn.net/Articles/584225/ - if (GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9) - add_compile_options(-fstack-protector-strong) - add_compile_options(-fstack-protector) - endif() - # Until https://github.com/ethereum/solidity/issues/2479 is handled # disable all implicit fallthrough warnings in the codebase for GCC > 7.0 if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0) @@ -96,31 +100,6 @@ if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MA # Additional Clang-specific compiler settings. elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - add_compile_options(-fstack-protector) - - # Enable strong stack protection only on Mac and only for OS X Yosemite - # or newer (AppleClang 7.0+). We should be able to re-enable this setting - # on non-Apple Clang as well, if we can work out what expression to use for - # the version detection. - - # The fact that the version-reporting for AppleClang loses the original - # Clang versioning is rather annoying. Ideally we could just have - # a single cross-platform "if version >= 3.4.1" check. - # - # There is debug text in the else clause below, to help us work out what - # such an expression should be, if we can get this running on a Trusty box - # with Clang. Greg Colvin previously replicated the issue there too. - # - # See https://github.com/ethereum/webthree-umbrella/issues/594 - - if (APPLE) - if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0) - add_compile_options(-fstack-protector-strong) - endif() - else() - message(WARNING "CMAKE_CXX_COMPILER_VERSION = ${CMAKE_CXX_COMPILER_VERSION}") - endif() - # A couple of extra warnings suppressions which we seemingly # need when building with Clang. # |