| name: CI Linux Static Sanitized | |
| on: | |
| push: | |
| pull_request: | |
| paths: | |
| - ".github/actions/**" | |
| - ".github/workflows/ci-unix-static-sanitized.yml" | |
| - "**CMakeLists.txt" | |
| - "cmake/**" | |
| - "ext/**" | |
| permissions: | |
| contents: read | |
| jobs: | |
| build-static-local-sanitized: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Memory sanitizer needs to be in its own file because it is slower than other sanitizers. | |
| sanitizer: [address, thread, undefined] | |
| env: | |
| CC: clang | |
| CXX: clang++ | |
| name: build-static-local-sanitized-${{ matrix.sanitizer }} (ubuntu) | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: ./.github/actions/setup-linux | |
| id: setup_linux | |
| with: | |
| codec-aom: "LOCAL" | |
| codec-dav1d: "LOCAL" | |
| extra-cache-key: ${{ matrix.sanitizer }} | |
| libjpeg-turbo: "SYSTEM" | |
| libyuv: "LOCAL" | |
| zlibpng: "SYSTEM" | |
| - id: cache-hit | |
| run: echo "hit=${{ steps.setup_linux.outputs.ext-cache-hit == 'true' }}" >> "$GITHUB_OUTPUT" | |
| - name: Set FLAGS for sanitizers | |
| run: | | |
| echo "CI_CFLAGS=-fsanitize=${{ matrix.sanitizer }}" >> $GITHUB_ENV | |
| echo "CI_CXXFLAGS=-fsanitize=${{ matrix.sanitizer }}" >> $GITHUB_ENV | |
| echo "CI_LDFLAGS=-fsanitize=${{ matrix.sanitizer }}" >> $GITHUB_ENV | |
| echo "CI_LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> $GITHUB_ENV | |
| - name: Build aom | |
| if: ${{ steps.cache-hit.outputs.hit == 'false' }} | |
| working-directory: ./ext | |
| run: | | |
| sed -i -e 's/cmake -G \(.*\)/cmake -G \1 -DSANITIZE=${{ matrix.sanitizer }}/g' aom.cmd | |
| ./aom.cmd | |
| env: | |
| CFLAGS: ${{ env.CI_CFLAGS }} | |
| CXXFLAGS: ${{ env.CI_CXXFLAGS }} | |
| LDFLAGS: ${{ env.CI_LDFLAGS }} | |
| - name: Prepare dav1d | |
| if: ${{ steps.cache-hit.outputs.hit == 'false' }} | |
| working-directory: ./ext | |
| run: | |
| sed -i -e 's/meson setup \(.*\)/meson setup \1 -Db_sanitize=${{ matrix.sanitizer }} -Db_lundef=false/g' dav1d.cmd | |
| - name: Build dav1d | |
| if: ${{ steps.cache-hit.outputs.hit == 'false' }} | |
| working-directory: ./ext | |
| run: | |
| ./dav1d.cmd | |
| env: | |
| CFLAGS: ${{ env.CI_CFLAGS }} | |
| CXXFLAGS: ${{ env.CI_CXXFLAGS }} | |
| LDFLAGS: ${{ env.CI_LDFLAGS }} | |
| - name: Prepare libavif (cmake) | |
| run: > | |
| cmake -G Ninja -S . -B build | |
| -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=OFF | |
| -DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL | |
| -DAVIF_LIBYUV=LOCAL -DAVIF_LIBSHARPYUV=LOCAL | |
| -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON | |
| -DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL | |
| env: | |
| CFLAGS: ${{ env.CI_CFLAGS }} | |
| CXXFLAGS: ${{ env.CI_CXXFLAGS }} | |
| LDFLAGS: ${{ env.CI_LDFLAGS }} | |
| - name: Build libavif | |
| run: cmake --build build --config Debug --parallel 4 | |
| - name: Run AVIF Tests | |
| working-directory: ./build | |
| run: ctest -j $(getconf _NPROCESSORS_ONLN) --output-on-failure | |
| env: | |
| ASAN_OPTIONS: allocator_may_return_null=1 | |
| TSAN_OPTIONS: allocator_may_return_null=1 | |
| LD_LIBRARY_PATH: ${{ env.CI_LD_LIBRARY_PATH }} |