aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2026-03-17 13:56:50 +0100
committerGitHub Enterprise <[email protected]>2026-03-17 13:56:50 +0100
commit90ca5315b2745fde3ccf9ce9d7106537cae566c8 (patch)
tree4f44464225dc8c8e8386f428b31697971e0f0a2f /src
parentrevise oplog block arrangement (#842) (diff)
downloadzen-90ca5315b2745fde3ccf9ce9d7106537cae566c8.tar.xz
zen-90ca5315b2745fde3ccf9ce9d7106537cae566c8.zip
add sanitizer options to xmake (#847)v5.7.23-pre1v5.7.23-pre0
- Improvement: Add easy access options for sanitizers with `xmake config` and `xmake test` as options - `--msan=[y|n]` Enable MemorySanitizer (Linux only, requires all deps instrumented) - `--asan=[y|n]` Enable AddressSanitizer (disables mimalloc and sentry) - `--tsan=[y|n]` Enable ThreadSanitizer (Linux/Mac only)
Diffstat (limited to 'src')
-rw-r--r--src/zencore/include/zencore/memory/fmalloc.h11
-rw-r--r--src/zencore/xmake.lua4
-rw-r--r--src/zenserver/xmake.lua18
3 files changed, 24 insertions, 9 deletions
diff --git a/src/zencore/include/zencore/memory/fmalloc.h b/src/zencore/include/zencore/memory/fmalloc.h
index 0c183cfd0..c50a9729c 100644
--- a/src/zencore/include/zencore/memory/fmalloc.h
+++ b/src/zencore/include/zencore/memory/fmalloc.h
@@ -9,6 +9,7 @@
// Detect if any sanitizers are enabled.
#if defined(__has_feature)
+// Clang: query each sanitizer individually
# if __has_feature(address_sanitizer)
# define ZEN_ADDRESS_SANITIZER 1
# endif
@@ -21,8 +22,14 @@
# if __has_feature(leak_sanitizer)
# define ZEN_LEAK_SANITIZER 1
# endif
-#elif defined(__SANITIZE_ADDRESS__) // For Windows
-# define ZEN_ADDRESS_SANITIZER 1
+#else
+// MSVC and GCC: check predefined macros set by the compiler when sanitizers are active
+# if defined(__SANITIZE_ADDRESS__) // MSVC (ASAN only), GCC
+# define ZEN_ADDRESS_SANITIZER 1
+# endif
+# if defined(__SANITIZE_THREAD__) // GCC
+# define ZEN_THREAD_SANITIZER 1
+# endif
#endif
#if !defined(ZEN_ADDRESS_SANITIZER)
diff --git a/src/zencore/xmake.lua b/src/zencore/xmake.lua
index 171f4c533..b08975df1 100644
--- a/src/zencore/xmake.lua
+++ b/src/zencore/xmake.lua
@@ -21,7 +21,7 @@ target('zencore')
add_deps("rpmalloc")
end
- if has_config("zenmimalloc") then
+ if has_config("zenmimalloc") and not use_asan then
add_packages("mimalloc")
end
@@ -47,7 +47,7 @@ target('zencore')
{public=true}
)
- if has_config("zensentry") then
+ if has_config("zensentry") and not use_asan then
add_packages("sentry-native")
if is_os("windows") then
diff --git a/src/zenserver/xmake.lua b/src/zenserver/xmake.lua
index 6b29dadfb..fe279ebb2 100644
--- a/src/zenserver/xmake.lua
+++ b/src/zenserver/xmake.lua
@@ -39,11 +39,11 @@ target("zenserver")
add_packages("oidctoken")
add_packages("nomad")
- if has_config("zenmimalloc") then
+ if has_config("zenmimalloc") and not use_asan then
add_packages("mimalloc")
end
- if has_config("zensentry") then
+ if has_config("zensentry") and not use_asan then
add_packages("sentry-native")
end
@@ -140,11 +140,19 @@ target("zenserver")
table.insert(args, "--detach=false")
+ -- On Windows the ASAN runtime is a DLL whose directory must be on PATH;
+ -- runenvs.make collects that (and any other Windows package run envs).
+ local addenvs, setenvs
+ if is_host("windows") then
+ import("private.action.run.runenvs")
+ addenvs, setenvs = runenvs.make(target)
+ end
+
-- debugging?
if option.get("debug") then
- debugger.run(targetfile, args, {curdir = rundir})
+ debugger.run(targetfile, args, {curdir = rundir, addenvs = addenvs, setenvs = setenvs})
else
- os.execv(targetfile, args, {curdir = rundir, detach = option.get("detach")})
+ os.execv(targetfile, args, {curdir = rundir, detach = option.get("detach"), addenvs = addenvs, setenvs = setenvs})
end
end)
@@ -175,7 +183,7 @@ target("zenserver")
end
end
- if has_config("zensentry") then
+ if has_config("zensentry") and not target:policy("build.sanitizer.address") then
local pkg = target:pkg("sentry-native")
if pkg then
local installdir = pkg:installdir()