diff --git a/CMakeLists.txt b/CMakeLists.txt index e9f8b7813..0837bbf19 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,7 @@ find_package(Jansson) find_package(Avro) find_package(GSSAPI) find_package(SQLite) +find_package(ASAN) # Find or build PCRE2 # Read BuildPCRE2 for details about how to add pcre2 as a dependency to a target @@ -176,6 +177,11 @@ else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") endif() +if (WITH_ASAN AND ASAN_FOUND) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") +endif() + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${DEBUG_FLAGS} -DSS_DEBUG -DLOG_ASSERT") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-uninitialized") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ggdb -Wno-uninitialized") diff --git a/cmake/FindASAN.cmake b/cmake/FindASAN.cmake new file mode 100644 index 000000000..dea230ea3 --- /dev/null +++ b/cmake/FindASAN.cmake @@ -0,0 +1,14 @@ +# Find AddressSanitizer libraries +# +# The following variables are set: +# ASAN_FOUND - If AddressSanitizer was found +# ASAN_LIBRARIES - Path to the libasan library + +find_library(ASAN_LIBRARIES NAMES libasan.so.0 libasan.so.3 libasan.so.4) + +if (ASAN_LIBRARIES) + message(STATUS "Found AdressSanitizer libraries: ${ASAN_LIBRARIES}") + set(ASAN_FOUND TRUE CACHE INTERNAL "") +else() + message(STATUS "Could not find AdressSanitizer") +endif() diff --git a/cmake/defaults.cmake b/cmake/defaults.cmake index 5bb62fa3f..3d65d5cc4 100644 --- a/cmake/defaults.cmake +++ b/cmake/defaults.cmake @@ -62,3 +62,6 @@ set(PACKAGE_NAME "maxscale" CACHE STRING "Name of the generated package") # Which component to build (core, experimental, devel) set(TARGET_COMPONENT "core" CACHE STRING "Which component to build (core, experimental, devel, all)") + +# Enable AddressSanitizer: https://github.com/google/sanitizers/wiki/AddressSanitizer +set(WITH_ASAN FALSE CACHE BOOL "Enable AddressSanitizer")