mirror of
https://github.com/neovim/neovim.git
synced 2025-10-18 07:41:51 +00:00
CMake: Add option for Clang TSan, rename option ASAN -> ASAN_UBSAN.
This commit is contained in:
@@ -22,7 +22,7 @@ if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
|||||||
export ASAN_SYMBOLIZER_PATH=$symbolizer
|
export ASAN_SYMBOLIZER_PATH=$symbolizer
|
||||||
export MSAN_SYMBOLIZER_PATH=$symbolizer
|
export MSAN_SYMBOLIZER_PATH=$symbolizer
|
||||||
export ASAN_OPTIONS="detect_leaks=1:log_path=$tmpdir/asan"
|
export ASAN_OPTIONS="detect_leaks=1:log_path=$tmpdir/asan"
|
||||||
export TSAN_OPTIONS="external_symbolizer_path=$symbolizer:log_path=$tmpdir/tsan"
|
export TSAN_OPTIONS="external_symbolizer_path=$symbolizer log_path=$tmpdir/tsan"
|
||||||
export UBSAN_OPTIONS="log_path=$tmpdir/ubsan" # not sure if this works
|
export UBSAN_OPTIONS="log_path=$tmpdir/ubsan" # not sure if this works
|
||||||
CMAKE_EXTRA_FLAGS="-DTRAVIS_CI_BUILD=ON \
|
CMAKE_EXTRA_FLAGS="-DTRAVIS_CI_BUILD=ON \
|
||||||
-DUSE_GCOV=ON \
|
-DUSE_GCOV=ON \
|
||||||
|
@@ -27,9 +27,11 @@ env:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: linux
|
- os: linux
|
||||||
env: CI_TARGET=clang CLANG_SANITIZER=ASAN
|
env: CI_TARGET=clang CLANG_SANITIZER=ASAN_UBSAN
|
||||||
- os: linux
|
- os: linux
|
||||||
env: CI_TARGET=clang CLANG_SANITIZER=MSAN
|
env: CI_TARGET=clang CLANG_SANITIZER=MSAN
|
||||||
|
- os: linux
|
||||||
|
env: CI_TARGET=clang CLANG_SANITIZER=TSAN
|
||||||
- os: osx
|
- os: osx
|
||||||
env: CI_TARGET=clang
|
env: CI_TARGET=clang
|
||||||
compiler: clang
|
compiler: clang
|
||||||
|
@@ -191,16 +191,21 @@ include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS})
|
|||||||
find_package(LibVterm REQUIRED)
|
find_package(LibVterm REQUIRED)
|
||||||
include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS})
|
include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS})
|
||||||
|
|
||||||
option(CLANG_ASAN "Enable Clang address sanitizer for nvim binary." OFF)
|
option(CLANG_ASAN_UBSAN "Enable Clang address & undefined behavior sanitizer for nvim binary." OFF)
|
||||||
option(CLANG_MSAN "Enable Clang memory sanitizer for nvim binary." OFF)
|
option(CLANG_MSAN "Enable Clang memory sanitizer for nvim binary." OFF)
|
||||||
if(CLANG_ASAN AND CLANG_MSAN)
|
option(CLANG_TSAN "Enable Clang thread sanitizer for nvim binary." OFF)
|
||||||
message(FATAL_ERROR "CLANG_ASAN and CLANG_MSAN cannot be enabled simultaneously.")
|
|
||||||
|
if((CLANG_ASAN_UBSAN AND CLANG_MSAN)
|
||||||
|
OR (CLANG_ASAN_UBSAN AND CLANG_TSAN)
|
||||||
|
OR (CLANG_MSAN AND CLANG_TSAN))
|
||||||
|
message(FATAL_ERROR "Sanitizers cannot be enabled simultaneously.")
|
||||||
endif()
|
endif()
|
||||||
if((CLANG_ASAN OR CLANG_MSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
||||||
|
if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
message(FATAL_ERROR "Sanitizers are only supported for Clang.")
|
message(FATAL_ERROR "Sanitizers are only supported for Clang.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CLANG_ASAN OR CLANG_MSAN)
|
if(CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN)
|
||||||
message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
|
message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
|
||||||
else()
|
else()
|
||||||
find_package(JeMalloc)
|
find_package(JeMalloc)
|
||||||
|
@@ -95,7 +95,7 @@ foreach(gen_cdef ${gen_cdefs} DO_NOT_DEFINE_EMPTY_ATTRIBUTES)
|
|||||||
list(APPEND gen_cflags "-D${gen_cdef}")
|
list(APPEND gen_cflags "-D${gen_cdef}")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
if(CLANG_ASAN)
|
if(CLANG_ASAN_UBSAN)
|
||||||
list(APPEND gen_cflags "-DEXITFREE")
|
list(APPEND gen_cflags "-DEXITFREE")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -190,8 +190,8 @@ add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES}
|
|||||||
target_link_libraries(nvim ${NVIM_EXEC_LINK_LIBRARIES})
|
target_link_libraries(nvim ${NVIM_EXEC_LINK_LIBRARIES})
|
||||||
install_helper(TARGETS nvim)
|
install_helper(TARGETS nvim)
|
||||||
|
|
||||||
if(CLANG_ASAN)
|
if(CLANG_ASAN_UBSAN)
|
||||||
message(STATUS "Enabling Clang address sanitizer for nvim.")
|
message(STATUS "Enabling Clang address sanitizer and undefined behavior sanitizer for nvim.")
|
||||||
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
|
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 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 ")
|
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=address -fsanitize=undefined ")
|
||||||
@@ -199,6 +199,10 @@ elseif(CLANG_MSAN)
|
|||||||
message(STATUS "Enabling Clang memory sanitizer for nvim.")
|
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 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 ")
|
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins ")
|
||||||
|
elseif(CLANG_TSAN)
|
||||||
|
message(STATUS "Enabling Clang thread sanitizer for nvim.")
|
||||||
|
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=thread ")
|
||||||
|
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=thread ")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(libnvim STATIC EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES}
|
add_library(libnvim STATIC EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES}
|
||||||
|
Reference in New Issue
Block a user