From 7d37e64b165ff1bb206cc334fe00edee698f4d25 Mon Sep 17 00:00:00 2001 From: saipubw Date: Wed, 5 Feb 2025 16:04:51 +0800 Subject: [PATCH] add tsan ci (#893) --- .github/workflows/bazel_gcc.yml | 24 ----------------- .github/workflows/ubuntu_clang.yml | 14 +++++----- .github/workflows/ubuntu_gcc.yml | 41 ------------------------------ cmake/develop.cmake | 23 +++++++++++++---- cmake/utils.cmake | 15 +++++++++++ 5 files changed, 39 insertions(+), 78 deletions(-) delete mode 100644 .github/workflows/bazel_gcc.yml diff --git a/.github/workflows/bazel_gcc.yml b/.github/workflows/bazel_gcc.yml deleted file mode 100644 index b14577e8ac..0000000000 --- a/.github/workflows/bazel_gcc.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Bazel-GCC - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-22.04 - - steps: - - uses: actions/checkout@v2 - - - - name: Build - working-directory: ${{github.workspace}} - run: bazel build --config=gcc-cl ... - - - name: Test - working-directory: ${{github.workspace}} - run: bazel test --config=gcc-cl --test_output=errors ... diff --git a/.github/workflows/ubuntu_clang.yml b/.github/workflows/ubuntu_clang.yml index 13f2e79ec6..d466417454 100644 --- a/.github/workflows/ubuntu_clang.yml +++ b/.github/workflows/ubuntu_clang.yml @@ -56,12 +56,12 @@ jobs: working-directory: ${{github.workspace}}/build run: ctest -C ${{matrix.mode}} -j 1 -V - ubuntu_clang_pb: + ubuntu_clang_tsan: strategy: matrix: mode: [ Release, Debug ] libcxx: [ OFF ] - ssl: [ ON, OFF ] + ssl: [ ON ] runs-on: ubuntu-22.04 @@ -72,7 +72,6 @@ jobs: - name: Install Dependencies run: | sudo apt-get install openssl libssl-dev - sudo apt-get install libprotobuf-dev protobuf-compiler libprotoc-dev - name: Install ninja-build tool uses: seanmiddleditch/gha-setup-ninja@v3 @@ -85,9 +84,6 @@ jobs: chmod +x ./llvm.sh sudo ./llvm.sh 17 - - name: Check protoc - run: protoc --version - - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: @@ -98,13 +94,15 @@ jobs: cmake -B ${{github.workspace}}/build -G Ninja \ -DCMAKE_BUILD_TYPE=${{matrix.mode}} -DBUILD_WITH_LIBCXX=${{matrix.libcxx}} -DYLT_ENABLE_SSL=${{matrix.ssl}} \ -DUSE_CCACHE=${{env.ccache}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17\ - -DBUILD_CORO_HTTP=OFF -DBUILD_CORO_IO=OFF -DBUILD_STRUCT_PB=ON -DBUILD_CORO_RPC=OFF -DBUILD_EASYLOG=OFF -DBUILD_STRUCT_JSON=OFF -DBUILD_STRUCT_XML=OFF -DBUILD_STRUCT_YAML=OFF -DBUILD_UTIL=OFF + -DENABLE_TSAN=ON - name: Build run: cmake --build ${{github.workspace}}/build --config ${{matrix.mode}} - name: Test working-directory: ${{github.workspace}}/build - run: ctest -C ${{matrix.mode}} -j 1 -V + run: | + export TSAN_OPTIONS="halt_on_error=1" + ctest -C ${{matrix.mode}} -j 1 -V ubuntu_clang_for_liburing: strategy: diff --git a/.github/workflows/ubuntu_gcc.yml b/.github/workflows/ubuntu_gcc.yml index e83f413395..8caf389271 100644 --- a/.github/workflows/ubuntu_gcc.yml +++ b/.github/workflows/ubuntu_gcc.yml @@ -48,47 +48,6 @@ jobs: working-directory: ${{github.workspace}}/build run: ctest -C ${{matrix.mode}} -j 1 -V - ubuntu_gcc_pb: - strategy: - matrix: - mode: [ Debug ] #[Release, Debug] - ssl: [ ON, OFF ] - runs-on: ubuntu-22.04 - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Dependencies - run: | - sudo apt-get install openssl libssl-dev - sudo apt-get install libprotobuf-dev protobuf-compiler libprotoc-dev - - name: Check protoc - run: protoc --version - - - name: Install ninja-build tool - uses: seanmiddleditch/gha-setup-ninja@v3 - - - name: ccache - uses: hendrikmuhs/ccache-action@v1.2 - with: - key: ${{ github.job }}-${{ matrix.mode}}-ssl( ${{ matrix.ssl}} ) - - - name: Configure - run: | - CXX=g++ CC=gcc - cmake -B ${{github.workspace}}/build -G Ninja \ - -DCMAKE_BUILD_TYPE=${{matrix.mode}} -DBUILD_WITH_LIBCXX=${{matrix.libcxx}} -DYLT_ENABLE_SSL=${{matrix.ssl}} \ - -DUSE_CCACHE=${{env.ccache}} \ - -DBUILD_CORO_HTTP=OFF -DBUILD_CORO_IO=OFF -DBUILD_STRUCT_PB=ON -DBUILD_CORO_RPC=OFF -DBUILD_EASYLOG=OFF -DBUILD_STRUCT_JSON=OFF -DBUILD_STRUCT_XML=OFF -DBUILD_STRUCT_YAML=OFF -DBUILD_UTIL=OFF - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{matrix.mode}} - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{matrix.mode}} -j 1 -V - ubuntu_gcc_for_liburing: strategy: matrix: diff --git a/cmake/develop.cmake b/cmake/develop.cmake index 74c1cb5eec..9bd1adcc2b 100644 --- a/cmake/develop.cmake +++ b/cmake/develop.cmake @@ -37,13 +37,26 @@ message(STATUS "CORO_RPC_USE_OTHER_RPC: ${CORO_RPC_USE_OTHER_RPC}") # Enable address sanitizer option(ENABLE_SANITIZER "Enable sanitizer(Debug+Gcc/Clang/AppleClang)" ON) +option(ENABLE_TSAN "Enable thread sanitizer" ON) + if(ENABLE_SANITIZER AND NOT MSVC) - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - check_asan(HAS_ASAN) - if(HAS_ASAN) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") + if (ENABLE_TSAN) + ## thread sanitizer + check_tsan(HAS_TSAN) + if(HAS_TSAN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread") else() - message(WARNING "sanitizer is no supported with current tool-chains") + message(WARNING "thread sanitizer is no supported with current tool-chains") + endif() + else() + ## address santizer + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + check_asan(HAS_ASAN) + if(HAS_ASAN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") + else() + message(WARNING "address sanitizer is no supported with current tool-chains") + endif() endif() endif() endif() diff --git a/cmake/utils.cmake b/cmake/utils.cmake index f44bca457c..e680894657 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -22,6 +22,21 @@ int main() { return 0; } +]====] + ${_RESULT} + ) + unset(CMAKE_REQUIRED_FLAGS) +endmacro() + +macro(check_tsan _RESULT) + include(CheckCXXSourceRuns) + set(CMAKE_REQUIRED_FLAGS "-fsanitize=thread") + check_cxx_source_runs( + [====[ +int main() +{ + return 0; +} ]====] ${_RESULT} )