From 96052ca2fbc58423d47b87630c67bb25ffb54138 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 18 Sep 2024 10:11:45 +0200 Subject: [PATCH] [build,c++] add CXXCompilerFlags to set warnings Just like with the C components and CompilerFlags.cmake add a configuration for C++ that disables specific warnings only found in C++ code. --- client/SDL/CMakeLists.txt | 1 + cmake/CXXCompilerFlags.cmake | 60 +++++++++++++++++++ .../modules/bitmap-filter/CMakeLists.txt | 1 + server/proxy/modules/demo/CMakeLists.txt | 1 + .../modules/dyn-channel-dump/CMakeLists.txt | 1 + 5 files changed, 64 insertions(+) create mode 100644 cmake/CXXCompilerFlags.cmake diff --git a/client/SDL/CMakeLists.txt b/client/SDL/CMakeLists.txt index 2965544b3..45ddd3b3d 100644 --- a/client/SDL/CMakeLists.txt +++ b/client/SDL/CMakeLists.txt @@ -39,6 +39,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/) include(CommonConfigOptions) include(ConfigureFreeRDP) +include(CXXCompilerFlags) option(WITH_DEBUG_SDL_EVENTS "[dangerous, not for release builds!] Debug SDL events" ${DEFAULT_DEBUG_OPTION}) option(WITH_DEBUG_SDL_KBD_EVENTS "[dangerous, not for release builds!] Debug SDL keyboard events" ${DEFAULT_DEBUG_OPTION}) diff --git a/cmake/CXXCompilerFlags.cmake b/cmake/CXXCompilerFlags.cmake new file mode 100644 index 000000000..c20baca2c --- /dev/null +++ b/cmake/CXXCompilerFlags.cmake @@ -0,0 +1,60 @@ +include(CheckCXXCompilerFlag) + +macro (checkCXXFlag FLAG) + check_cxx_compiler_flag("${FLAG}" CXXFLAG${FLAG}) + if(CXXFLAG${FLAG}) + string(APPEND CMAKE_CXX_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) + # Remove previous warning definitions, + # NMake is otherwise complaining. + foreach (flags_var_to_scrub + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_MINSIZEREL) + string (REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " " + "${flags_var_to_scrub}" "${${flags_var_to_scrub}}") + endforeach() + + set(C_WARNING_FLAGS + /W4 + /wo4324 + ) + else() + set(C_WARNING_FLAGS + -Weverything + -Wall + -Wpedantic + -Wno-padded + -Wno-switch-enum + -Wno-cast-align + -Wno-declaration-after-statement + -Wno-unsafe-buffer-usage + -Wno-reserved-identifier + -Wno-covered-switch-default + -Wno-ctad-maybe-unsupported + ) + endif() + + foreach(FLAG ${C_WARNING_FLAGS}) + CheckCXXFlag(${FLAG}) + endforeach() +endif() + + +if (ENABLE_WARNING_ERROR) + CheckCXXFlag(-Werror) +endif() + +set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "default CXXFLAGS") +message("Using CXXFLAGS ${CMAKE_CXX_FLAGS}") diff --git a/server/proxy/modules/bitmap-filter/CMakeLists.txt b/server/proxy/modules/bitmap-filter/CMakeLists.txt index 03c140331..60d6ce85e 100644 --- a/server/proxy/modules/bitmap-filter/CMakeLists.txt +++ b/server/proxy/modules/bitmap-filter/CMakeLists.txt @@ -44,6 +44,7 @@ message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../cmake/) include(CommonConfigOptions) +include(CXXCompilerFlags) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/server/proxy/modules/demo/CMakeLists.txt b/server/proxy/modules/demo/CMakeLists.txt index c16440aee..ab3ec829d 100644 --- a/server/proxy/modules/demo/CMakeLists.txt +++ b/server/proxy/modules/demo/CMakeLists.txt @@ -37,6 +37,7 @@ message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../cmake/) include(CommonConfigOptions) +include(CXXCompilerFlags) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/server/proxy/modules/dyn-channel-dump/CMakeLists.txt b/server/proxy/modules/dyn-channel-dump/CMakeLists.txt index dff349ca1..4e328bcbf 100644 --- a/server/proxy/modules/dyn-channel-dump/CMakeLists.txt +++ b/server/proxy/modules/dyn-channel-dump/CMakeLists.txt @@ -36,6 +36,7 @@ message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../cmake/) include(CommonConfigOptions) +include(CXXCompilerFlags) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)