From eff59695536c4a0561af9911e09d1051d930673f Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 4 May 2018 14:54:22 +0300 Subject: [PATCH 1/9] MUL-1398: CI memory sanitizer Added option MULTY_TEST_WITH_MEMORY_SANITIZER that enables Clang-based memory sanitizer for multy_test; Added TravisCI matrix builds to execute tests build with memory sanitization. --- .travis.yml | 26 +++++++++++++++++++++++++- CMakeLists.txt | 6 ++++-- multy_test/CMakeLists.txt | 15 +++++++++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 293842d..0d6a154 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,6 +54,30 @@ matrix: - MATRIX_EVAL="CC=clang && CXX=clang++" - BUILD_TYPE=Release + - os: linux + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-5 + env: + - MATRIX_EVAL="CC=clang && CXX=clang++" + - BUILD_TYPE=Release + - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 + + - os: linux + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-5 + env: + - MATRIX_EVAL="CC=clang && CXX=clang++" + - BUILD_TYPE=Debug + - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 + - language: android jdk: oraclejdk8 os: linux @@ -130,6 +154,6 @@ before_script: script: - mkdir build && cd build - - cmake .. -G'Unix Makefiles' -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DMULTY_MORE_WARNINGS=ON -DMULTY_TEST_DISABLE_DEATH_TESTS=ON -DMULTY_WARNINGS_AS_ERRORS=ON -DMULTY_WITH_TESTS=ON -DMULTY_WITH_TEST_APP=ON + - cmake .. -G'Unix Makefiles' -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DMULTY_MORE_WARNINGS=ON -DMULTY_TEST_DISABLE_DEATH_TESTS=ON -DMULTY_WARNINGS_AS_ERRORS=ON -DMULTY_WITH_TESTS=ON -DMULTY_WITH_TEST_APP=ON ${EXTRA_CMAKE_OPTIONS} - cmake --build . --target all - ./multy diff --git a/CMakeLists.txt b/CMakeLists.txt index 6fe71c4..f91f8b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,15 +7,17 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) # General options -option(MULTY_WITH_TESTS "Build multy_test library" NO) option(MULTY_MORE_WARNINGS "More warnings" OFF) option(MULTY_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF) option(MULTY_ENABLE_SIMULATE_ERROR "Enable simulating errors in multy_core, see THROW_IF_WALLY_ERROR for details." OFF) # This is a standard CMake option, but we are putting it here to emphasise. option(BUILD_SHARED_LIBS "Build as shared libraries." OFF) +option(MULTY_FORCE_ENABLE_ERROR_BACKTRACE "Force collecting backtrace for Release builds." OFF) + +# Tests options option(MULTY_WITH_TEST_APP "Build sample app that runs the tests (consider MULTY_WITH_TESTS)." OFF) option(MULTY_TEST_DISABLE_DEATH_TESTS "Explicitly disable death tests." ON) -option(MULTY_FORCE_ENABLE_ERROR_BACKTRACE "Force collecting backtrace for Release builds." OFF) +option(MULTY_TEST_WITH_MEMORY_SANITIZER "Enable memory sanitizer for multy_test." OFF) project(multy C CXX) diff --git a/multy_test/CMakeLists.txt b/multy_test/CMakeLists.txt index 72a89e2..a943c4a 100644 --- a/multy_test/CMakeLists.txt +++ b/multy_test/CMakeLists.txt @@ -71,6 +71,21 @@ target_link_libraries( libwally-core ) +if (MULTY_TEST_WITH_MEMORY_SANITIZER) + target_compile_options( + multy_test + PUBLIC + -fsanitize=address -fno-omit-frame-pointer + -fsanitize=undefined + ) + + target_link_libraries( + multy_test + PUBLIC + $<$:-fsanitize=address> + ) +endif() + if (MULTY_TEST_DISABLE_DEATH_TESTS) target_compile_definitions(multy_test PRIVATE MULTY_TEST_DISABLE_DEATH_TESTS) message("DEATH tests disabled.") From 41dd254319f7da061b3900ce02bbeafc48d38387 Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 4 May 2018 15:16:55 +0300 Subject: [PATCH 2/9] Building on Mac and not on Linux --- .travis.yml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0d6a154..ce081fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,27 +54,13 @@ matrix: - MATRIX_EVAL="CC=clang && CXX=clang++" - BUILD_TYPE=Release - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 + - os: osx env: - - MATRIX_EVAL="CC=clang && CXX=clang++" - BUILD_TYPE=Release - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 + - os: osx env: - - MATRIX_EVAL="CC=clang && CXX=clang++" - BUILD_TYPE=Debug - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 From 2eb6f0ab2937ddc55d1a3e6b67e0ef1c0b5ed530 Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 4 May 2018 16:33:46 +0300 Subject: [PATCH 3/9] Fix --- multy_test/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/multy_test/CMakeLists.txt b/multy_test/CMakeLists.txt index a943c4a..269a5a6 100644 --- a/multy_test/CMakeLists.txt +++ b/multy_test/CMakeLists.txt @@ -76,13 +76,12 @@ if (MULTY_TEST_WITH_MEMORY_SANITIZER) multy_test PUBLIC -fsanitize=address -fno-omit-frame-pointer - -fsanitize=undefined ) target_link_libraries( multy_test PUBLIC - $<$:-fsanitize=address> + -fsanitize=address ) endif() From 385c1bf1bde5de02e520b12ba9a738b1cfbd53e4 Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 4 May 2018 17:30:13 +0300 Subject: [PATCH 4/9] ASAN_OPTIONS=detect_container_overflow=0 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ce081fd..92d6c7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -63,6 +63,7 @@ matrix: env: - BUILD_TYPE=Debug - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 + - MATRIX_EVAL="export ASAN_OPTIONS=detect_container_overflow=0" - language: android jdk: oraclejdk8 From 31253f264128f791018863cad14f73fa3d30102a Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 4 May 2018 17:42:24 +0300 Subject: [PATCH 5/9] fix --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 92d6c7e..fcd3b83 100644 --- a/.travis.yml +++ b/.travis.yml @@ -63,7 +63,7 @@ matrix: env: - BUILD_TYPE=Debug - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 - - MATRIX_EVAL="export ASAN_OPTIONS=detect_container_overflow=0" + - MATRIX_EVAL="ASAN_OPTIONS=detect_container_overflow=0" - language: android jdk: oraclejdk8 From 5e00d85eae21f3fbf697ae31d84f83f6f95604ce Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 18 May 2018 15:00:11 +0300 Subject: [PATCH 6/9] Exporting ASAN options --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fcd3b83..92d6c7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -63,7 +63,7 @@ matrix: env: - BUILD_TYPE=Debug - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 - - MATRIX_EVAL="ASAN_OPTIONS=detect_container_overflow=0" + - MATRIX_EVAL="export ASAN_OPTIONS=detect_container_overflow=0" - language: android jdk: oraclejdk8 From 4ee69a15c9491723909d371dd0ace50b1e5495de Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 18 May 2018 15:18:24 +0300 Subject: [PATCH 7/9] Logging stuff. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 92d6c7e..d39b241 100644 --- a/.travis.yml +++ b/.travis.yml @@ -138,6 +138,7 @@ matrix: before_script: - eval "${MATRIX_EVAL}" + - echo "ASAN_OPTIONS: $ASAN_OPTIONS" script: - mkdir build && cd build From afe3394f012e77e191ad4f82ad4d9b2cef663ab6 Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 1 Jun 2018 17:16:18 +0300 Subject: [PATCH 8/9] Reduced scope to speed up testing. --- .travis.yml | 91 +++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/.travis.yml b/.travis.yml index d39b241..46994e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,54 +10,49 @@ os: matrix: fast_finish: true include: - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" - - BUILD_TYPE=Debug - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" - - BUILD_TYPE=Release - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=clang && CXX=clang++" - - BUILD_TYPE=Debug - - - os: linux - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - env: - - MATRIX_EVAL="CC=clang && CXX=clang++" - - BUILD_TYPE=Release - - - os: osx - env: - - BUILD_TYPE=Release - - EXTRA_CMAKE_OPTIONS=-DMULTY_TEST_WITH_MEMORY_SANITIZER=1 + #- os: linux + #addons: + #apt: + #sources: + #- ubuntu-toolchain-r-test + #packages: + #- g++-5 + #env: + #- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" + #- BUILD_TYPE=Debug + + #- os: linux + #addons: + #apt: + #sources: + #- ubuntu-toolchain-r-test + #packages: + #- g++-5 + #env: + #- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" + #- BUILD_TYPE=Release + + #- os: linux + #addons: + #apt: + #sources: + #- ubuntu-toolchain-r-test + #packages: + #- g++-5 + #env: + #- MATRIX_EVAL="CC=clang && CXX=clang++" + #- BUILD_TYPE=Debug + + #- os: linux + #addons: + #apt: + #sources: + #- ubuntu-toolchain-r-test + #packages: + #- g++-5 + #env: + #- MATRIX_EVAL="CC=clang && CXX=clang++" + #- BUILD_TYPE=Release - os: osx env: From cfe49f3cdbb7481bd4e3d8476406a5e9b848d35a Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Fri, 1 Jun 2018 17:20:17 +0300 Subject: [PATCH 9/9] Echo fix --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 46994e0..bd9f12e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -133,7 +133,6 @@ matrix: before_script: - eval "${MATRIX_EVAL}" - - echo "ASAN_OPTIONS: $ASAN_OPTIONS" script: - mkdir build && cd build