diff options
-rwxr-xr-x | cmake/mingw-w64.cmake | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/cmake/mingw-w64.cmake b/cmake/mingw-w64.cmake index 9adfa907..7d3db429 100755 --- a/cmake/mingw-w64.cmake +++ b/cmake/mingw-w64.cmake @@ -44,10 +44,42 @@ set(_LDFLAGS " -Wl,--as-needed ${_CXXFLAGS} ") set(_LDFLAGS_RELEASE " ${_CXXFLAGS_RELEASE} ") set(_LDFLAGS_DEBUG " ${_CXXFLAGS_DEBUG} ") +set(WARNINGS_ENABLE TRUE CACHE BOOL "Emit additional warnings at compile-time") +# these are very noisy, high false positive rate. only for development. +set(WARNINGS_FINAL_SUGGESTIONS FALSE CACHE BOOL "Emit very noisy warnings at compile-time") +set(WARNINGS_PEDANTIC FALSE CACHE BOOL "Emit very noisy warnings at compile-time") +set(WARNINGS_NUMERIC FALSE CACHE BOOL "Emit very noisy warnings at compile-time") + +set(noisy-warns "") +set(suggest-final "") +set(pedantics "") +set(numerics "") +if(CMAKE_PROJECT_NAME STREQUAL "opentrack" AND WARNINGS_ENABLE) + if(WARNINGS_FINAL_SUGGESTIONS) + set(suggest-final "-Wsuggest-final-types -Wsuggest-final-methods") + endif() + if(WARNINGS_PEDANTIC) + set(pedantics "-Wuseless-cast -Wsuggest-override") + endif() + if(WARNINGS_NUMERIC) + set(numerics "-Wdouble-promotion") + endif() + set(noisy-warns "${suggest-final} ${pedantics} ${numerics}") +endif() + +# -Wodr and -Wattributes are disabled due to LTO false positives in dependencies. +set(clang-warns "") +if(CMAKE_COMPILER_IS_CLANG) + set(clang-warns "-Wweak-vtables") +endif() +set(_CXX_WARNS "") +if(WARNINGS_ENABLE) + set(_CXX_WARNS "-Wall -Wextra -pedantic -Wdelete-non-virtual-dtor -Wsign-compare -Wno-odr -Wno-attributes -Wcast-align -Wc++14-compat ${clang-warns} ${noisy-warns}") +endif() + foreach(j C CXX) foreach(i "" _DEBUG _RELEASE) - set(OVERRIDE_${j}_FLAGS${i} "" CACHE STRING "") - set(CMAKE_${j}_FLAGS${i} " ${_${j}FLAGS${i}} ${OVERRIDE_${j}_FLAGS${i}} " CACHE STRING "" FORCE) + set(CMAKE_${j}_FLAGS${i} " ${_${j}FLAGS${i}} ${_${j}_WARNS} ${OVERRIDE_${j}_FLAGS${i}} " CACHE STRING "" FORCE) endforeach() endforeach() |