From 5722f3083cae829c28a28083fa806005ed71168c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 21 Sep 2017 12:41:06 +0200 Subject: CMake: Add compiler warning about implicit fallthough --- cmake/EthCheckCXXCompilerFlag.cmake | 23 +++++++++++++++++++++++ cmake/EthCompilerSettings.cmake | 23 +++++++---------------- 2 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 cmake/EthCheckCXXCompilerFlag.cmake diff --git a/cmake/EthCheckCXXCompilerFlag.cmake b/cmake/EthCheckCXXCompilerFlag.cmake new file mode 100644 index 00000000..c6ed35b4 --- /dev/null +++ b/cmake/EthCheckCXXCompilerFlag.cmake @@ -0,0 +1,23 @@ +include(CheckCXXCompilerFlag) + +# Adds CXX compiler flag if the flag is supported by the compiler. +# +# This is effectively a combination of CMake's check_cxx_compiler_flag() +# and add_compile_options(): +# +# if(check_cxx_compiler_flag(flag)) +# add_compile_options(flag) +# +function(eth_add_cxx_compiler_flag_if_supported FLAG) + # Remove leading - or / from the flag name. + string(REGEX REPLACE "^-|/" "" name ${FLAG}) + check_cxx_compiler_flag(${FLAG} ${name}) + if(${name}) + add_compile_options(${FLAG}) + endif() + + # If the optional argument passed, store the result there. + if(ARGV1) + set(${ARGV1} ${name} PARENT_SCOPE) + endif() +endfunction() diff --git a/cmake/EthCompilerSettings.cmake b/cmake/EthCompilerSettings.cmake index 1a00ae70..6d4dadeb 100644 --- a/cmake/EthCompilerSettings.cmake +++ b/cmake/EthCompilerSettings.cmake @@ -4,7 +4,7 @@ # CMake file for cpp-ethereum project which specifies our compiler settings # for each supported platform and build configuration. # -# See http://www.ethdocs.org/en/latest/ethereum-clients/cpp-ethereum/. +# The documentation for cpp-ethereum is hosted at http://cpp-ethereum.org # # Copyright (c) 2014-2016 cpp-ethereum contributors. #------------------------------------------------------------------------------ @@ -14,18 +14,15 @@ # # These settings then end up spanning all POSIX platforms (Linux, OS X, BSD, etc) -include(CheckCXXCompilerFlag) +include(EthCheckCXXCompilerFlag) -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() +eth_add_cxx_compiler_flag_if_supported(-fstack-protector-strong have_stack_protector_strong_support) +if(NOT have_stack_protector_strong_support) + eth_add_cxx_compiler_flag_if_supported(-fstack-protector) endif() +eth_add_cxx_compiler_flag_if_supported(-Wimplicit-fallthrough) + if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")) # Use ISO C++11 standard language. @@ -83,12 +80,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 () - # 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) - add_compile_options(-Wno-implicit-fallthrough) - endif() - # Additional Clang-specific compiler settings. elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") -- cgit v1.2.3