Index: gn/BUILD.gn |
diff --git a/gn/BUILD.gn b/gn/BUILD.gn |
index a076aa9e9cd12e1f6073b41a34b5c25ceb9ee2ea..c5db0a96608b0760588e559d24a6a44ac4182f09 100644 |
--- a/gn/BUILD.gn |
+++ b/gn/BUILD.gn |
@@ -23,7 +23,9 @@ declare_args() { |
} |
config("no_rtti") { |
- cflags_cc = [ "-fno-rtti" ] |
+ if (sanitize != "ASAN") { # -fsanitize=vptr requires RTTI |
+ cflags_cc = [ "-fno-rtti" ] |
+ } |
} |
config("default") { |
@@ -53,6 +55,8 @@ config("default") { |
"-Wnon-virtual-dtor", |
] |
+ ldflags = [] |
+ |
if (current_cpu == "arm") { |
cflags += [ |
"-march=armv7-a", |
@@ -80,7 +84,7 @@ config("default") { |
"-isystem$ndk/sources/android/support/include", |
"-isystem$ndk/sources/cxx-stl/llvm-libc++/libcxx/include", |
] |
- ldflags = [ |
+ ldflags += [ |
"--sysroot=$ndk/platforms/$ndk_platform", |
"--target=$ndk_target", |
"-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin", |
@@ -104,6 +108,31 @@ config("default") { |
if (is_linux) { |
libs = [ "pthread" ] |
} |
+ |
+ if (sanitize != "") { |
+ # You can either pass the sanitizers directly, e.g. "address,undefined", |
+ # or pass one of the couple common aliases used by the bots. |
+ sanitizers = sanitize |
+ if (sanitize == "ASAN") { |
+ sanitizers = "address,bool,function,integer-divide-by-zero,nonnull-attribute,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unreachable,vla-bound,vptr" |
+ } else if (sanitize == "TSAN") { |
+ sanitizers = "thread" |
+ } else if (sanitize == "MSAN") { |
+ sanitizers = "memory" |
+ } |
+ |
+ cflags += [ |
+ "-fsanitize=$sanitizers", |
+ "-fno-sanitize-recover=$sanitizers", |
+ "-fsanitize-blacklist=" + rebase_path("../tools/xsan.blacklist"), |
+ ] |
+ ldflags += [ "-fsanitize=$sanitizers" ] |
+ if (sanitizers == "memory") { |
+ cflags += [ "-fsanitize-memory-track-origins" ] |
+ cflags_cc += [ "-stdlib=libc++" ] |
+ ldflags += [ "-stdlib=libc++" ] |
+ } |
+ } |
} |
config("release") { |