From c1d8e204aacfc97fcf39433ff50b9b80d8f3969f Mon Sep 17 00:00:00 2001 From: Sebastien Gilles <sebastien.gilles@inria.fr> Date: Fri, 18 May 2018 18:11:50 +0200 Subject: [PATCH] #1288 Add a new flag for sanitizer support. --- cmake/MoReFEMSettings.cmake | 14 +++++++++++--- cmake/PreCache/linux_gcc_shared_lib.cmake | 2 ++ cmake/PreCache/linux_gcc_static_lib.cmake | 3 +++ cmake/PreCache/macos_clang_shared.cmake | 1 + cmake/PreCache/macos_clang_static.cmake | 2 ++ .../PreCache/macos_clang_static_several_lib.cmake | 2 ++ cmake/PreCache/macos_llvm-clang_static.cmake | 2 ++ 7 files changed, 23 insertions(+), 3 deletions(-) diff --git a/cmake/MoReFEMSettings.cmake b/cmake/MoReFEMSettings.cmake index e1f78608aa..74a06de928 100644 --- a/cmake/MoReFEMSettings.cmake +++ b/cmake/MoReFEMSettings.cmake @@ -58,9 +58,6 @@ if(${CMAKE_C_COMPILER_ID} STREQUAL "AppleClang" OR ${CMAKE_C_COMPILER_ID} STREQU add_cxx_compiler_flag("-Wno-undefined-func-template") add_cxx_compiler_flag("-Wno-c++1z-extensions") - -# add_cxx_compiler_flag("-stdlib=libc++") - if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") add_definitions(-D_LIBCPP_DEBUG2=0) # Additional checks such as index out of bounds in vectors in libc++; might # be removed at any point from libc++. @@ -109,6 +106,17 @@ else() message(FATAL_ERROR "Sorry, your compiler family wasn't recognized. If CMake has updated its flag, please modify the cmake/Compiler.cmake file in MoReFEM accoerdingly. See CMAKE_LANG_COMPILER_ID in CMake tutorial to find out the valid options.") endif() +if (${MOREFEM_DO_SANITIZE}) + add_cxx_compiler_flag("-fno-omit-frame-pointer") + add_cxx_compiler_flag("-fsanitize=address") + add_cxx_compiler_flag("-fsanitize=leak") + + if(LIBRARY_TYPE MATCHES SHARED) # See limitations on https://clang.llvm.org/docs/MemorySanitizer.html + add_cxx_compiler_flag("-fsanitize=memory") + endif() + +endif() + set(MOREFEM_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}) diff --git a/cmake/PreCache/linux_gcc_shared_lib.cmake b/cmake/PreCache/linux_gcc_shared_lib.cmake index 09eec38b89..76bad4d264 100644 --- a/cmake/PreCache/linux_gcc_shared_lib.cmake +++ b/cmake/PreCache/linux_gcc_shared_lib.cmake @@ -8,6 +8,8 @@ set(CMAKE_CXX_COMPILER ${MOREFEM_THIRD_PARTY_LIBRARIES_DIR}/Openmpi/bin/mpic++ C set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard; at least 17 is expected.") set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "Leave this one active.") set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "If ON you might be using gnu++17; with OFF you'll use c++17.") + +set(MOREFEM_DO_SANITIZE False CACHE BOOL "If true, sanitizer options -fsanitize=address, -fsanitize=memory and -fno-omit-frame-pointer are added.") set(LIBRARY_TYPE SHARED CACHE BOOL "Choose either STATIC or SHARED.") diff --git a/cmake/PreCache/linux_gcc_static_lib.cmake b/cmake/PreCache/linux_gcc_static_lib.cmake index e17062119c..b9c5d0a897 100644 --- a/cmake/PreCache/linux_gcc_static_lib.cmake +++ b/cmake/PreCache/linux_gcc_static_lib.cmake @@ -9,6 +9,9 @@ set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard; at least 17 is expected.") set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "Leave this one active.") set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "If ON you might be using gnu++17; with OFF you'll use c++17.") + +set(MOREFEM_DO_SANITIZE False CACHE BOOL "If true, sanitizer options -fsanitize=address, -fsanitize=memory and -fno-omit-frame-pointer are added.") + set(LIBRARY_TYPE STATIC CACHE BOOL "Choose either STATIC or SHARED.") set(BUILD_MOREFEM_UNIQUE_LIBRARY True CACHE BOOL "Whether a unique library is built for MoReFEM core libraries or on the contrary if it is splitted in modules.") diff --git a/cmake/PreCache/macos_clang_shared.cmake b/cmake/PreCache/macos_clang_shared.cmake index 01ea30b626..f6e1853eb4 100644 --- a/cmake/PreCache/macos_clang_shared.cmake +++ b/cmake/PreCache/macos_clang_shared.cmake @@ -5,6 +5,7 @@ set(MOREFEM_THIRD_PARTY_LIBRARIES_DIR /Users/Shared/LibraryVersions/clang) set(CMAKE_C_COMPILER ${MOREFEM_THIRD_PARTY_LIBRARIES_DIR}/Openmpi/bin/mpicc CACHE FILEPATH "C compiler. Prefer to use an openmpi wrapper.") set(CMAKE_CXX_COMPILER ${MOREFEM_THIRD_PARTY_LIBRARIES_DIR}/Openmpi/bin/mpic++ CACHE FILEPATH "C++ compiler. Prefer to use an openmpi wrapper.") +set(MOREFEM_DO_SANITIZE False CACHE BOOL "If true, sanitizer options -fsanitize=address, -fsanitize=memory and -fno-omit-frame-pointer are added.") set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard; at least 17 is expected.") set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "Leave this one active.") diff --git a/cmake/PreCache/macos_clang_static.cmake b/cmake/PreCache/macos_clang_static.cmake index 91dbe34f70..40eab811c9 100644 --- a/cmake/PreCache/macos_clang_static.cmake +++ b/cmake/PreCache/macos_clang_static.cmake @@ -5,6 +5,8 @@ set(MOREFEM_THIRD_PARTY_LIBRARIES_DIR /Users/Shared/LibraryVersions/clang) set(CMAKE_C_COMPILER ${MOREFEM_THIRD_PARTY_LIBRARIES_DIR}/Openmpi/bin/mpicc CACHE FILEPATH "C compiler. Prefer to use an openmpi wrapper.") set(CMAKE_CXX_COMPILER ${MOREFEM_THIRD_PARTY_LIBRARIES_DIR}/Openmpi/bin/mpic++ CACHE FILEPATH "C++ compiler. Prefer to use an openmpi wrapper.") +set(MOREFEM_DO_SANITIZE False CACHE BOOL "If true, sanitizer options -fsanitize=address, -fsanitize=memory and -fno-omit-frame-pointer are added.") + set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard; at least 17 is expected.") set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "Leave this one active.") set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "If ON you might be using gnu++17; with OFF you'll use c++17.") diff --git a/cmake/PreCache/macos_clang_static_several_lib.cmake b/cmake/PreCache/macos_clang_static_several_lib.cmake index 1f947e268e..b5fe4f489a 100644 --- a/cmake/PreCache/macos_clang_static_several_lib.cmake +++ b/cmake/PreCache/macos_clang_static_several_lib.cmake @@ -9,6 +9,8 @@ set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard; at least 17 is expected.") set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "Leave this one active.") set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "If ON you might be using gnu++17; with OFF you'll use c++17.") +set(MOREFEM_DO_SANITIZE False CACHE BOOL "If true, sanitizer options -fsanitize=address, -fsanitize=memory and -fno-omit-frame-pointer are added.") + set(LIBRARY_TYPE STATIC CACHE BOOL "Choose either STATIC or SHARED.") set(BUILD_MOREFEM_UNIQUE_LIBRARY False CACHE BOOL "Whether a unique library is built for MoReFEM core libraries or on the contrary if it is splitted in modules.") diff --git a/cmake/PreCache/macos_llvm-clang_static.cmake b/cmake/PreCache/macos_llvm-clang_static.cmake index e95b712432..bd7582a275 100644 --- a/cmake/PreCache/macos_llvm-clang_static.cmake +++ b/cmake/PreCache/macos_llvm-clang_static.cmake @@ -5,6 +5,8 @@ set(MOREFEM_THIRD_PARTY_LIBRARIES_DIR /Users/Shared/LibraryVersions/llvm-clang) set(CMAKE_C_COMPILER ${MOREFEM_THIRD_PARTY_LIBRARIES_DIR}/Openmpi/bin/mpicc CACHE FILEPATH "C compiler. Prefer to use an openmpi wrapper.") set(CMAKE_CXX_COMPILER ${MOREFEM_THIRD_PARTY_LIBRARIES_DIR}/Openmpi/bin/mpic++ CACHE FILEPATH "C++ compiler. Prefer to use an openmpi wrapper.") +set(MOREFEM_DO_SANITIZE False CACHE BOOL "If true, sanitizer options -fsanitize=address, -fsanitize=memory and -fno-omit-frame-pointer are added.") + set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard; at least 17 is expected.") set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "Leave this one active.") set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "If ON you might be using gnu++17; with OFF you'll use c++17.") -- GitLab