From 8fbf3b431da125681af41df6231df3fbaf30a0db Mon Sep 17 00:00:00 2001
From: Kitty Barnett <develop@catznip.com>
Date: Fri, 14 Aug 2020 19:34:35 +0200
Subject: [PATCH] Add ASan as a build option now that Visual Studio supports it

---
 indra/cmake/00-Common.cmake    |  7 +++++++
 indra/cmake/LLSharedLibs.cmake |  7 +++++++
 indra/cmake/Linking.cmake      | 16 ++++++++++++++++
 3 files changed, 30 insertions(+)

diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 6043b5a603b..a6d386ce734 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -32,6 +32,9 @@ set(CMAKE_CXX_FLAGS_DEBUG "$ENV{LL_BUILD_DEBUG}")
 # Portable compilation flags.
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DADDRESS_SIZE=${ADDRESS_SIZE}")
 
+# Configure asan
+set(ASAN OFF CACHE BOOL "Enable use of asan in builds")
+
 # Configure crash reporting
 set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
 set(NON_RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in developer builds")
@@ -63,6 +66,10 @@ if (WINDOWS)
   # http://www.cmake.org/pipermail/cmake/2009-September/032143.html
   string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
 
+  if(ASAN)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
+  endif(ASAN)
+
   # Without PreferredToolArchitecture=x64, as of 2020-06-26 the 32-bit
   # compiler on our TeamCity build hosts has started running out of virtual
   # memory for the precompiled header file.
diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
index f69b45cd926..0773e7587a4 100644
--- a/indra/cmake/LLSharedLibs.cmake
+++ b/indra/cmake/LLSharedLibs.cmake
@@ -18,6 +18,13 @@ macro(ll_deploy_sharedlibs_command target_exe)
   if(NOT DARWIN)
     if(WINDOWS)
       SET_TEST_PATH(SEARCH_DIRS)
+      if(ASAN)
+        if(ADDRESS_SIZE EQUAL 32)
+          LIST(APPEND SEARCH_DIRS "$ENV{VCToolsInstallDir}bin\\Hostx64\\x86")
+        else(ADDRESS_SIZE EQUAL 32)
+          LIST(APPEND SEARCH_DIRS "$ENV{VCToolsInstallDir}bin\\Hostx64\\x64")
+        endif(ADDRESS_SIZE EQUAL 32)
+      endif(ASAN)
       LIST(APPEND SEARCH_DIRS "$ENV{SystemRoot}/system32")
     elseif(LINUX)
       SET_TEST_PATH(SEARCH_DIRS)
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index 3cb235a9d58..18e44d72e53 100644
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -69,6 +69,22 @@ if (WINDOWS)
       ole32
       dbghelp
       )
+
+  if(ASAN)
+    if(ADDRESS_SIZE EQUAL 32)
+      set(WINDOWS_LIBRARIES
+          ${WINDOWS_LIBRARIES}
+          clang_rt.asan_dynamic_runtime_thunk-i386
+          clang_rt.asan_dynamic-i386
+          )
+    else(ADDRESS_SIZE EQUAL 32)
+      set(WINDOWS_LIBRARIES
+          ${WINDOWS_LIBRARIES}
+          clang_rt.asan_dynamic_runtime_thunk-x86_64
+          clang_rt.asan_dynamic-x86_64
+          )
+    endif(ADDRESS_SIZE EQUAL 32)
+  endif(ASAN)
 else (WINDOWS)
   set(WINDOWS_LIBRARIES "")
 endif (WINDOWS)
-- 
GitLab