• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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