option(WITH_ASAN_LEAK "explicitly enable ASAN leak detection" OFF)
if(WITH_ASAN)
- set(ASAN_CFLAGS "-fsanitize=address -fno-omit-frame-pointer")
+ list(APPEND SANITIZE_FLAGS "address")
if(WITH_ASAN_LEAK)
- set(ASAN_CFLAGS "${ASAN_CFLAGS} -fsanitize=leak")
+ list(APPEND SANITIZE_FLAGS "leak")
endif()
- set(ASAN_LFLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ASAN_CFLAGS} -lasan")
- set(CMAKE_EXE_LINKER_FLAGS "${ASAN_LFLAGS}")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ASAN_CFLAGS}")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ASAN_CFLAGS}")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
if(HAVE_JEMALLOC)
message(FATAL "ASAN does not work well with JeMalloc")
endif()
option(WITH_TSAN "build with TSAN" OFF)
if(WITH_TSAN)
- if (WITH_ASAN AND WITH_ASAN_LEAK)
+ if(WITH_ASAN AND WITH_ASAN_LEAK)
message(FATAL_ERROR "Cannot combine -fsanitize-leak w/-fsanitize-thread")
- endif()
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -fno-omit-frame-pointer -pie -ltsan ")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fno-omit-frame-pointer")
- if(HAVE_JEMALLOC)
+ elseif(HAVE_JEMALLOC)
message(FATAL "TSAN does not work well with JeMalloc")
endif()
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -ltsan")
+ list(APPEND SANITIZE_FLAGS "thread")
endif()
option(WITH_UBSAN "build with UBSAN" OFF)
if(WITH_UBSAN)
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
if(HAVE_JEMALLOC)
message(FATAL "UBSAN does not work well with JeMalloc")
endif()
+ list(APPEND SANITIZE_FLAGS "undefined")
+endif()
+
+if(SANITIZE_FLAGS)
+ string(REPLACE ";" "," SANITIZE_FLAGS "${SANITIZE_FLAGS}")
+ set(SANITIZE_CFLAGS "-fsanitize=${SANITIZE_FLAGS} -fno-omit-frame-pointer")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_CFLAGS}")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_CFLAGS}")
endif()
# Rocksdb