diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f1477c8e..fcfdd9938 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,7 @@ caffe_option(USE_SYSTEMTAP "Build for SystemTap" OFF) caffe_option(PERFORMANCE_MONITORING "Build Caffe with PERFORMANCE_MONITORING " OFF) #caffe_option(USE_GITHUB_MKLDNN "Download and use MKL-DNN available on github" OFF) caffe_option(CODE_COVERAGE "Build with code coverage instrumentation" OFF) +caffe_option(WARNING_AS_ERROR "Build with warnings treated as errors" ON) caffe_option(CO_SIM "Build readonly cpu blob data/diff pycaffe interface" OFF) caffe_option(USE_MLSL "Build Caffe with Intel(r) Machine Learning Scaling Library for multinode training" ON) caffe_option(ICC_STATIC_BUILD "Build Intel Caffe static link with Intel compiler" OFF) @@ -87,18 +88,18 @@ if(MSVC) endif() elseif(UNIX OR APPLE) # Linker flags. - if( ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") + if( ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") # GCC specific flags. ICC is compatible with them. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -z noexecstack -z relro -z now") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack -z relro -z now") - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") # In Clang, -z flags are not compatible, they need to be passed to linker via -Wl. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now") endif() - + # Compiler flags. - if( ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + if( ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") # GCC specific flags. if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.9) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -fstack-protector-strong") @@ -107,11 +108,11 @@ elseif(UNIX OR APPLE) else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -fstack-protector") endif() - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") # Clang is compatbile with some of the flags. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -fstack-protector") - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel" ) - # Same as above, with exception that ICC compilation crashes with -fPIE option, even + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel" ) + # Same as above, with exception that ICC compilation crashes with -fPIE option, even # though it uses -pie linker option that require -fPIE during compilation. Checksec # shows that it generates correct PIE anyway if only -pie is provided. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector -wd2196") @@ -122,12 +123,17 @@ elseif(UNIX OR APPLE) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-intel") endif() endif() - + # Generic flags. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -fno-operator-names -Wformat -Wformat-security -Wall") if(NOT CODE_COVERAGE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Werror") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif() + + if(WARNING_AS_ERROR) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") + endif() + # Dot not forward c++11 flag to GPU beucause it is not supported set( CUDA_PROPAGATE_HOST_FLAGS OFF ) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_FORTIFY_SOURCE=2")