diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -264,6 +264,7 @@ include(ECMMarkAsTest) include(ECMInstallIcons) +include(CMakeDependentOption) include(CMakePackageConfigHelpers) include(WriteBasicConfigVersionFile) include(CheckFunctionExists) @@ -406,8 +407,20 @@ endif() option(KRITA_DEVS "For Krita developers. This modifies the DEBUG build type to use -O3 -g, while still enabling Q_ASSERT. This is necessary because the Qt5 cmake modules normally append QT_NO_DEBUG to any build type that is not labeled Debug") +CMAKE_DEPENDENT_OPTION(KRITA_DEVS_SANITIZER "Activate ASAN memory sanitizer for the build (available only with KRITA_DEVS)" ON + "KRITA_DEVS" OFF) + if (KRITA_DEVS) - set(CMAKE_CXX_FLAGS_DEBUG "-O3 -g" CACHE STRING "" FORCE) + if (NOT KRITA_DEVS_SANITIZER) + set(CMAKE_CXX_FLAGS_DEBUG "-O3 -g " CACHE STRING "" FORCE) + else() + set(CMAKE_CXX_FLAGS_DEBUG "-O3 -g -fsanitize=address -lasan -fno-omit-frame-pointer" CACHE STRING "" FORCE) + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-O3 -g -fsanitize=address -lasan -fno-omit-frame-pointer" CACHE STRING "" FORCE) + set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "-O3 -g -fsanitize=address -lasan -fno-omit-frame-pointer" CACHE STRING "" FORCE) + set(CMAKE_C_FLAGS_DEBUG "-O3 -g -fsanitize=address -lasan -fno-omit-frame-pointer" CACHE STRING "" FORCE) + set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "-O3 -g -fsanitize=address -lasan -fno-omit-frame-pointer" CACHE STRING "" FORCE) + set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "-O3 -g -fsanitize=address -lasan -fno-omit-frame-pointer" CACHE STRING "" FORCE) + endif() endif() if(UNIX) @@ -428,6 +441,11 @@ string(REPLACE "-Wl,--export-all-symbols" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") endif(MINGW) +if (KRITA_DEVS_SANITIZER) + string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") +endif() + # enable exceptions globally kde_enable_exceptions()