name: build on: push: branches: [main] paths-ignore: - '**.md' - 'docs/**' - 'BENCHMARKS.md' - 'ROADMAP.md' - 'CHANGELOG.md' - 'LICENSE' - '.gitea/ISSUE_TEMPLATE/**' pull_request: branches: [main] jobs: cmake-build: name: cmake build (CUDA 12.4, Ubuntu 22.04) runs-on: ubuntu-22.04 container: image: nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04 steps: - name: Install build deps run: | export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y --no-install-recommends \ build-essential cmake ninja-build pkg-config git \ libavformat-dev libavcodec-dev libavutil-dev libswscale-dev \ ca-certificates - name: Checkout uses: actions/checkout@v4 - name: Configure (full — libcuframes + examples + tools) run: | cmake -B build -S . -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTING=OFF \ -DBUILD_EXAMPLES=ON \ -DBUILD_TOOLS=ON \ -DBUILD_FFMPEG_FILTER=OFF \ -DBUILD_PYTHON_BINDINGS=OFF - name: Build run: cmake --build build --parallel - name: Verify produced binaries + library run: | ls -la build/libcuframes/libcuframes.so* ls -la build/libcuframes/libcuframes_static.a ls -la build/tools/cuframes-rtsp-source/cuframes-rtsp-source ls -la build/examples/sub_count/sub_count ./build/tools/cuframes-rtsp-source/cuframes-rtsp-source --help | head -5 - name: Install + verify install layout run: | cmake --install build --prefix /tmp/cuframes-install test -f /tmp/cuframes-install/include/cuframes/cuframes.h test -f /tmp/cuframes-install/include/cuframes/cuframes.hpp test -f /tmp/cuframes-install/lib/libcuframes.so test -f /tmp/cuframes-install/lib/libcuframes_static.a filter-build: name: ffmpeg filter patch (out-of-tree) runs-on: ubuntu-22.04 container: image: nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04 needs: cmake-build steps: - name: Install build deps run: | export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y --no-install-recommends \ build-essential cmake ninja-build pkg-config git nasm \ libssl-dev libx264-dev libx265-dev libnuma-dev zlib1g-dev \ ca-certificates wget patch - name: Checkout uses: actions/checkout@v4 - name: Build libcuframes (для linking в patched ffmpeg) run: | cmake -B build -S . -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TOOLS=OFF cmake --build build --parallel cmake --install build --prefix /opt/cuframes - name: Clone FFmpeg n7.1 + apply patch run: | git clone --depth 1 --branch n7.1 https://github.com/FFmpeg/FFmpeg.git /src/ffmpeg cd /src/ffmpeg patch -p1 < $GITHUB_WORKSPACE/filter/ffmpeg-7.1-cuframes-demuxer.patch ls libavformat/cuframesdec.c - name: Configure FFmpeg (minimal + libcuframes) run: | cd /src/ffmpeg ./configure \ --prefix=/opt/ffmpeg \ --enable-libcuframes \ --extra-cflags="-I/opt/cuframes/include -I/usr/local/cuda/include" \ --extra-ldflags="-L/opt/cuframes/lib -L/usr/local/cuda/lib64" \ --extra-libs="-lcudart -lpthread -lrt -lm" \ --disable-x86asm --disable-everything \ --enable-demuxer=cuframes,rawvideo \ --enable-decoder=rawvideo \ --enable-muxer=null,rawvideo \ --enable-protocol=file --enable-ffmpeg \ --disable-doc --disable-htmlpages --disable-manpages \ --disable-podpages --disable-txtpages - name: Build FFmpeg run: | cd /src/ffmpeg make -j$(nproc) ffmpeg - name: Verify cuframes demuxer registered run: | export LD_LIBRARY_PATH=/opt/cuframes/lib /src/ffmpeg/ffmpeg -hide_banner -formats | grep cuframes /src/ffmpeg/ffmpeg -hide_banner -h demuxer=cuframes | head -10