feat: build libmpv from source in CI
This commit is contained in:
@@ -429,13 +429,24 @@ jobs:
|
|||||||
- name: Cache APT packages
|
- name: Cache APT packages
|
||||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||||
with:
|
with:
|
||||||
packages: clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libmpv-dev mpv libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libegl-dev libgl-dev libwayland-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
packages: clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
||||||
version: 1.1
|
version: 1.1
|
||||||
|
|
||||||
- name: Install Linux dependencies
|
- name: Install Linux dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libmpv-dev mpv libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libegl-dev libgl-dev libwayland-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
sudo apt-get install -y clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
||||||
|
|
||||||
|
- name: Cache libmpv build
|
||||||
|
id: libmpv-cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: libmpv-prefix
|
||||||
|
key: libmpv-${{ runner.arch }}-${{ hashFiles('linux/packaging/build-libmpv.sh') }}
|
||||||
|
|
||||||
|
- name: Build libmpv
|
||||||
|
if: steps.libmpv-cache.outputs.cache-hit != 'true'
|
||||||
|
run: bash linux/packaging/build-libmpv.sh
|
||||||
|
|
||||||
- name: Install fpm
|
- name: Install fpm
|
||||||
run: sudo gem install fpm
|
run: sudo gem install fpm
|
||||||
@@ -445,10 +456,18 @@ jobs:
|
|||||||
|
|
||||||
- name: Build Linux x64
|
- name: Build Linux x64
|
||||||
run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true
|
run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true
|
||||||
|
env:
|
||||||
|
PKG_CONFIG_PATH: libmpv-prefix/lib/pkgconfig:libmpv-prefix/lib/x86_64-linux-gnu/pkgconfig
|
||||||
|
|
||||||
- name: Build Linux Packages
|
- name: Build Linux Packages
|
||||||
run: ARCH_SUFFIX=x64 OUTPUT_DIR=$GITHUB_WORKSPACE python3 linux/packaging/build-packages.py
|
run: ARCH_SUFFIX=x64 OUTPUT_DIR=$GITHUB_WORKSPACE python3 linux/packaging/build-packages.py
|
||||||
|
|
||||||
|
- name: Copy libmpv into bundle
|
||||||
|
run: |
|
||||||
|
BUNDLE_LIB=build/linux/x64/release/bundle/lib
|
||||||
|
cp -a libmpv-prefix/lib/libmpv.so* "$BUNDLE_LIB/"
|
||||||
|
cp -a libmpv-prefix/lib/libshaderc_shared.so* "$BUNDLE_LIB/"
|
||||||
|
|
||||||
- name: Bundle shared libraries for portable tarball
|
- name: Bundle shared libraries for portable tarball
|
||||||
run: bash linux/packaging/bundle-libs.sh build/linux/x64/release/bundle
|
run: bash linux/packaging/bundle-libs.sh build/linux/x64/release/bundle
|
||||||
|
|
||||||
@@ -517,13 +536,24 @@ jobs:
|
|||||||
- name: Cache APT packages
|
- name: Cache APT packages
|
||||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||||
with:
|
with:
|
||||||
packages: clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libmpv-dev mpv libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libegl-dev libgl-dev libwayland-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
packages: clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
||||||
version: 1.1
|
version: 1.1
|
||||||
|
|
||||||
- name: Install Linux dependencies
|
- name: Install Linux dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libmpv-dev mpv libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libegl-dev libgl-dev libwayland-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
sudo apt-get install -y clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick
|
||||||
|
|
||||||
|
- name: Cache libmpv build
|
||||||
|
id: libmpv-cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: libmpv-prefix
|
||||||
|
key: libmpv-${{ runner.arch }}-${{ hashFiles('linux/packaging/build-libmpv.sh') }}
|
||||||
|
|
||||||
|
- name: Build libmpv
|
||||||
|
if: steps.libmpv-cache.outputs.cache-hit != 'true'
|
||||||
|
run: bash linux/packaging/build-libmpv.sh
|
||||||
|
|
||||||
- name: Install fpm
|
- name: Install fpm
|
||||||
run: sudo gem install fpm
|
run: sudo gem install fpm
|
||||||
@@ -533,6 +563,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Build Linux arm64
|
- name: Build Linux arm64
|
||||||
run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true
|
run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true
|
||||||
|
env:
|
||||||
|
PKG_CONFIG_PATH: libmpv-prefix/lib/pkgconfig:libmpv-prefix/lib/aarch64-linux-gnu/pkgconfig
|
||||||
|
|
||||||
- name: Find bundle directory
|
- name: Find bundle directory
|
||||||
id: find-bundle
|
id: find-bundle
|
||||||
@@ -547,6 +579,12 @@ jobs:
|
|||||||
OUTPUT_DIR=$GITHUB_WORKSPACE \
|
OUTPUT_DIR=$GITHUB_WORKSPACE \
|
||||||
python3 linux/packaging/build-packages.py
|
python3 linux/packaging/build-packages.py
|
||||||
|
|
||||||
|
- name: Copy libmpv into bundle
|
||||||
|
run: |
|
||||||
|
BUNDLE_LIB=${{ steps.find-bundle.outputs.bundle_dir }}/lib
|
||||||
|
cp -a libmpv-prefix/lib/libmpv.so* "$BUNDLE_LIB/"
|
||||||
|
cp -a libmpv-prefix/lib/libshaderc_shared.so* "$BUNDLE_LIB/"
|
||||||
|
|
||||||
- name: Bundle shared libraries for portable tarball
|
- name: Bundle shared libraries for portable tarball
|
||||||
run: bash linux/packaging/bundle-libs.sh ${{ steps.find-bundle.outputs.bundle_dir }}
|
run: bash linux/packaging/bundle-libs.sh ${{ steps.find-bundle.outputs.bundle_dir }}
|
||||||
|
|
||||||
|
|||||||
Executable
+143
@@ -0,0 +1,143 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PREFIX="$(pwd)/libmpv-prefix"
|
||||||
|
JOBS="$(nproc)"
|
||||||
|
|
||||||
|
FFMPEG_VERSION="7.1"
|
||||||
|
SHADERC_VERSION="2024.4"
|
||||||
|
LIBPLACEBO_VERSION="7.351.0"
|
||||||
|
MPV_VERSION="0.40.0"
|
||||||
|
|
||||||
|
PREFIX="$(realpath "$PREFIX")"
|
||||||
|
mkdir -p "$PREFIX"
|
||||||
|
export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PREFIX/lib/$(uname -m)-linux-gnu/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||||
|
|
||||||
|
SRCDIR="$(mktemp -d)"
|
||||||
|
trap 'rm -rf "$SRCDIR"' EXIT
|
||||||
|
cd "$SRCDIR"
|
||||||
|
|
||||||
|
echo "==> Sources in $SRCDIR"
|
||||||
|
echo "==> Install prefix: $PREFIX"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ─── Step 1: ffmpeg (static libraries) ───────────────────────────────────────
|
||||||
|
|
||||||
|
echo "==> Building ffmpeg $FFMPEG_VERSION (static, decoder-only)..."
|
||||||
|
curl -sL "https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.xz" | tar xJ
|
||||||
|
cd "ffmpeg-${FFMPEG_VERSION}"
|
||||||
|
|
||||||
|
./configure \
|
||||||
|
--prefix="$PREFIX" \
|
||||||
|
--enable-gpl \
|
||||||
|
--enable-version3 \
|
||||||
|
--enable-static \
|
||||||
|
--disable-shared \
|
||||||
|
--enable-pic \
|
||||||
|
--disable-programs \
|
||||||
|
--disable-doc \
|
||||||
|
--disable-encoders \
|
||||||
|
--disable-muxers \
|
||||||
|
--enable-muxer=spdif \
|
||||||
|
--disable-devices \
|
||||||
|
--disable-bsfs \
|
||||||
|
--enable-bsf=aac_adtstoasc,av1_metadata,extract_extradata,h264_metadata,h264_mp4toannexb,hevc_metadata,hevc_mp4toannexb,vp9_metadata \
|
||||||
|
--disable-filters \
|
||||||
|
--enable-filter=aformat,aresample,format,null,scale \
|
||||||
|
--enable-vaapi \
|
||||||
|
--enable-vdpau \
|
||||||
|
--disable-debug \
|
||||||
|
--disable-stripping
|
||||||
|
|
||||||
|
make -j"$JOBS"
|
||||||
|
make install
|
||||||
|
cd "$SRCDIR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> ffmpeg done."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ─── Step 2: shaderc (static library) ─────────────────────────────────────────
|
||||||
|
|
||||||
|
echo "==> Building shaderc $SHADERC_VERSION (static)..."
|
||||||
|
git clone --depth 1 --branch "v${SHADERC_VERSION}" \
|
||||||
|
https://github.com/google/shaderc.git "shaderc-v${SHADERC_VERSION}"
|
||||||
|
cd "shaderc-v${SHADERC_VERSION}"
|
||||||
|
./utils/git-sync-deps
|
||||||
|
|
||||||
|
cmake -S . -B build \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$PREFIX" \
|
||||||
|
-DSHADERC_SKIP_TESTS=ON \
|
||||||
|
-DSHADERC_SKIP_EXAMPLES=ON \
|
||||||
|
-DSHADERC_SKIP_COPYRIGHT_CHECK=ON \
|
||||||
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
||||||
|
|
||||||
|
cmake --build build -j"$JOBS"
|
||||||
|
cmake --install build
|
||||||
|
|
||||||
|
cd "$SRCDIR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> shaderc done."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ─── Step 3: libplacebo (static library) ─────────────────────────────────────
|
||||||
|
|
||||||
|
echo "==> Building libplacebo $LIBPLACEBO_VERSION (static)..."
|
||||||
|
git clone --depth 1 --recursive --branch "v${LIBPLACEBO_VERSION}" \
|
||||||
|
https://code.videolan.org/videolan/libplacebo.git "libplacebo-v${LIBPLACEBO_VERSION}"
|
||||||
|
cd "libplacebo-v${LIBPLACEBO_VERSION}"
|
||||||
|
|
||||||
|
meson setup build \
|
||||||
|
--prefix="$PREFIX" \
|
||||||
|
--default-library=static \
|
||||||
|
-Dvulkan=disabled \
|
||||||
|
-Dd3d11=disabled \
|
||||||
|
-Ddemos=false \
|
||||||
|
-Dtests=false
|
||||||
|
|
||||||
|
ninja -C build -j"$JOBS"
|
||||||
|
ninja -C build install
|
||||||
|
cd "$SRCDIR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> libplacebo done."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ─── Step 4: mpv (shared libmpv) ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
echo "==> Building mpv $MPV_VERSION (shared libmpv only)..."
|
||||||
|
curl -sL "https://github.com/mpv-player/mpv/archive/refs/tags/v${MPV_VERSION}.tar.gz" | tar xz
|
||||||
|
cd "mpv-${MPV_VERSION}"
|
||||||
|
|
||||||
|
meson setup build \
|
||||||
|
--prefix="$PREFIX" \
|
||||||
|
-Dlibmpv=true \
|
||||||
|
-Dcplayer=false \
|
||||||
|
-Dbuild-date=false \
|
||||||
|
-Dlua=disabled \
|
||||||
|
-Djavascript=disabled \
|
||||||
|
-Dcplugins=disabled \
|
||||||
|
-Dmanpage-build=disabled \
|
||||||
|
-Djack=disabled \
|
||||||
|
-Dvulkan=disabled \
|
||||||
|
-Dd3d11=disabled \
|
||||||
|
-Dgl=enabled \
|
||||||
|
-Dvaapi=enabled \
|
||||||
|
-Dvdpau=enabled \
|
||||||
|
-Dalsa=enabled \
|
||||||
|
-Dpulse=enabled \
|
||||||
|
-Dpipewire=enabled \
|
||||||
|
-Dwayland=enabled \
|
||||||
|
-Dx11=enabled
|
||||||
|
|
||||||
|
ninja -C build -j"$JOBS"
|
||||||
|
ninja -C build install
|
||||||
|
cd "$SRCDIR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> mpv done."
|
||||||
|
echo ""
|
||||||
|
echo "==> libmpv build complete. Output in $PREFIX"
|
||||||
@@ -53,8 +53,6 @@ bundle_dlopen_lib() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
bundle_dlopen_lib "libmpv.so"
|
|
||||||
|
|
||||||
echo "==> Discovering shared library dependencies..."
|
echo "==> Discovering shared library dependencies..."
|
||||||
|
|
||||||
# Seed: the main binary + all .so files already in lib/
|
# Seed: the main binary + all .so files already in lib/
|
||||||
|
|||||||
Reference in New Issue
Block a user