Treat compiler warnings as errors

Treat them as errors globally. Most of the time a warning is a bug, or problem in code that could be solved in a different (better) manner. Thirdparty code have this disabled. The warnings as errors option can be globally disabled through the CMake GUI, but this is not recommended.
This commit is contained in:
Kawe Mazidjatari 2023-05-15 09:44:26 +02:00
parent 0138ac025f
commit 9f44bcc818
44 changed files with 116 additions and 55 deletions

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "appframework" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "appframework" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -44,7 +44,7 @@ endmacro()
# -----------------------------------------------------------------------------
# Add modules to the project
# -----------------------------------------------------------------------------
macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME )
macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME WARNINGS_AS_ERRORS )
project( ${MODULE_NAME} )
if( ${MODULE_TYPE} STREQUAL "lib" )
@ -54,7 +54,7 @@ macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME )
target_link_options( ${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Release>:/LTCG>"
)
elseif(${MODULE_TYPE} STREQUAL "exe")
elseif( ${MODULE_TYPE} STREQUAL "exe" )
add_executable( ${PROJECT_NAME} )
target_link_options( ${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Release>:/LTCG>"
@ -68,6 +68,10 @@ macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME )
endif()
set_target_properties( ${MODULE_NAME} PROPERTIES FOLDER ${FOLDER_NAME} )
if( ${GLOBAL_WARNINGS_AS_ERRORS} )
warnings_as_errors( ${PROJECT_NAME} ${WARNINGS_AS_ERRORS} )
endif()
endmacro()
# -----------------------------------------------------------------------------
@ -93,3 +97,42 @@ macro( whole_program_optimization )
$<$<CONFIG:Release>:/GL>
)
endmacro()
# -----------------------------------------------------------------------------
# Toggles wether or not to treat warnings as errors
# -----------------------------------------------------------------------------
macro( warnings_as_errors TARGET FLAG )
if( ${FLAG} )
if( MSVC )
target_compile_options( ${TARGET} PRIVATE /WX )
else()
target_compile_options( ${TARGET} PRIVATE -Werror )
endif()
else()
if( MSVC )
target_compile_options( ${TARGET} PRIVATE "/wd4996" )
else()
target_compile_options( ${TARGET} PRIVATE "-Wno-error" )
endif()
endif()
endmacro()
# -----------------------------------------------------------------------------
# Disables verbose warnings caused within thirdparty code ( !only use on thirdparty projects! )
# -----------------------------------------------------------------------------
macro( thirdparty_suppress_warnings )
if( MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
target_compile_options( ${PROJECT_NAME} PRIVATE
/wd4100 # Unreferenced formal parameter.
/wd4152 # Function/data pointer conversion in expression.
/wd4200 # Zero-sized array in union; SDL2 uses this for compiler compatibility.
/wd4201 # Nameless struct/union.
/wd4244 # Type conversion truncation; protobuf has many, but this appears intentional.
/wd4267 # Type conversion truncation; protobuf has many, but this appears intentional.
/wd4307 # Integral constant overflow.
/wd4389 # Signed/unsigned mismatch.
/wd4505 # Unreferenced local function has been removed.
)
endif()
warnings_as_errors( ${PROJECT_NAME} FALSE )
endmacro()

View File

@ -12,6 +12,16 @@ macro( apply_project_settings )
$<$<CXX_COMPILER_ID:MSVC>:/DUNICODE>
)
# Suppress certain compiler warnings
# ( !don't suppress warnings here that are specific to a project! )
add_compile_options(
$<$<CXX_COMPILER_ID:MSVC>:/wd4996> # 'The POSIX name for this item is deprecated'
$<$<CXX_COMPILER_ID:MSVC>:/wd4127> # 'Consider using 'if constexpr' statement instead'
)
# Some thirdparty code have Warnings as Errors disabled; this option won't override those.
option( GLOBAL_WARNINGS_AS_ERRORS "Treat compiler warnings as errors" ON )
set( GAMEDLL_OPTION "GAMEDLL_S3" CACHE STRING "Game DLL version" )
set_property( CACHE GAMEDLL_OPTION PROPERTY STRINGS
"GAMEDLL_S0"
@ -63,7 +73,7 @@ macro( apply_project_settings )
/DEBUG"
)
# Commonly used directories accross libraries.
# Commonly used directories accross libraries
include_directories(
"${ENGINE_SOURCE_DIR}/"
"${ENGINE_SOURCE_DIR}/public/"

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "codecs" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "codecs" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,6 +1,6 @@
cmake_minimum_required( VERSION 3.16 )
macro( add_sdk_project PROJECT_NAME )
add_module( "shared_lib" ${PROJECT_NAME} "vpc" ${FOLDER_CONTEXT} )
add_module( "shared_lib" ${PROJECT_NAME} "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "datacache" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "datacache" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "EbisuSDK" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "EbisuSDK" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,7 +1,7 @@
cmake_minimum_required( VERSION 3.16 )
macro( add_engine_project PROJECT_NAME )
add_module( "lib" ${PROJECT_NAME} "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" ${PROJECT_NAME} "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "filesystem" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "filesystem" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "game" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "game" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "gameui" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "gameui" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "inputsystem" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "inputsystem" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "launcher" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "launcher" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "localize" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "localize" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "materialsystem" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "materialsystem" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "mathlib" "" ${FOLDER_CONTEXT} )
add_module( "lib" "mathlib" "" ${FOLDER_CONTEXT} TRUE)
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "exe" "naveditor" "" ${FOLDER_CONTEXT} )
add_module( "exe" "naveditor" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "exe" "netconsole" "vpc" ${FOLDER_CONTEXT} )
add_module( "exe" "netconsole" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "networksystem" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "networksystem" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "shared_lib" "PluginSDK" "vpc" ${FOLDER_CONTEXT} )
add_module( "shared_lib" "PluginSDK" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "pluginsystem" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "pluginsystem" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "SigCache_PB" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "SigCache_PB" "vpc" ${FOLDER_CONTEXT} FALSE )
start_sources()
@ -9,8 +9,9 @@ add_sources( SOURCE_GROUP "Runtime"
)
end_sources()
thirdparty_suppress_warnings()
add_module( "lib" "SV_RCon_PB" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "SV_RCon_PB" "vpc" ${FOLDER_CONTEXT} FALSE )
start_sources()
@ -20,8 +21,9 @@ add_sources( SOURCE_GROUP "Runtime"
)
end_sources()
thirdparty_suppress_warnings()
add_module( "lib" "CL_RCon_PB" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "CL_RCon_PB" "vpc" ${FOLDER_CONTEXT} FALSE )
start_sources()
@ -31,3 +33,4 @@ add_sources( SOURCE_GROUP "Runtime"
)
end_sources()
thirdparty_suppress_warnings()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "rtech_game" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "rtech_game" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -10,7 +10,7 @@ add_sources( SOURCE_GROUP "Source"
end_sources()
add_module( "lib" "rtech_tools" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "rtech_tools" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -19,7 +19,7 @@ add_sources( SOURCE_GROUP "Source"
"rtech_utils.h"
)
add_module( "lib" "rui" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "rui" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -28,7 +28,7 @@ add_sources( SOURCE_GROUP "Source"
"rui/rui.h"
)
add_module( "lib" "stryder" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "stryder" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "exe" "sdklauncher" "" ${FOLDER_CONTEXT} )
add_module( "exe" "sdklauncher" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "libcppkore" "" ${FOLDER_CONTEXT} )
add_module( "lib" "libcppkore" "" ${FOLDER_CONTEXT} FALSE )
start_sources()
@ -326,4 +326,5 @@ add_sources( SOURCE_GROUP "Win32"
"cppkore/Win32Error.h"
)
end_sources()
end_sources()
thirdparty_suppress_warnings()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "libcurl" "" ${FOLDER_CONTEXT} )
add_module( "lib" "libcurl" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "libdetours" "" ${FOLDER_CONTEXT} )
add_module( "lib" "libdetours" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "FastLZ" "" ${FOLDER_CONTEXT} )
add_module( "lib" "FastLZ" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "libimgui" "" ${FOLDER_CONTEXT} )
add_module( "lib" "libimgui" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "liblzham" "" ${FOLDER_CONTEXT} )
add_module( "lib" "liblzham" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "libprotobuf" "" ${FOLDER_CONTEXT} )
add_module( "lib" "libprotobuf" "" ${FOLDER_CONTEXT} FALSE )
start_sources()
@ -103,3 +103,4 @@ add_sources( SOURCE_GROUP "Stubs/Include"
)
end_sources()
thirdparty_suppress_warnings()

View File

@ -3,7 +3,7 @@ cmake_minimum_required( VERSION 3.16 )
# -----------------------------------------------------------------------------
# Recast & Detour debug utilities
# -----------------------------------------------------------------------------
add_module( "lib" "navdebugutils" "" ${FOLDER_CONTEXT} )
add_module( "lib" "navdebugutils" "" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -31,7 +31,7 @@ target_precompile_headers( ${PROJECT_NAME} PRIVATE
# -----------------------------------------------------------------------------
# Detour runtime
# -----------------------------------------------------------------------------
add_module( "lib" "libdetour" "navdebugutils" ${FOLDER_CONTEXT} )
add_module( "lib" "libdetour" "navdebugutils" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -63,7 +63,7 @@ whole_program_optimization()
# -----------------------------------------------------------------------------
# Detour crowd
# -----------------------------------------------------------------------------
add_module( "lib" "libdetourcrowd" "navdebugutils" ${FOLDER_CONTEXT} )
add_module( "lib" "libdetourcrowd" "navdebugutils" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -93,7 +93,7 @@ whole_program_optimization()
# -----------------------------------------------------------------------------
# Detour tile cache
# -----------------------------------------------------------------------------
add_module( "lib" "libdetourtilecache" "navdebugutils" ${FOLDER_CONTEXT} )
add_module( "lib" "libdetourtilecache" "navdebugutils" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -113,7 +113,7 @@ whole_program_optimization()
# -----------------------------------------------------------------------------
# Recast runtime
# -----------------------------------------------------------------------------
add_module( "lib" "librecast" "navdebugutils" ${FOLDER_CONTEXT} )
add_module( "lib" "librecast" "navdebugutils" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "libsdl2" "" ${FOLDER_CONTEXT} )
add_module( "lib" "libsdl2" "" ${FOLDER_CONTEXT} FALSE )
start_sources()
@ -557,3 +557,5 @@ end_sources()
target_include_directories( ${PROJECT_NAME} PRIVATE
"${ENGINE_SOURCE_DIR}/thirdparty/sdl/include/"
)
thirdparty_suppress_warnings()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "libspdlog" "" ${FOLDER_CONTEXT} )
add_module( "lib" "libspdlog" "" ${FOLDER_CONTEXT} TRUE )
start_sources()
@ -133,6 +133,7 @@ add_sources( SOURCE_GROUP "Sinks"
end_sources()
whole_program_optimization()
thirdparty_suppress_warnings()
target_compile_definitions( ${PROJECT_NAME} PRIVATE
"SPDLOG_COMPILED_LIB"

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "tier0" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "tier0" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "tier1" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "tier1" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "tier2" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "tier2" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "vgui" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "vgui" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "vguimatsurface" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "vguimatsurface" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "vpc" "" ${FOLDER_CONTEXT} )
add_module( "lib" "vpc" "" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "vphysics" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "vphysics" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "vpklib" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "vpklib" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "vscript" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "vscript" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()

View File

@ -1,5 +1,5 @@
cmake_minimum_required( VERSION 3.16 )
add_module( "lib" "vstdlib" "vpc" ${FOLDER_CONTEXT} )
add_module( "lib" "vstdlib" "vpc" ${FOLDER_CONTEXT} TRUE )
start_sources()