mirror of
https://github.com/kirbylink/mpv-natives
synced 2026-10-17 07:10:26 +02:00
Add a native x86_64 Linux build (ci/build-libmpv-linux.sh, build-linux.yml). Every dependency is static and linked into a single libmpv.so; only glibc/pthread/dl/m and the system zlib remain external. The Linux-only additions are the font stack (fontconfig -> expat, where macOS/Windows use CoreText/DirectWrite) and alsa audio output; gl is the plain render-API support (no X11/Wayland context, since jlibmpv supplies the GL context via JOGL). For consistency, ship a single native per platform and no public headers (jlibmpv loads the library via JNA and never compiles against it). Remove the accidental header/import-library copies from the Windows build and the phantom header copy from the macOS build.
112 lines
3.7 KiB
YAML
112 lines
3.7 KiB
YAML
name: build-linux
|
|
|
|
# Builds a single self-contained libmpv.so for Linux (x86_64) from mpv source
|
|
# pinned to a release tag. Every dependency is built static and linked into
|
|
# the one .so; only glibc/pthread/dl/m and the system zlib stay external, so
|
|
# the artifact has no runtime dependency closure to ship (unlike mpv's own
|
|
# shared-lib CI build).
|
|
#
|
|
# Linux is the easiest of the three platforms: a single native build on an
|
|
# ubuntu runner, no cross-compile, no lipo. The only Linux-specific work is the
|
|
# font stack: libass (a hard mpv dependency) needs fontconfig (-> expat) where
|
|
# macOS/Windows use CoreText/DirectWrite.
|
|
#
|
|
# Pinned to mpv v0.41.0 - the version whose client API (131077) the jlibmpv
|
|
# JNA bindings are validated against. Bump the ref here for a libmpv update.
|
|
# The build recipe (dependency versions, static flags) lives in
|
|
# ci/build-libmpv-linux.sh in this repository.
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
MPV_REF: v0.41.0
|
|
TARGET: x86_64-linux
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-24.04
|
|
env:
|
|
CCACHE_BASEDIR: ${{ github.workspace }}
|
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
|
CCACHE_MAXSIZE: 500M
|
|
steps:
|
|
- name: Check out mpv-natives (build scripts)
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Check out mpv (pinned tag)
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: mpv-player/mpv
|
|
ref: ${{ env.MPV_REF }}
|
|
path: mpv
|
|
fetch-depth: 1
|
|
|
|
- name: Get time
|
|
id: get_time
|
|
run: echo "timestamp=$(date +%s%N)" >> $GITHUB_OUTPUT
|
|
|
|
- name: Restore ccache
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
path: ${{ env.CCACHE_DIR }}
|
|
key: ${{ env.TARGET }}-${{ steps.get_time.outputs.timestamp }}
|
|
restore-keys: ${{ env.TARGET }}-
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install --no-install-recommends -y \
|
|
ccache nasm ninja-build pkgconf cmake autoconf automake libtool
|
|
python3 -m pip install meson
|
|
|
|
# Run the vendored build script from inside the mpv source tree, so the
|
|
# native build writes linux_prefix/ and the meson build next to mpv's
|
|
# meson.build and produces the self-contained .so in mpv/artifact/.
|
|
- name: Build self-contained libmpv
|
|
working-directory: mpv
|
|
run: bash "${{ github.workspace }}/ci/build-libmpv-linux.sh"
|
|
|
|
- name: Print meson log on failure
|
|
if: failure()
|
|
run: cat mpv/linux_build/meson-logs/meson-log.txt
|
|
|
|
- name: Collect artifact
|
|
run: |
|
|
mkdir -p artifact-libmpv
|
|
cp -pv mpv/artifact/libmpv.so artifact-libmpv/
|
|
echo "=== contents ==="
|
|
ls -l artifact-libmpv
|
|
|
|
- name: Checksums
|
|
run: |
|
|
cd artifact-libmpv
|
|
sha256sum libmpv.so > checksums.txt
|
|
cat checksums.txt
|
|
|
|
- name: Artifact name
|
|
id: artifact
|
|
run: |
|
|
VER=$(cat mpv/MPV_VERSION | tr -d '[:space:]')
|
|
echo "name=mpv-natives-linux-x86_64-mpv-$VER" >> "$GITHUB_OUTPUT"
|
|
echo "version=$VER" >> "$GITHUB_OUTPUT"
|
|
|
|
# upload-artifact zips the directory itself, so handing it the folder
|
|
# (not a pre-zipped file) yields a single-level archive without the
|
|
# double-zip wrapper.
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ steps.artifact.outputs.name }}
|
|
path: artifact-libmpv
|
|
|
|
- name: Save ccache
|
|
uses: actions/cache/save@v4
|
|
if: always()
|
|
with:
|
|
path: ${{ env.CCACHE_DIR }}
|
|
key: ${{ env.TARGET }}-${{ steps.get_time.outputs.timestamp }} |