]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: refactor -fsanitize=... options
authorKefu Chai <kchai@redhat.com>
Fri, 13 Oct 2017 05:34:09 +0000 (13:34 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 13 Oct 2017 06:32:32 +0000 (14:32 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
CMakeLists.txt

index fc3b73a78caf592906be752d814fb4b0e58c42e3..a5ddc3455f82015455c8e70e2e785ed4fee85e57 100644 (file)
@@ -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