From 930045ef122e36e33d8dd89baada5fa60cadfc39 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 10 Oct 2016 09:29:09 +0200 Subject: [PATCH] Added leak detector option, made conflicting options exclusive. --- CMakeLists.txt | 20 ++++++++++++++++++++ cmake/ConfigOptions.cmake | 5 +++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 34f14a4c8..6b69d61a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -291,11 +291,31 @@ if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC) unset(CMAKE_REQUIRED_FLAGS) endif() + CHECK_C_COMPILER_FLAG ("-fno-omit-frame-pointer" fno-omit-frame-pointer) + if(fno-omit-frame-pointer) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer") + endif() + elseif(WITH_SANITIZE_LEAK) + if (DEFINED CMAKE_REQUIRED_FLAGS) + set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) + endif() + set(CMAKE_REQUIRED_FLAGS "-fsanitize=leak") + CHECK_C_COMPILER_FLAG ("-fsanitize=leak" fsanitize-leak) + if(fsanitize-leak) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=leak") + endif() + if (DEFINED SAVE_CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS}) + else() + unset(CMAKE_REQUIRED_FLAGS) + endif() + CHECK_C_COMPILER_FLAG ("-fno-omit-frame-pointer" fno-omit-frame-pointer) if(fno-omit-frame-pointer) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer") endif() endif() + if (WITH_NO_UNDEFINED) if (DEFINED CMAKE_REQUIRED_FLAGS) set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake index ccda88b6f..070f948b1 100644 --- a/cmake/ConfigOptions.cmake +++ b/cmake/ConfigOptions.cmake @@ -42,8 +42,9 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") endif() if(NOT WIN32) - option(WITH_VALGRIND_MEMCHECK "Compile with valgrind helpers." OFF) - option(WITH_SANITIZE_ADDRESS "Compile with clang address sanitizer." OFF) + CMAKE_DEPENDENT_OPTION(WITH_VALGRIND_MEMCHECK "Compile with valgrind helpers." OFF "NOT WITH_SANITIZE_ADDRESS; NOT WITH_SANITIZE_LEAK" OFF) + CMAKE_DEPENDENT_OPTION(WITH_SANITIZE_ADDRESS "Compile with gcc/clang address sanitizer." OFF "NOT WITH_VALGRIND_MEMCHECK; NOT WITH_SANITIZE_LEAK" OFF) + CMAKE_DEPENDENT_OPTION(WITH_SANITIZE_LEAK "Compile with gcc/clang leak sanitizer." OFF "NOT WITH_VALGRIND_MEMCHECK; NOT WITH_SANITIZE_ADDRESS" OFF) else() if(NOT UWP) option(WITH_MEDIA_FOUNDATION "Enable H264 media foundation decoder." ON)