summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorVladislav Vaintroub <wlad@mariadb.com>2021-03-12 08:43:37 +0100
committerVladislav Vaintroub <wlad@mariadb.com>2021-03-12 08:44:55 +0100
commit031b3dfc22c3d37769d49da902401b26a24f12b4 (patch)
tree8fa75c509f99994a6044a737040363c469e463e6 /cmake
parent4c2b6be38e7c62d585b137ab9b3af4907a08a737 (diff)
downloadmariadb-git-031b3dfc22c3d37769d49da902401b26a24f12b4.tar.gz
MDEV-25123 support MSVC ASAN
Diffstat (limited to 'cmake')
-rw-r--r--cmake/os/Windows.cmake34
-rw-r--r--cmake/pcre.cmake4
2 files changed, 24 insertions, 14 deletions
diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake
index 29bd637250d..71ad4ab0912 100644
--- a/cmake/os/Windows.cmake
+++ b/cmake/os/Windows.cmake
@@ -68,17 +68,12 @@ MACRO(ENABLE_SANITIZERS)
MESSAGE(FATAL_ERROR "clang-cl or MSVC necessary to enable asan/ubsan")
ENDIF()
# currently, asan is broken with static CRT.
- IF(NOT(MSVC_CRT_TYPE STREQUAL "/MD"))
- IF(NOT DYNAMIC_UCRT_LINK)
- MESSAGE(FATAL_ERROR "-DWITH_ASAN cmake parameter also requires -DMSVC_CRT_TYPE=/MD OR DYNAMIC_UCRT_LINK=ON")
- ENDIF()
+ IF(CLANG_CL AND NOT(MSVC_CRT_TYPE STREQUAL "/MD"))
+ SET(MSVC_CRT_TYPE "/MD" CACHE INTERNAL "" FORCE)
ENDIF()
IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
SET(ASAN_ARCH i386)
ELSE()
- IF(NOT CLANG_CL)
- MESSAGE(FATAL_ERROR "sanitizers do not yet work on MSVC x64, try 32 bit or clang-cl")
- ENDIF()
SET(ASAN_ARCH x86_64)
ENDIF()
@@ -88,8 +83,10 @@ MACRO(ENABLE_SANITIZERS)
SET(SANITIZER_LINK_LIBRARIES)
SET(SANITIZER_COMPILE_FLAGS)
IF(WITH_ASAN)
- LIST(APPEND SANITIZER_LIBS
- clang_rt.asan_dynamic-${ASAN_ARCH}.lib clang_rt.asan_dynamic_runtime_thunk-${ASAN_ARCH}.lib)
+ IF(CLANG_CL)
+ LIST(APPEND SANITIZER_LIBS
+ clang_rt.asan_dynamic-${ASAN_ARCH}.lib clang_rt.asan_dynamic_runtime_thunk-${ASAN_ARCH}.lib)
+ ENDIF()
STRING(APPEND SANITIZER_COMPILE_FLAGS " -fsanitize=address")
ENDIF()
IF(WITH_UBSAN)
@@ -134,7 +131,13 @@ IF(MSVC)
INCLUDE(InstallRequiredSystemLibraries)
ENDIF()
- OPTION(DYNAMIC_UCRT_LINK "Link Universal CRT dynamically, if MSVC_CRT_TYPE=/MT" ON)
+ IF(WITH_ASAN AND (NOT CLANG_CL))
+ SET(DYNAMIC_UCRT_LINK_DEFAULT OFF)
+ ELSE()
+ SET(DYNAMIC_UCRT_LINK_DEFAULT ON)
+ ENDIF()
+
+ OPTION(DYNAMIC_UCRT_LINK "Link Universal CRT dynamically, if MSVC_CRT_TYPE=/MT" ${DYNAMIC_UCRT_LINK_DEFAULT})
SET(DYNAMIC_UCRT_LINKER_OPTION " /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
# Enable debug info also in Release build,
@@ -191,8 +194,15 @@ IF(MSVC)
FOREACH(type EXE SHARED MODULE)
STRING(REGEX REPLACE "/STACK:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS "${CMAKE_${type}_LINKER_FLAGS}")
- STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}")
- STRING(REGEX REPLACE "/INCREMENTAL$" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}")
+ IF(WITH_ASAN)
+ SET(build_types RELWITHDEBINFO DEBUG)
+ ELSE()
+ SET(build_types RELWITHDEBINFO)
+ ENDIF()
+ FOREACH(btype ${build_types})
+ STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_${btype} "${CMAKE_${type}_LINKER_FLAGS_${btype}}")
+ STRING(REGEX REPLACE "/INCREMENTAL$" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_${btype} "${CMAKE_${type}_LINKER_FLAGS_${btype}}")
+ ENDFOREACH()
IF(NOT CLANG_CL)
STRING(APPEND CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO " /release /OPT:REF,ICF")
ENDIF()
diff --git a/cmake/pcre.cmake b/cmake/pcre.cmake
index 208f9ee755e..009dbbe5ae1 100644
--- a/cmake/pcre.cmake
+++ b/cmake/pcre.cmake
@@ -36,8 +36,8 @@ MACRO(BUNDLE_PCRE2)
IF(MSVC)
# Suppress a warning
STRING(APPEND pcre2_flags${v} " /wd4244 " )
- # Need this only for ASAN support
- SET(stdlibs "-DCMAKE_C_STANDARD_LIBRARIES=${CMAKE_C_STANDARD_LIBRARIES}")
+ # Disable asan support
+ STRING(REPLACE "-fsanitize=address" "" pcre2_flags${v} "${CMAKE_C_FLAGS${v}}")
ENDIF()
ENDFOREACH()
ExternalProject_Add(