X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=CMake%2FCheckDebug.cmake;h=433682998b17d171a023f94e14c95fe9c1ea45ac;hb=94025939f5d2c3ec2c8545d31945db560a45097e;hp=cc91da979171d09e23d5f375ecf7445808c00e13;hpb=911c5ad81ebd8ff9a72cfbb5bc1e2a7b49ee3f92;p=awesomized%2Flibmemcached diff --git a/CMake/CheckDebug.cmake b/CMake/CheckDebug.cmake index cc91da97..43368299 100644 --- a/CMake/CheckDebug.cmake +++ b/CMake/CheckDebug.cmake @@ -1,9 +1,21 @@ include(CMakePushCheckState) include(CheckCXXCompilerFlag) +function(check_flag FLAG DEFAULT) + unset(FLAG_CONSTANT) + string(MAKE_C_IDENTIFIER CXX${FLAG} FLAG_CONSTANT) + check_cxx_compiler_flag(${FLAG} ${FLAG_CONSTANT}) + if(${FLAG_CONSTANT}) + add_compile_options(${FLAG}) + elseif(DEFAULT) + add_compile_options(${DEFAULT}) + endif() +endfunction() + function(check_debug) if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_compile_options(-O1) + check_flag(-Og -O0) + check_flag(-ggdb -g) add_definitions(-DDEBUG=1) foreach(FLAG IN ITEMS -fno-inline @@ -11,8 +23,6 @@ function(check_debug) -fno-eliminate-unused-debug-types -funsafe-loop-optimizations - -g3 - -Wall -Wextra @@ -27,12 +37,7 @@ function(check_debug) -Wunknown-pragmas -Wunsafe-loop-optimizations ) - unset(FLAG_CONSTANT) - string(MAKE_C_IDENTIFIER CXX${FLAG} FLAG_CONSTANT) - check_cxx_compiler_flag(${FLAG} ${FLAG_CONSTANT}) - if(${FLAG_CONSTANT}) - add_compile_options(${FLAG}) - endif() + check_flag(${FLAG} IGNORE) endforeach() if(ENABLE_SANITIZERS) @@ -42,8 +47,13 @@ function(check_debug) check_cxx_compiler_flag(-fsanitize=address HAVE_ASAN) cmake_pop_check_state() if(HAVE_ASAN) + add_compile_definitions(HAVE_ASAN) add_compile_options(-fsanitize=address) - add_link_options(-lasan) + if(CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") + endif() + link_libraries(asan) + check_flag(-fsanitize-recover=address IGNORE) endif() endif() @@ -53,8 +63,13 @@ function(check_debug) check_cxx_compiler_flag(-fsanitize=undefined HAVE_UBSAN) cmake_pop_check_state() if(HAVE_UBSAN) + add_compile_definitions(HAVE_UBSAN) add_compile_options(-fsanitize=undefined) - add_link_options(-lubsan) + if(CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") + endif() + link_libraries(ubsan) + check_flag(-fsanitize-recover=undefined IGNORE) endif() endif() endif()