diff --git a/.travis.yml b/.travis.yml index ecd05ad492e..d8142a08ff1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -241,6 +241,27 @@ jobs: - COMPILER="ccache g++" script: echo "This is coverity build. No need for tests." + - stage: Extended checks + env: + - NAME="sanitized build" + if: type = cron + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - libc++-dev + os: linux + compiler: clang + cache: ccache + install: + - ccache -z + - ccache --max-size=1G + - cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Sanitized -DCMAKE_CXX_COMPILER="clang++" -DCMAKE_CXX_FLAGS="-Wno-error=unused-command-line-argument -stdlib=libc++" + - cmake --build build -- -j4 + script: (cd build; ctest -j2 -V -L CORE) + + allow_failures: - <<: *formatting-stage - <<: *linter-stage diff --git a/CMakeLists.txt b/CMakeLists.txt index 81f847e4105..844b904a47c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 3.2) +include(cmake/set_up_configs.cmake) + find_program(CCACHE_PROGRAM ccache) if(CCACHE_PROGRAM) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") diff --git a/cmake/set_up_configs.cmake b/cmake/set_up_configs.cmake new file mode 100644 index 00000000000..5d390b14948 --- /dev/null +++ b/cmake/set_up_configs.cmake @@ -0,0 +1,10 @@ +if(NOT CONFIGURATIONS_HAVE_BEEN_SET_UP) + set(CONFIGURATIONS_HAVE_BEEN_SET_UP true) + set(build_types_string "Debug;Release;RelWithDebInfo;Sanitized;LibCPPDebug") + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Choose the type of build") + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${build_types_string}") + set(CMAKE_CONFIGURATION_TYPES "${build_types_string}" CACHE STRING "" FORCE) + + set(CMAKE_CXX_FLAGS_SANITIZED "-fsanitize=address,undefined") + set(CMAKE_CXX_FLAGS_LIBCPPDEBUG "-D_LIBCPP_DEBUG=1 -D_GLIBCXX_DEBUG") +endif()