CMake: Add option for Clang MSan.

This commit is contained in:
Florian Walch 2015-06-08 19:49:23 +03:00
parent 1d9501186c
commit bd9042b1a9
4 changed files with 29 additions and 11 deletions

View File

@ -2,8 +2,13 @@
sudo pip install cpp-coveralls
# Use custom Clang and enable ASAN on Linux.
# Use custom Clang and enable sanitizers on Linux.
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
if [ -z "$CLANG_SANITIZER" ]; then
echo "CLANG_SANITIZER not set."
exit 1
fi
clang_version=3.4.2
clang_suffix=x86_64-unknown-ubuntu12.04.xz
if [ ! -d /usr/local/clang-$clang_version ]; then
@ -15,13 +20,14 @@ if [ "$TRAVIS_OS_NAME" = "linux" ]; then
export CC=/usr/local/clang-$clang_version/bin/clang
symbolizer=/usr/local/clang-$clang_version/bin/llvm-symbolizer
export ASAN_SYMBOLIZER_PATH=$symbolizer
export MSAN_SYMBOLIZER_PATH=$symbolizer
export ASAN_OPTIONS="detect_leaks=1:log_path=$tmpdir/asan"
export TSAN_OPTIONS="external_symbolizer_path=$symbolizer:log_path=$tmpdir/tsan"
export UBSAN_OPTIONS="log_path=$tmpdir/ubsan" # not sure if this works
CMAKE_EXTRA_FLAGS="-DTRAVIS_CI_BUILD=ON \
-DUSE_GCOV=ON \
-DBUSTED_OUTPUT_TYPE=plainTerminal \
-DSANITIZE=ON"
-DCLANG_${CLANG_SANITIZER}=ON"
else
CMAKE_EXTRA_FLAGS="-DTRAVIS_CI_BUILD=ON \
-DUSE_GCOV=ON \

View File

@ -20,13 +20,16 @@ env:
# Force verification of DLOG macros.
- CFLAGS='-DMIN_LOG_LEVEL=0'
matrix:
- CI_TARGET=clang
- CI_TARGET=gcc
- CI_TARGET=gcc-32
- CI_TARGET=clint
- CI_TARGET=mingw
matrix:
include:
- os: linux
env: CI_TARGET=clang CLANG_SANITIZER=ASAN
- os: linux
env: CI_TARGET=clang CLANG_SANITIZER=MSAN
- os: osx
env: CI_TARGET=clang
compiler: clang

View File

@ -191,13 +191,18 @@ include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS})
find_package(LibVterm REQUIRED)
include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS})
option(SANITIZE "Enable Clang sanitizers for nvim binary" OFF)
if(SANITIZE AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
message(WARNING "SANITIZE is only supported for Clang, disabling")
set(SANITIZE OFF)
option(CLANG_ASAN "Enable Clang address sanitizer for nvim binary." OFF)
option(CLANG_MSAN "Enable Clang memory sanitizer for nvim binary." OFF)
if(CLANG_ASAN AND CLANG_MSAN)
message(FATAL_ERROR "CLANG_ASAN and CLANG_MSAN cannot be enabled simultaneously.")
endif()
if((CLANG_ASAN OR CLANG_MSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
message(FATAL_ERROR "Sanitizers are only supported for Clang.")
endif()
if(NOT SANITIZE)
if(CLANG_ASAN OR CLANG_MSAN)
message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
else()
find_package(JeMalloc)
if(JEMALLOC_FOUND)
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})

View File

@ -95,7 +95,7 @@ foreach(gen_cdef ${gen_cdefs} DO_NOT_DEFINE_EMPTY_ATTRIBUTES)
list(APPEND gen_cflags "-D${gen_cdef}")
endif()
endforeach()
if (SANITIZE)
if(CLANG_ASAN)
list(APPEND gen_cflags "-DEXITFREE")
endif()
@ -190,11 +190,15 @@ add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES}
target_link_libraries(nvim ${NVIM_EXEC_LINK_LIBRARIES})
install_helper(TARGETS nvim)
if(SANITIZE)
message(STATUS "Enabling Clang sanitizers for nvim")
if(CLANG_ASAN)
message(STATUS "Enabling Clang address sanitizer for nvim.")
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fno-sanitize-recover -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -fsanitize=undefined ")
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=address -fsanitize=undefined ")
elseif(CLANG_MSAN)
message(STATUS "Enabling Clang memory sanitizer for nvim.")
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -fno-optimize-sibling-calls ")
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins ")
endif()
add_library(libnvim STATIC EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES}