Merge branch 'gh-actions' into catch
[awesomized/libmemcached] / CMake / CheckDebug.cmake
index 749e188b975d638f4c9a252e6d3113178587cf4a..32fbf26d1ddb1dcd7caf576d4a2fdb13a487e164 100644 (file)
@@ -1,18 +1,28 @@
 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)
-        add_compile_definitions(DEBUG=1)
+        check_flag(-Og -O0)
+        check_flag(-ggdb -g)
+        add_definitions(-DDEBUG=1)
         foreach(FLAG IN ITEMS
                 -fno-inline
                 -fno-omit-frame-pointer
                 -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,10 @@ 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)
+                    link_libraries(-fsanitize=address)
+                    check_flag(-fsanitize-recover=address IGNORE)
                 endif()
             endif()
 
@@ -53,12 +60,14 @@ 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)
+                    link_libraries(-fsanitize=undefined)
+                    check_flag(-fsanitize-recover=undefined IGNORE)
                 endif()
             endif()
         endif()
     else()
-        add_compile_definitions(DEBUG=0)
+        add_definitions(-DDEBUG=0)
     endif()
 endfunction()