From 025d54292ddf4e23bb742a9777c3bd55c1cdf613 Mon Sep 17 00:00:00 2001 From: Predidit <34627277+Predidit@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:23:18 +0800 Subject: [PATCH] feat: statically link dav1d --- .github/workflows/build.yaml | 8 +++++++- external/build | 2 ++ external/clean | 1 + external/scripts/dav1d-build | 4 ++++ external/scripts/dav1d-clean | 3 +++ external/scripts/dav1d-config | 30 ++++++++++++++++++++++++++++++ external/update | 4 ++++ external/use-dav1d-custom | 10 ++++++++++ 8 files changed, 61 insertions(+), 1 deletion(-) create mode 100755 external/scripts/dav1d-build create mode 100755 external/scripts/dav1d-clean create mode 100755 external/scripts/dav1d-config create mode 100755 external/use-dav1d-custom diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index bb7ea1b..7d44544 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -39,7 +39,7 @@ jobs: sudo apt update sudo apt install -y gcc g++ autoconf automake debhelper glslang-dev ladspa-sdk xutils-dev libasound2-dev \ libarchive-dev libbluray-dev libbs2b-dev libcaca-dev libcdio-paranoia-dev libdrm-dev \ - libdav1d-dev libdvdnav-dev libegl1-mesa-dev libepoxy-dev libfontconfig-dev libfreetype6-dev \ + libdvdnav-dev libegl1-mesa-dev libepoxy-dev libfontconfig-dev libfreetype6-dev \ libfribidi-dev libgl1-mesa-dev libgbm-dev libgme-dev libgsm1-dev libharfbuzz-dev libjpeg-dev \ libbrotli-dev liblcms2-dev libmodplug-dev libmp3lame-dev libopenal-dev \ libopus-dev libopencore-amrnb-dev libopencore-amrwb-dev libpulse-dev librtmp-dev \ @@ -125,6 +125,7 @@ jobs: ./use-uchardet-master ./use-rubberband-master ./use-libdisplay-info-master + ./use-dav1d-custom 1.5.4 ./use-ffmpeg-custom n7.1.5 ./use-libass-master ./use-libplacebo-custom 4c426e466814536def653cb23f1d1c287ea7a7f5 @@ -171,6 +172,11 @@ jobs: grep -q '^#define CONFIG_LIBDAV1D_DECODER 1$' ffmpeg_build/config_components.h ./mpv/build/mpv --no-config --vd=help > /tmp/mpv-video-decoders.txt 2>&1 grep -q libdav1d /tmp/mpv-video-decoders.txt + test -f build_libs/lib/libdav1d.a + if readelf -d mpv/build/libmpv.so.2 | grep -q 'NEEDED.*libdav1d\.so'; then + echo "libmpv.so.2 unexpectedly depends on shared libdav1d" + exit 1 + fi mkdir -p $GITHUB_WORKSPACE/artifacts cp -r mpv/build/* $GITHUB_WORKSPACE/artifacts diff --git a/external/build b/external/build index 4a09776..bc7615e 100644 --- a/external/build +++ b/external/build @@ -18,6 +18,8 @@ scripts/libplacebo-config scripts/libplacebo-build "$@" scripts/libass-config scripts/libass-build "$@" +scripts/dav1d-config +scripts/dav1d-build "$@" scripts/ffmpeg-config scripts/ffmpeg-build "$@" scripts/mpv-config diff --git a/external/clean b/external/clean index fdfae17..f1d7409 100644 --- a/external/clean +++ b/external/clean @@ -10,5 +10,6 @@ scripts/libxpresent-clean scripts/libdisplay-info-clean scripts/libass-clean scripts/libplacebo-clean +scripts/dav1d-clean scripts/mpv-clean rm -rf build_libs diff --git a/external/scripts/dav1d-build b/external/scripts/dav1d-build new file mode 100755 index 0000000..64296bd --- /dev/null +++ b/external/scripts/dav1d-build @@ -0,0 +1,4 @@ +#!/bin/sh +set -e + +ninja install -C dav1d/build "$@" diff --git a/external/scripts/dav1d-clean b/external/scripts/dav1d-clean new file mode 100755 index 0000000..583d75f --- /dev/null +++ b/external/scripts/dav1d-clean @@ -0,0 +1,3 @@ +#!/bin/sh + +rm -rf dav1d/build diff --git a/external/scripts/dav1d-config b/external/scripts/dav1d-config new file mode 100755 index 0000000..a46248d --- /dev/null +++ b/external/scripts/dav1d-config @@ -0,0 +1,30 @@ +#!/bin/sh +set -e + +BUILD="$(pwd)" +newline=" +" + +if test -f "$BUILD"/dav1d_options ; then + IFS=$newline + set -- $(cat "$BUILD"/dav1d_options) "$@" + unset -v IFS +fi + +OPTIONS="-Ddefault_library=static -Db_staticpic=true -Denable_tools=false -Denable_examples=false -Denable_tests=false -Denable_docs=false" + +case "$PKG_CONFIG_PATH" in + '') + export PKG_CONFIG_PATH="$BUILD/build_libs/lib/pkgconfig" + ;; + *) + export PKG_CONFIG_PATH="$BUILD/build_libs/lib/pkgconfig:$PKG_CONFIG_PATH" + ;; +esac + +cd "$BUILD"/dav1d + +test -d build && OPTIONS="$OPTIONS --wipe" +echo Using dav1d options: $OPTIONS "$@" + +meson setup build --prefix="$BUILD/build_libs" --libdir="$BUILD/build_libs/lib" $OPTIONS "$@" diff --git a/external/update b/external/update index 7d54de7..b7094b9 100644 --- a/external/update +++ b/external/update @@ -26,6 +26,7 @@ do_clone_all() do_clone "libdisplay-info" "https://gitlab.freedesktop.org/emersion/libdisplay-info.git" do_clone "libass" "https://github.com/libass/libass.git" do_clone "libplacebo" "https://github.com/haasn/libplacebo.git" + do_clone "dav1d" "https://code.videolan.org/videolan/dav1d.git" do_clone "mpv" "https://github.com/mpv-player/mpv.git" } @@ -113,6 +114,7 @@ checkout_ffmpeg=master checkout_libdisplay_info=master checkout_libass=master checkout_libplacebo=master +checkout_dav1d=master checkout_mpv=master @@ -125,6 +127,7 @@ checkout_all() checkout libdisplay-info $checkout_libdisplay_info checkout libass $checkout_libass checkout libplacebo $checkout_libplacebo + checkout dav1d $checkout_dav1d checkout mpv $checkout_mpv } @@ -149,6 +152,7 @@ case "$1" in #checkout_fribidi="master -" checkout_libass="master -" checkout_libplacebo="master -" + checkout_dav1d="master -" checkout_mpv="master -" ;; --release) diff --git a/external/use-dav1d-custom b/external/use-dav1d-custom new file mode 100755 index 0000000..d1aa25e --- /dev/null +++ b/external/use-dav1d-custom @@ -0,0 +1,10 @@ +#!/bin/sh +set -e +export LC_ALL=C + +if [ -z "$1" ]; then + echo "Aborting. Please provide a commit hash or a tag/branch name." + exit 1 +fi + +scripts/switch-branch dav1d "@$1"