From: Kefu Chai Date: Fri, 13 Oct 2017 05:34:09 +0000 (+0800) Subject: cmake: refactor -fsanitize=... options X-Git-Tag: v13.0.1~581^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=77ab5eb821b4befa76af9fd3ac34c5dfc823f2fa;p=ceph.git cmake: refactor -fsanitize=... options Signed-off-by: Kefu Chai --- diff --git a/CMakeLists.txt b/CMakeLists.txt index fc3b73a78ca..a5ddc3455f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -492,14 +492,11 @@ option(WITH_ASAN "build with ASAN" OFF) 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() @@ -507,25 +504,28 @@ 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