aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-08-24 19:50:43 +0800
committerGitHub <noreply@github.com>2017-08-24 19:50:43 +0800
commit220259dc75a2c677d502e3d0295952315f60a2e6 (patch)
treeb3f6214add18622ee5d604be693e923f9e9828fc
parent9488661a4a116dbc1171f317dc582a205c734780 (diff)
parentd223b1361b5c8b614a5464ce5227b04d8e778e74 (diff)
downloaddexon-solidity-220259dc75a2c677d502e3d0295952315f60a2e6.tar.gz
dexon-solidity-220259dc75a2c677d502e3d0295952315f60a2e6.tar.zst
dexon-solidity-220259dc75a2c677d502e3d0295952315f60a2e6.zip
Merge pull request #2781 from ethereum/compiler-flags
WIP: CMake: Better handle -fstack-protector flag support
-rw-r--r--cmake/EthCompilerSettings.cmake45
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.
#