| name: CI Unix Static Sanitized |
| on: [ push, pull_request ] |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| build-static-sanitized: |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-latest, macos-latest] |
| sanitizer: [ address, thread, undefined ] # TODO(yguyon): Add memory |
| |
| env: |
| CC: clang |
| CXX: clang++ |
| |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| |
| - name: Setup cmake |
| uses: jwlawson/actions-setup-cmake@959f1116cf9f1ae42fff8ec1a4aaae6d4a0e348b # v2.0.1 |
| with: |
| # CMake version 3.17 is required to build libwebp (which libsharpyuv is part of) on macOS. |
| cmake-version: '3.17.x' |
| - uses: ilammy/setup-nasm@13cbeb366c45c4379d3478cdcbadd8295feb5028 # v1.5.1 |
| - uses: seanmiddleditch/gha-setup-ninja@8b297075da4cd2a5f1fd21fe011b499edf06e9d2 # v4 |
| - run: pip install meson |
| |
| - name: Cache external dependencies |
| id: cache-ext |
| uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1 |
| with: |
| path: ext |
| key: ${{ runner.os }}-${{ matrix.sanitizer }}-${{ hashFiles('ext/*.cmd') }} |
| |
| - name: Build aom |
| if: steps.cache-ext.outputs.cache-hit != 'true' |
| working-directory: ./ext |
| run: > |
| sed -i -e 's/cmake -G Ninja \(.*\) \.\./cmake -G Ninja \1 -DSANITIZE=${{ matrix.sanitizer }} ../g' aom.cmd |
| |
| ./aom.cmd |
| - name: Build dav1d |
| if: steps.cache-ext.outputs.cache-hit != 'true' |
| working-directory: ./ext |
| run: > |
| sed -i -e 's/meson setup \(.*\) \.\./meson setup \1 -Db_sanitize=${{ matrix.sanitizer }} -Db_lundef=false ../g' dav1d.cmd |
| |
| ./dav1d.cmd |
| - name: Build libyuv |
| if: steps.cache-ext.outputs.cache-hit != 'true' |
| working-directory: ./ext |
| run: ./libyuv.cmd |
| env: |
| CFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| CXXFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| LDFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| - name: Build libsharpyuv |
| if: steps.cache-ext.outputs.cache-hit != 'true' |
| working-directory: ./ext |
| run: ./libsharpyuv.cmd |
| env: |
| CFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| CXXFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| LDFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| - name: Build GoogleTest |
| if: steps.cache-ext.outputs.cache-hit != 'true' |
| working-directory: ./ext |
| # Note: "apt install googletest" is sometimes insufficient for find_package(GTest) so build in ext/ instead. |
| run: bash -e googletest.cmd |
| |
| - name: Prepare libavif (cmake) |
| run: > |
| cmake -S . -B build -G Ninja |
| -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_ENABLE_GTEST=ON -DAVIF_LOCAL_GTEST=ON |
| env: |
| CFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| CXXFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| LDFLAGS: -fsanitize=${{ matrix.sanitizer }} |
| - name: Build libavif (ninja) |
| working-directory: ./build |
| run: ninja |
| - 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 |