1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
set(
_clang_gcc_warnings
-Wcast-align
-Wdouble-promotion
-Wextra
-Wextra-semi
-Wnon-virtual-dtor
-Wnull-dereference
-Woverloaded-virtual
-Wpedantic
-Wshadow
-Wunused
# Candidates for enabling in the future:
# -Wold-style-cast
# -Wconversion
# -Wsign-conversion
# -Wformat=2
)
if(WARNINGS_AS_ERRORS)
list(APPEND _clang_gcc_warnings -Werror)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
list(APPEND CCACHE_COMPILER_WARNINGS ${_clang_gcc_warnings})
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
list(
APPEND
CCACHE_COMPILER_WARNINGS
-Qunused-arguments
-Wno-error=unreachable-code
)
endif()
add_compile_flag_if_supported(CCACHE_COMPILER_WARNINGS "-Wextra-semi-stmt")
# If compiler supports -Wshadow-field-in-constructor, disable only that.
# Otherwise disable shadow.
add_compile_flag_if_supported_ex(
CCACHE_COMPILER_WARNINGS "-Wno-shadow-field-in-constructor" "-Wno-shadow")
# Disable C++20 compatibility for now.
add_compile_flag_if_supported(CCACHE_COMPILER_WARNINGS "-Wno-c++2a-compat")
add_compile_flag_if_supported(CCACHE_COMPILER_WARNINGS "-Wno-c99-extensions")
add_compile_flag_if_supported(CCACHE_COMPILER_WARNINGS "-Wno-language-extension-token")
# If compiler supports these warnings they have to be disabled for now.
add_compile_flag_if_supported(
CCACHE_COMPILER_WARNINGS "-Wno-zero-as-null-pointer-constant")
add_compile_flag_if_supported(
CCACHE_COMPILER_WARNINGS "-Wno-undefined-func-template")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
list(
APPEND
CCACHE_COMPILER_WARNINGS
${_clang_gcc_warnings}
# Warn about logical operations being used where bitwise were probably
# wanted.
-Wlogical-op
# Candidates for enabling in the future:
# -Wduplicated-cond
# -Wduplicated-branches
# -Wuseless-cast
)
elseif(MSVC)
# Remove any warning level flags added by CMake.
string(REGEX REPLACE "/W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
string(REGEX REPLACE "/W[0-4]" "" CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS}")
string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
if(WARNINGS_AS_ERRORS)
list(APPEND CCACHE_COMPILER_WARNINGS /WX)
endif()
list(
APPEND
CCACHE_COMPILER_WARNINGS
/W4
# Ignore bad macro in winbase.h triggered by /Zc:preprocessor:
/wd5105
# Conversion warnings:
/wd4244
/wd4245
/wd4267
# Assignment in conditional:
/wd4706
# Non-underscore-prefixed POSIX functions:
/wd4996
# Dead local functions overridden by headers:
/wd4505
)
endif()
|