From 1761edf2f84cf80f40deeb33feaaf9ae7bee01b7 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 11 Oct 2023 14:05:18 +0200 Subject: [PATCH] [cmake] add default compiler flags --- CMakeLists.txt | 13 +---------- cmake/CompilerFlags.cmake | 45 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 cmake/CompilerFlags.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3193510be..a3d02c0bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,7 @@ if(WITH_CLANG_FORMAT) include(ClangFormat) endif() +include(CompilerFlags) include(DetectBSD) include(CheckIncludeFiles) include(CheckLibraryExists) @@ -392,19 +393,7 @@ if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC) endif() if(MSVC) - # Remove previous warning definitions, - # NMake is otherwise complaining. - foreach (flags_var_to_scrub - CMAKE_C_FLAGS - CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_C_FLAGS_MINSIZEREL) - string (REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " " - "${flags_var_to_scrub}" "${${flags_var_to_scrub}}") - endforeach() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3") set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}) diff --git a/cmake/CompilerFlags.cmake b/cmake/CompilerFlags.cmake new file mode 100644 index 000000000..d85853e3b --- /dev/null +++ b/cmake/CompilerFlags.cmake @@ -0,0 +1,45 @@ +include(CheckCCompilerFlag) + +macro (checkCFlag FLAG) + CHECK_C_COMPILER_FLAG("${FLAG}" CFLAG${FLAG}) + if(CFLAG${FLAG}) + string(APPEND CMAKE_C_FLAGS " ${FLAG}") + else() + message(WARNING "compiler does not support ${FLAG}") + endif() +endmacro() + +option(ENABLE_WARNING_VERBOSE "enable -Weveryting (and some exceptions) for compile" ON) +option(ENABLE_WARNING_ERROR "enable -Werror for compile" OFF) + +if (ENABLE_WARNING_VERBOSE) + if (MSVC) + set(C_WARNING_FLAGS + /Wall + ) + else() + set(C_WARNING_FLAGS + -Weverything + -Wall + -Wpedantic + -Wno-padded + -Wno-cast-align + -Wno-declaration-after-statement + -Wno-unsafe-buffer-usage + -Wno-reserved-identifier + -Wno-covered-switch-default + ) + endif() + + foreach(FLAG ${C_WARNING_FLAGS}) + CheckCFlag(${FLAG}) + endforeach() +endif() + + +if (ENABLE_WARNING_ERROR) + CheckCFlag(-Werror) +endif() + +set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "default CFLAGS") +message("Using CFLAGS ${CMAKE_C_FLAGS}")