From aa2e253674daa9789156445b5e24f23488f6940b Mon Sep 17 00:00:00 2001 From: Anthony Bilinski Date: Thu, 10 Mar 2022 17:54:23 -0800 Subject: [PATCH] chore(build): Enable lots of compile-time warnings Taken directly from https://github.com/evilcorpltd/n_e_s/tree/9777aa619db619c1488fc016b0912a0efb2cc303/warnings * Remove Wuseless-cast, because Qt's MOC-generated code hits it. * Remove Wduplicated-branches, Wduplicated-branches, Wformat-truncation because they aren't supported on our oldest CI job. --- CMakeLists.txt | 2 + cmake/warnings/CMakeLists.txt | 75 +++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 cmake/warnings/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 5efa515a9..68e3d39b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -646,6 +646,7 @@ link_libraries(coverage_config) add_subdirectory(util) add_subdirectory(audio) add_subdirectory(translations) +add_subdirectory(cmake/warnings) add_library(${PROJECT_NAME}_static STATIC @@ -659,6 +660,7 @@ target_link_libraries(${PROJECT_NAME}_static target_link_libraries(${PROJECT_NAME}_static util_library) target_link_libraries(${PROJECT_NAME}_static audio_library) target_link_libraries(${PROJECT_NAME}_static translations_library) +target_link_libraries(${PROJECT_NAME}_static qtox::warnings) add_executable(${PROJECT_NAME} WIN32 diff --git a/cmake/warnings/CMakeLists.txt b/cmake/warnings/CMakeLists.txt new file mode 100644 index 000000000..dccf95fda --- /dev/null +++ b/cmake/warnings/CMakeLists.txt @@ -0,0 +1,75 @@ +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() + +target_compile_options(${PROJECT_NAME} INTERFACE + $<$,$>: + -fno-common; + -fstrict-overflow; + -ftrapv; + -pedantic-errors; + -Wall; + -Wcast-align; + -Wdouble-promotion; + -Werror; + -Wextra; + -Wformat=2; + -Wmissing-declarations; + -Wnon-virtual-dtor; + -Wnull-dereference; + -Wold-style-cast; + -Woverloaded-virtual; + -Wshadow; + -Wsign-compare; + -Wundef; + > + $<$: + -Wduplicated-cond; + -Wlogical-op; + > + $<$: + -Wmissing-variable-declarations; + -Wno-gnu-zero-variadic-macro-arguments; # Required for gtest 1.10. + > + $<$,$>: + /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; + > +)