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