Merge branch 'docs' into v1.0
[m6w6/libmemcached] / CMake / CheckDebug.cmake
1 include(CMakePushCheckState)
2 include(CheckCXXCompilerFlag)
3
4 function(check_debug)
5 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
6 add_compile_options(-O1)
7 add_definitions(-DDEBUG=1)
8 foreach(FLAG IN ITEMS
9 -fno-inline
10 -fno-omit-frame-pointer
11 -fno-eliminate-unused-debug-types
12 -funsafe-loop-optimizations
13
14 -g3
15
16 -Wall
17 -Wextra
18
19 -Wdouble-promotion
20 -Wduplicated-cond
21 -Wduplicated-branches
22 -Wformat=2
23 -Wlogical-op
24 -Wnull-dereference
25 -Wrestrict
26 -Wshadow
27 -Wunknown-pragmas
28 -Wunsafe-loop-optimizations
29 )
30 unset(FLAG_CONSTANT)
31 string(MAKE_C_IDENTIFIER CXX${FLAG} FLAG_CONSTANT)
32 check_cxx_compiler_flag(${FLAG} ${FLAG_CONSTANT})
33 if(${FLAG_CONSTANT})
34 add_compile_options(${FLAG})
35 endif()
36 endforeach()
37
38 if(ENABLE_SANITIZERS)
39 if(address IN_LIST ENABLE_SANITIZERS OR asan IN_LIST ENABLE_SANITIZERS)
40 cmake_push_check_state(RESET)
41 set(CMAKE_REQUIRED_LIBRARIES asan)
42 check_cxx_compiler_flag(-fsanitize=address HAVE_ASAN)
43 cmake_pop_check_state()
44 if(HAVE_ASAN)
45 add_compile_options(-fsanitize=address)
46 add_link_options(-lasan)
47 endif()
48 endif()
49
50 if(undefined IN_LIST ENABLE_SANITIZERS OR ubsan IN_LIST ENABLE_SANITIZERS)
51 cmake_push_check_state(RESET)
52 set(CMAKE_REQUIRED_LIBRARIES ubsan)
53 check_cxx_compiler_flag(-fsanitize=undefined HAVE_UBSAN)
54 cmake_pop_check_state()
55 if(HAVE_UBSAN)
56 add_compile_options(-fsanitize=undefined)
57 add_link_options(-lubsan)
58 endif()
59 endif()
60 endif()
61 else()
62 add_definitions(-DDEBUG=0)
63 endif()
64 endfunction()