osrm-backend/cmake/warnings.cmake
Siarhei Fedartsou 1a4568caf4 wip
2022-09-08 08:56:14 +02:00

96 lines
3.4 KiB
CMake

include (CheckCXXCompilerFlag)
include (CheckCCompilerFlag)
# Try to add -Wflag if compiler supports it
macro (add_warning flag)
string(REPLACE "-" "_" underscored_flag ${flag})
string(REPLACE "+" "x" underscored_flag ${underscored_flag})
check_cxx_compiler_flag("-W${flag}" SUPPORTS_CXXFLAG_${underscored_flag})
check_c_compiler_flag("-W${flag}" SUPPORTS_CFLAG_${underscored_flag})
if (SUPPORTS_CXXFLAG_${underscored_flag})
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W${flag}")
else()
message (STATUS "Flag -W${flag} is unsupported")
endif()
if (SUPPORTS_CFLAG_${underscored_flag})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W${flag}")
else()
message(STATUS "Flag -W${flag} is unsupported")
endif()
endmacro()
# Try to add -Wno flag if compiler supports it
macro (no_warning flag)
add_warning(no-${flag})
endmacro ()
# The same but only for specified target.
macro (target_add_warning target flag)
string (REPLACE "-" "_" underscored_flag ${flag})
string (REPLACE "+" "x" underscored_flag ${underscored_flag})
check_cxx_compiler_flag("-W${flag}" SUPPORTS_CXXFLAG_${underscored_flag})
if (SUPPORTS_CXXFLAG_${underscored_flag})
target_compile_options (${target} PRIVATE "-W${flag}")
else ()
message (STATUS "Flag -W${flag} is unsupported")
endif ()
endmacro ()
macro (target_no_warning target flag)
target_add_warning(${target} no-${flag})
endmacro ()
add_warning(all)
add_warning(extra)
add_warning(error) # treat all warnings as errors
#if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_warning(strict-overflow=2)
add_warning(suggest-override)
add_warning(suggest-destructor-override)
add_warning(unused)
add_warning(unreachable-code)
# TODO: these warnings are not enabled by default, but we consider them as useful and good to enable in the future
no_warning(implicit-int-conversion)
no_warning(implicit-float-conversion)
no_warning(unused-member-function)
no_warning(old-style-cast)
no_warning(non-virtual-dtor)
no_warning(float-conversion)
no_warning(sign-conversion)
no_warning(shorten-64-to-32)
no_warning(padded)
no_warning(missing-noreturn)
#elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
# add_warning(pedantic)
# # Add compiler options only to c++ compiler
# function(add_cxx_compile_options option)
# add_compile_options("$<$<STREQUAL:$<TARGET_PROPERTY:LINKER_LANGUAGE>,CXX>:${option}>")
# endfunction()
# add_cxx_compile_options(-Wstrict-overflow=1)
# add_cxx_compile_options(-Wdelete-incomplete)
# add_cxx_compile_options(-Wduplicated-cond)
# add_cxx_compile_options(-Wdisabled-optimization)
# add_cxx_compile_options(-Winit-self)
# add_cxx_compile_options(-Wbool-compare)
# add_cxx_compile_options(-Wlogical-not-parentheses)
# add_cxx_compile_options(-Wlogical-op)
# add_cxx_compile_options(-Wmaybe-uninitialized)
# add_cxx_compile_options(-Wmisleading-indentation)
# add_cxx_compile_options(-Wno-return-local-addr)
# add_cxx_compile_options(-Wodr)
# add_cxx_compile_options(-Wpointer-arith)
# add_cxx_compile_options(-Wredundant-decls)
# add_cxx_compile_options(-Wreorder)
# add_cxx_compile_options(-Wshift-negative-value)
# add_cxx_compile_options(-Wsizeof-array-argument)
# add_cxx_compile_options(-Wswitch-bool)
# add_cxx_compile_options(-Wtautological-compare)
# add_cxx_compile_options(-Wtrampolines)
#endif()