From d315026f37b99834fdd6a112e6a6b991a99294da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= Date: Sun, 8 Nov 2020 02:00:39 +0100 Subject: [PATCH] CMake: Add support for ASAN on MSVC --- CMakeLists.txt | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b7bb4eeb..163bf203a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.10.0) +cmake_minimum_required(VERSION 3.13.0) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") @@ -287,11 +287,21 @@ endif() if (SANITIZE_ADDRESS) message(STATUS "Activate address sanitization") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fsanitize=address") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") - set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -fsanitize=address") + if(MSVC) + set(ASAN_LIB_ARCH ${MSVC_CXX_ARCHITECTURE_ID}) + string(TOLOWER ${ASAN_LIB_ARCH} ASAN_LIB_ARCH) + if(ASAN_LIB_ARCH STREQUAL "x86") + set(ASAN_LIB_ARCH "i386") + elseif(ASAN_LIB_ARCH STREQUAL "x64") + set(ASAN_LIB_ARCH "x86_64") + endif() + add_compile_options(/fsanitize=address) + link_libraries(clang_rt.asan_dynamic-${ASAN_LIB_ARCH} clang_rt.asan_dynamic_runtime_thunk-${ASAN_LIB_ARCH}) + add_link_options(/wholearchive:clang_rt.asan_dynamic_runtime_thunk-${ASAN_LIB_ARCH}.lib) + else() + add_compile_options(-fsanitize=address -fno-omit-frame-pointer -g) + add_link_options(-fsanitize=address) + endif() endif() if (C_CLANG OR C_GCC)