2022-03-11 09:54:23 +08:00
|
|
|
project(qtox_warnings)
|
|
|
|
|
|
|
|
add_library(${PROJECT_NAME} INTERFACE)
|
|
|
|
add_library(qtox::warnings ALIAS ${PROJECT_NAME})
|
|
|
|
|
|
|
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
|
|
if("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC")
|
|
|
|
set(CLANGCL ON)
|
|
|
|
else()
|
|
|
|
set(CLANG ON)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2022-03-11 10:08:50 +08:00
|
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
CHECK_CXX_COMPILER_FLAG(-Wweak-vtables COMPILER_SUPPORTS_WARNING_WEAK_VTABLES)
|
|
|
|
CHECK_CXX_COMPILER_FLAG(-Wdate-time COMPILER_SUPPORTS_WDATE_TIME)
|
|
|
|
|
2022-03-11 09:54:23 +08:00
|
|
|
target_compile_options(${PROJECT_NAME} INTERFACE
|
|
|
|
$<$<OR:$<BOOL:${CLANG}>,$<CXX_COMPILER_ID:GNU>>:
|
|
|
|
-fno-common;
|
|
|
|
-fstrict-overflow;
|
|
|
|
-ftrapv;
|
|
|
|
-pedantic-errors;
|
|
|
|
-Wall;
|
|
|
|
-Wcast-align;
|
|
|
|
-Wdouble-promotion;
|
|
|
|
-Wextra;
|
|
|
|
-Wformat=2;
|
|
|
|
-Wmissing-declarations;
|
|
|
|
-Wnon-virtual-dtor;
|
|
|
|
-Wnull-dereference;
|
|
|
|
-Wold-style-cast;
|
|
|
|
-Woverloaded-virtual;
|
|
|
|
-Wshadow;
|
|
|
|
-Wsign-compare;
|
|
|
|
-Wundef;
|
|
|
|
>
|
|
|
|
$<$<CXX_COMPILER_ID:GNU>:
|
|
|
|
-Wduplicated-cond;
|
|
|
|
-Wlogical-op;
|
|
|
|
>
|
|
|
|
$<$<BOOL:${CLANG}>:
|
|
|
|
-Wmissing-variable-declarations;
|
|
|
|
-Wno-gnu-zero-variadic-macro-arguments; # Required for gtest 1.10.
|
|
|
|
>
|
|
|
|
$<$<OR:$<BOOL:${CLANGCL}>,$<CXX_COMPILER_ID:MSVC>>:
|
|
|
|
/permissive-;
|
|
|
|
/W4;
|
|
|
|
/w14254; # 'operator': conversion from 'type1:field_bits' to
|
|
|
|
# 'type2:field_bits', possible loss of data
|
|
|
|
/w14263; # 'function': member function does not override any base class
|
|
|
|
# virtual member function
|
|
|
|
/w14265; # 'classname': class has virtual functions, but destructor is not
|
|
|
|
# virtual instances of this class may not be destructed correctly
|
|
|
|
/w14287; # 'operator': unsigned/negative constant mismatch
|
|
|
|
/w14289; # nonstandard extension used: 'variable': loop control variable
|
|
|
|
# declared in the for-loop is used outside the for-loop scope
|
|
|
|
/w14296; # 'operator': expression is always 'boolean_value'
|
|
|
|
/w14311; # 'variable': pointer truncation from 'type1' to 'type2'
|
|
|
|
/w14545; # expression before comma evaluates to a function which is missing
|
|
|
|
# an argument list
|
|
|
|
/w14546; # function call before comma missing argument list
|
|
|
|
/w14547; # 'operator': operator before comma has no effect; expected
|
|
|
|
# operator with side-effect
|
|
|
|
/w14549; # 'operator': operator before comma has no effect; did you intend
|
|
|
|
# 'operator'?
|
|
|
|
/w14555; # expression has no effect; expected expression with side- effect
|
|
|
|
/w14619; # pragma warning: there is no warning number 'number'
|
|
|
|
/w14640; # Enable warning on thread un-safe static member initialization
|
|
|
|
/w14826; # Conversion from 'type1' to 'type_2' is sign-extended. This may
|
|
|
|
# cause unexpected runtime behavior.
|
|
|
|
/w14928; # illegal copy-initialization; more than one user-defined
|
|
|
|
# conversion has been implicitly applied
|
|
|
|
/wd4244; # 'argument': conversion from 'int' to 'unsigned char', possible
|
|
|
|
# loss of data # This one is sort of required for gtest.
|
|
|
|
/WX;
|
|
|
|
>
|
2022-03-11 10:08:50 +08:00
|
|
|
$<$<BOOL:${STRICT_OPTIONS}>:
|
|
|
|
-Werror;
|
|
|
|
>
|
|
|
|
$<$<BOOL:${COMPILER_SUPPORTS_WARNING_WEAK_VTABLES}>:
|
|
|
|
-Wweak-vtables; # https://llvm.org/docs/CodingStandards.html#provide-a-virtual-method-anchor-for-classes-in-headers
|
|
|
|
>
|
|
|
|
$<$<BOOL:${COMPILER_SUPPORTS_WDATE_TIME}>:
|
|
|
|
-Wdate-time; # avoid timestamps in binary for reproducible builds, not added until GCC 4.9
|
|
|
|
>
|
|
|
|
$<$<AND:$<NOT:$<BOOL:${WIN32}>>,$<NOT:$<BOOL:${HAIKU}>>>:
|
|
|
|
-Wstack-protector;
|
|
|
|
>
|
2022-03-11 09:54:23 +08:00
|
|
|
)
|