From 41a92ea7401c89c5696b3e1b2fa239458a92ff73 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 13 May 2016 12:51:40 +0200 Subject: cmake: add cache variables for predefined warning types The numeric warnings are somewhat useful. Sadly only clang supports the vtable object file bloat warning. --- cmake/mingw-w64.cmake | 36 ++++++++++++++++++++++++++++++++++-- 1 file 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() -- cgit v1.2.3