From 574943c472dbe719305e65b178a55d60fdfaa9e2 Mon Sep 17 00:00:00 2001 From: Yannis Guyon Date: Thu, 14 Mar 2024 11:13:09 +0100 Subject: [PATCH] ci-unix-static-sanitized --- .../workflows/ci-unix-static-sanitized.yml | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/workflows/ci-unix-static-sanitized.yml diff --git a/.github/workflows/ci-unix-static-sanitized.yml b/.github/workflows/ci-unix-static-sanitized.yml new file mode 100644 index 0000000000..8e489a9ebe --- /dev/null +++ b/.github/workflows/ci-unix-static-sanitized.yml @@ -0,0 +1,75 @@ +name: CI Unix Static Sanitized +on: [ push, pull_request ] + +permissions: + contents: read + +jobs: + build-static-sanitized: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sanitizer: [ undefined ] # TODO(yguyon): Add address, memory, thread + + 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 + with: + version: 2.15.05 + - 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: CC=clang CXX=clang++ CFLAGS=-fsanitize=${{ matrix.sanitizer }} CXXFLAGS=-fsanitize=${{ matrix.sanitizer }} LDFLAGS=-fsanitize=${{ matrix.sanitizer }} ./aom.cmd + - name: Build dav1d + if: steps.cache-ext.outputs.cache-hit != 'true' + working-directory: ./ext + run: > + sed -i 's/meson setup \(.*\) \.\./meson setup \1 '"-Db_sanitize=${{ matrix.sanitizer }} -Db_lundef=false"' ../g' ./dav1d.cmd + + CC=clang CXX=clang++ ./dav1d.cmd + - name: Build libyuv + if: steps.cache-ext.outputs.cache-hit != 'true' + working-directory: ./ext + run: CC=clang CXX=clang++ CFLAGS=-fsanitize=${{ matrix.sanitizer }} CXXFLAGS=-fsanitize=${{ matrix.sanitizer }} LDFLAGS=-fsanitize=${{ matrix.sanitizer }} ./libyuv.cmd + - name: Build libsharpyuv + if: steps.cache-ext.outputs.cache-hit != 'true' + working-directory: ./ext + run: CC=clang CXX=clang++ CFLAGS=-fsanitize=${{ matrix.sanitizer }} CXXFLAGS=-fsanitize=${{ matrix.sanitizer }} LDFLAGS=-fsanitize=${{ matrix.sanitizer }} ./libsharpyuv.cmd + - 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: > + CC=clang CXX=clang++ CFLAGS=-fsanitize=${{ matrix.sanitizer }} CXXFLAGS=-fsanitize=${{ matrix.sanitizer }} LDFLAGS=-fsanitize=${{ matrix.sanitizer }} + 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 + - name: Build libavif (ninja) + working-directory: ./build + run: ninja + - name: Run AVIF Tests + working-directory: ./build + # ASAN_OPTIONS=allocator_may_return_null=1 may be necessary for address sanitizer. + run: ctest -j $(getconf _NPROCESSORS_ONLN) --output-on-failure