1name: sanitizer 2 3on: 4 push: {} 5 pull_request: {} 6 7env: 8 UBSAN_OPTIONS: "print_stacktrace=1" 9 10jobs: 11 job: 12 name: ${{ matrix.sanitizer }}.${{ matrix.build_type }}.${{ matrix.compiler }} 13 runs-on: ubuntu-latest 14 strategy: 15 fail-fast: false 16 matrix: 17 build_type: ['Debug', 'RelWithDebInfo'] 18 sanitizer: ['asan', 'ubsan', 'tsan'] 19 compiler: ['clang', 'gcc'] 20 # TODO: add 'msan' above. currently failing and needs investigation. 21 steps: 22 - uses: actions/checkout@v2 23 24 - name: configure msan env 25 if: matrix.sanitizer == 'msan' 26 run: | 27 echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=memory -fsanitize-memory-track-origins" >> $GITHUB_ENV 28 echo "LIBCXX_SANITIZER=MemoryWithOrigins" >> $GITHUB_ENV 29 30 - name: configure ubsan env 31 if: matrix.sanitizer == 'ubsan' 32 run: | 33 echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=all" >> $GITHUB_ENV 34 echo "LIBCXX_SANITIZER=Undefined" >> $GITHUB_ENV 35 36 - name: configure asan env 37 if: matrix.sanitizer == 'asan' 38 run: | 39 echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=all" >> $GITHUB_ENV 40 echo "LIBCXX_SANITIZER=Address" >> $GITHUB_ENV 41 42 - name: configure tsan env 43 if: matrix.sanitizer == 'tsan' 44 run: | 45 echo "EXTRA_FLAGS=-g -O2 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all" >> $GITHUB_ENV 46 echo "LIBCXX_SANITIZER=Thread" >> $GITHUB_ENV 47 48 - name: configure clang 49 if: matrix.compiler == 'clang' 50 run: | 51 echo "CC=clang" >> $GITHUB_ENV 52 echo "CXX=clang++" >> $GITHUB_ENV 53 54 - name: configure gcc 55 if: matrix.compiler == 'gcc' 56 run: | 57 sudo apt update && sudo apt -y install gcc-10 g++-10 58 echo "CC=gcc-10" >> $GITHUB_ENV 59 echo "CXX=g++-10" >> $GITHUB_ENV 60 61 - name: install llvm stuff 62 if: matrix.compiler == 'clang' 63 run: | 64 "${GITHUB_WORKSPACE}/.github/.libcxx-setup.sh" 65 echo "EXTRA_CXX_FLAGS=\"-stdlib=libc++\"" >> $GITHUB_ENV 66 67 - name: create build environment 68 run: cmake -E make_directory ${{ runner.workspace }}/_build 69 70 - name: configure cmake 71 shell: bash 72 working-directory: ${{ runner.workspace }}/_build 73 run: > 74 cmake $GITHUB_WORKSPACE 75 -DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF 76 -DBENCHMARK_ENABLE_LIBPFM=OFF 77 -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON 78 -DCMAKE_C_COMPILER=${{ env.CC }} 79 -DCMAKE_CXX_COMPILER=${{ env.CXX }} 80 -DCMAKE_C_FLAGS="${{ env.EXTRA_FLAGS }}" 81 -DCMAKE_CXX_FLAGS="${{ env.EXTRA_FLAGS }} ${{ env.EXTRA_CXX_FLAGS }}" 82 -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} 83 84 - name: build 85 shell: bash 86 working-directory: ${{ runner.workspace }}/_build 87 run: cmake --build . --config ${{ matrix.build_type }} 88 89 - name: test 90 shell: bash 91 working-directory: ${{ runner.workspace }}/_build 92 run: ctest -C ${{ matrix.build_type }} -VV 93