diff options
Diffstat (limited to 'cmake/compiler_warnings.cmake')
-rw-r--r-- | cmake/compiler_warnings.cmake | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/cmake/compiler_warnings.cmake b/cmake/compiler_warnings.cmake new file mode 100644 index 00000000..9e6e67ef --- /dev/null +++ b/cmake/compiler_warnings.cmake @@ -0,0 +1,80 @@ +#===------------------------------------------------------------------------===# +# +# The KLEE Symbolic Virtual Machine +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +#===------------------------------------------------------------------------===# + +############################################################################### +# Compiler warnings +# +# NOTE: All these variables should be lists of flags and NOT a single string. +############################################################################### +# FIXME: -Wunused-parameter fires a lot so for now suppress it. +set(GCC_AND_CLANG_WARNINGS_CXX + "-Wall" + "-Wextra" + "-Wno-unused-parameter") +set(GCC_AND_CLANG_WARNINGS_C + "-Wall" + "-Wextra" + "-Wno-unused-parameter") +set(GCC_ONLY_WARNINGS_C "") +set(GCC_ONLY_WARNINGS_CXX "") +set(CLANG_ONLY_WARNINGS_C "") +set(CLANG_ONLY_WARNINGS_CXX "") + +############################################################################### +# Check which warning flags are supported and use them globally +############################################################################### +set(CXX_WARNING_FLAGS_TO_CHECK "") +set(C_WARNING_FLAGS_TO_CHECK "") + +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + list(APPEND CXX_WARNING_FLAGS_TO_CHECK ${GCC_AND_CLANG_WARNINGS_CXX}) + list(APPEND CXX_WARNING_FLAGS_TO_CHECK ${GCC_ONLY_WARNINGS_CXX}) +elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + list(APPEND CXX_WARNING_FLAGS_TO_CHECK ${GCC_AND_CLANG_WARNINGS_CXX}) + list(APPEND CXX_WARNING_FLAGS_TO_CHECK ${CLANG_ONLY_WARNINGS_CXX}) +else() + message(AUTHOR_WARNING "Unknown compiler") +endif() + +if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU") + list(APPEND C_WARNING_FLAGS_TO_CHECK ${GCC_AND_CLANG_WARNINGS_C}) + list(APPEND C_WARNING_FLAGS_TO_CHECK ${GCC_ONLY_WARNINGS_C}) +elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") + list(APPEND C_WARNING_FLAGS_TO_CHECK ${GCC_AND_CLANG_WARNINGS_C}) + list(APPEND C_WARNING_FLAGS_TO_CHECK ${CLANG_ONLY_WARNINGS_C}) +else() + message(AUTHOR_WARNING "Unknown compiler") +endif() + +# Loop through flags and use the ones which the compiler supports +foreach (flag ${CXX_WARNING_FLAGS_TO_CHECK}) + # Note `add_global_cxx_flag()` is used rather than + # `klee_component_add_cxx_flag()` because warning + # flags are typically useful for building everything. + add_global_cxx_flag("${flag}") +endforeach() +foreach (flag ${C_WARNING_FLAGS_TO_CHECK}) + add_global_c_flag("${flag}") +endforeach() + +############################################################################### +# Warnings as errors +############################################################################### +option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF) +if (WARNINGS_AS_ERRORS) + if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")) + add_global_cxx_flag("-Werror" REQUIRED) + add_global_c_flag("-Werror" REQUIRED) + else() + message(AUTHOR_WARNING "Unknown compiler") + endif() + message(STATUS "Treating compiler warnings as errors") +else() + message(STATUS "Not treating compiler warnings as errors") +endif() |