From 6e9af3c5dce22a0822f655b4d1ea05bac6f7232a Mon Sep 17 00:00:00 2001 From: Rui Abreu Ferreira Date: Mon, 1 Dec 2014 10:25:40 +0000 Subject: Don't use env vars for configuration time options - As a general rule of thumb one shouldn't use environment variables for setting configuration options for CMake. The reason for this is we don't know when CMake will be executed and re-evaluate that variable. - e.g. If we run cmake a first time with a var set, and then run make on a second session (with no var) and cmake is called because a dependency changed, the option would be disabled - This commit removes the use of environment vars from src/nvim/CMakeLists.txt entirely - Removed SKIP_UNITTEST since it could only be used to remove a target at configuration time (and the target was optional anyway) - Turned SANITIZE into an option, clang-asan.sh now passes cmake -DSANITIZE=ON - Removed SKIP_EXEC since it was disabling a target at configuration time (not being used) --- .ci/clang-asan.sh | 4 +--- src/nvim/CMakeLists.txt | 19 ++++++++----------- src/nvim/po/CMakeLists.txt | 3 +-- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/.ci/clang-asan.sh b/.ci/clang-asan.sh index b1909ea689..9cc2ad12ad 100644 --- a/.ci/clang-asan.sh +++ b/.ci/clang-asan.sh @@ -25,18 +25,16 @@ symbolizer=/usr/local/clang-$clang_version/bin/llvm-symbolizer setup_prebuilt_deps x64 -export SANITIZE=1 export ASAN_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 SKIP_UNITTEST=1 export UBSAN_OPTIONS="log_path=$tmpdir/ubsan" # not sure if this works CMAKE_EXTRA_FLAGS="-DTRAVIS_CI_BUILD=ON -DUSE_GCOV=ON" # Build and output version info. -$MAKE_CMD CMAKE_EXTRA_FLAGS="$CMAKE_EXTRA_FLAGS" nvim +$MAKE_CMD CMAKE_EXTRA_FLAGS="$CMAKE_EXTRA_FLAGS -DSANITIZE=ON" nvim build/bin/nvim --version # Run functional tests. diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 184bcc0548..b0618fc69a 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -94,8 +94,9 @@ endforeach() set_source_files_properties( ${CONV_SOURCES} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-conversion") +option(SANITIZE "Enable sanitizers when using Clang" OFF) if(CMAKE_C_COMPILER_ID MATCHES "Clang") - if(DEFINED ENV{SANITIZE}) + if(SANITIZE) message(STATUS "Enabling the sanitizers") add_definitions(-DEXITFREE) # is this necessary for LeakSanitizer? add_definitions(-fno-sanitize-recover -fno-omit-frame-pointer @@ -197,17 +198,13 @@ list(APPEND NVIM_LINK_LIBRARIES m ${CMAKE_THREAD_LIBS_INIT}) -if(NOT DEFINED ENV{SKIP_EXEC}) - add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} - ${NEOVIM_HEADERS}) - target_link_libraries(nvim ${NVIM_LINK_LIBRARIES}) - install_helper(TARGETS nvim) -endif() +add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} + ${NEOVIM_HEADERS}) +target_link_libraries(nvim ${NVIM_LINK_LIBRARIES}) +install_helper(TARGETS nvim) -if(NOT DEFINED ENV{SKIP_UNITTEST}) - add_library(nvim-test MODULE EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES} +add_library(nvim-test MODULE EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} ${NEOVIM_HEADERS}) - target_link_libraries(nvim-test ${NVIM_LINK_LIBRARIES}) -endif() +target_link_libraries(nvim-test ${NVIM_LINK_LIBRARIES}) add_subdirectory(po) diff --git a/src/nvim/po/CMakeLists.txt b/src/nvim/po/CMakeLists.txt index 6a56e302e9..443f3c6595 100644 --- a/src/nvim/po/CMakeLists.txt +++ b/src/nvim/po/CMakeLists.txt @@ -2,8 +2,7 @@ find_package(Gettext) find_program(XGETTEXT_PRG xgettext) find_program(ICONV_PRG iconv) -if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG AND - NOT DEFINED ENV{SKIP_EXEC}) +if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG) set(ENV{OLD_PO_FILE_INPUT} yes) set(ENV{OLD_PO_FILE_OUTPUT} yes) -- cgit From 823a7ae61a5907773a414aca94285519d7d8dabb Mon Sep 17 00:00:00 2001 From: Rui Abreu Ferreira Date: Mon, 1 Dec 2014 23:18:34 +0000 Subject: Only use SANITIZE for nvim target - Clang's Address Sanitizer options may cause problems when running the unit tests, restrict the use of these options to the nvim target. --- src/nvim/CMakeLists.txt | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index b0618fc69a..28f2b065fb 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -94,20 +94,6 @@ endforeach() set_source_files_properties( ${CONV_SOURCES} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-conversion") -option(SANITIZE "Enable sanitizers when using Clang" OFF) -if(CMAKE_C_COMPILER_ID MATCHES "Clang") - if(SANITIZE) - message(STATUS "Enabling the sanitizers") - add_definitions(-DEXITFREE) # is this necessary for LeakSanitizer? - add_definitions(-fno-sanitize-recover -fno-omit-frame-pointer - -fno-optimize-sibling-calls -fsanitize=address -fsanitize=undefined) - set(CMAKE_EXE_LINKER_FLAGS - "-fsanitize=address -fsanitize=undefined ${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS - "-fsanitize=address -fsanitize=undefined ${CMAKE_SHARED_LINKER_FLAGS}") - endif() -endif() - get_directory_property(gen_cdefs COMPILE_DEFINITIONS) foreach(gen_cdef ${gen_cdefs}) set(gen_cflags "${gen_cflags} -D${gen_cdef}") @@ -203,6 +189,16 @@ add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} target_link_libraries(nvim ${NVIM_LINK_LIBRARIES}) install_helper(TARGETS nvim) +option(SANITIZE "Enable sanitizers when using Clang" OFF) +if(CMAKE_C_COMPILER_ID MATCHES "Clang") + if(SANITIZE) + message(STATUS "Enabling the sanitizers") + 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 ") + endif() +endif() + add_library(nvim-test MODULE EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} ${NEOVIM_HEADERS}) target_link_libraries(nvim-test ${NVIM_LINK_LIBRARIES}) -- cgit From 22f30cfca08a01008d33b19343cec97f2a64f106 Mon Sep 17 00:00:00 2001 From: Rui Abreu Ferreira Date: Tue, 2 Dec 2014 16:21:26 +0000 Subject: When SANITIZE=ON headers need -DEXITFREE --- src/nvim/CMakeLists.txt | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 28f2b065fb..f84594f969 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -1,5 +1,10 @@ include(CheckLibraryExists) +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) +endif() + set(GENERATED_DIR ${PROJECT_BINARY_DIR}/src/nvim/auto) set(DISPATCH_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/msgpack-gen.lua) file(GLOB API_HEADERS api/*.h) @@ -106,6 +111,10 @@ endforeach() string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type) set(gen_cflags "${gen_cflags} ${CMAKE_C_FLAGS_${build_type}} ${CMAKE_C_FLAGS}") +if (SANITIZE) + set(gen_cflags "${gen_cflags} -DEXITFREE") +endif() + foreach(sfile ${NEOVIM_SOURCES} "${PROJECT_SOURCE_DIR}/src/nvim/regexp_nfa.c") get_filename_component(full_d ${sfile} PATH) @@ -189,14 +198,11 @@ add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} target_link_libraries(nvim ${NVIM_LINK_LIBRARIES}) install_helper(TARGETS nvim) -option(SANITIZE "Enable sanitizers when using Clang" OFF) -if(CMAKE_C_COMPILER_ID MATCHES "Clang") - if(SANITIZE) - message(STATUS "Enabling the sanitizers") - 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 ") - endif() +if(SANITIZE) + message(STATUS "Enabling Clang sanitizers 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 ") endif() add_library(nvim-test MODULE EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES} -- cgit