summaryrefslogtreecommitdiff
path: root/cmake/Sanitizer.cmake
diff options
context:
space:
mode:
authorLevent Kaya <levent@dev>2025-11-05 22:11:58 +0300
committerLevent Kaya <levent@dev>2025-11-05 22:11:58 +0300
commitf6f40266ba57ab2df99b897c375f85f0a8a97856 (patch)
treea344923e53224f646fbcbb1abaf3befe6e1ea0d5 /cmake/Sanitizer.cmake
parentce4e4020854e106ead6f505094c668cd896d8817 (diff)
[feature] basic structure
Diffstat (limited to 'cmake/Sanitizer.cmake')
-rw-r--r--cmake/Sanitizer.cmake28
1 files changed, 28 insertions, 0 deletions
diff --git a/cmake/Sanitizer.cmake b/cmake/Sanitizer.cmake
new file mode 100644
index 0000000..6e633a9
--- /dev/null
+++ b/cmake/Sanitizer.cmake
@@ -0,0 +1,28 @@
+# cmake/Sanitizers.cmake
+#
+# Adds sanitizers compile/link flags when requested.
+# Usage: include(Sanitizers) ; enable_sanitizers(<target>)
+
+function(enable_sanitizers target)
+ if (NOT BOLTDBG_ENABLE_ASAN)
+ message(VERBOSE "Sanitizers disabled (BOLTDBG_ENABLE_ASAN=OFF)")
+ return()
+ endif()
+
+ if (MSVC)
+ message(WARNING "AddressSanitizer is not fully supported on MSVC. Skipping.")
+ return()
+ endif()
+
+ # AddressSanitizer + UndefinedBehaviorSanitizer recommended combo
+ target_compile_options(${target} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer)
+ target_link_options(${target} PRIVATE -fsanitize=address,undefined)
+
+ # Optional: ThreadSanitizer for race conditions (enable manually if needed)
+ # target_compile_options(${target} PRIVATE -fsanitize=thread -fno-omit-frame-pointer)
+ # target_link_options(${target} PRIVATE -fsanitize=thread)
+
+ # Recommended debug symbols
+ target_compile_options(${target} PRIVATE -g)
+ message(STATUS "Enabled AddressSanitizer and UndefinedBehaviorSanitizer for target ${target}")
+endfunction()