mirror of https://github.com/mpv-player/mpv
575 lines
16 KiB
YAML
575 lines
16 KiB
YAML
name: build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- ci
|
|
- 'release/**'
|
|
paths-ignore:
|
|
- 'DOCS/**'
|
|
- 'TOOLS/lua/**'
|
|
- '.editorconfig'
|
|
- '.gitignore'
|
|
- 'Copyright'
|
|
- 'README.md'
|
|
- 'RELEASE_NOTES'
|
|
pull_request:
|
|
branches: [master]
|
|
paths-ignore:
|
|
- 'DOCS/**'
|
|
- 'TOOLS/lua/**'
|
|
- '.editorconfig'
|
|
- '.gitignore'
|
|
- 'Copyright'
|
|
- 'README.md'
|
|
- 'RELEASE_NOTES'
|
|
|
|
jobs:
|
|
mingw:
|
|
runs-on: ubuntu-24.04
|
|
env:
|
|
CCACHE_BASEDIR: ${{ github.workspace }}
|
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
|
CCACHE_MAXSIZE: 500M
|
|
WINE: ${{ matrix.wine }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- target: i686-w64-mingw32
|
|
- target: x86_64-w64-mingw32
|
|
wine: wine
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Get time
|
|
id: get_time
|
|
run: echo "timestamp=`date +%s%N`" >> $GITHUB_OUTPUT
|
|
|
|
- name: Restore cache
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
path: ${{ env.CCACHE_DIR }}
|
|
key: ${{ matrix.target }}-${{ steps.get_time.outputs.timestamp }}
|
|
restore-keys: ${{ matrix.target }}-
|
|
|
|
# For LuaJIT build
|
|
- name: Enable multilib
|
|
if: ${{ matrix.target == 'i686-w64-mingw32' }}
|
|
run: |
|
|
sudo dpkg --add-architecture i386
|
|
sudo apt-get update
|
|
sudo apt-get install -y gcc-multilib
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y ccache g++-mingw-w64 meson nasm ninja-build pkg-config ${{ matrix.wine }}
|
|
|
|
- name: Install Meson Wraps
|
|
run: |
|
|
mkdir subprojects -p
|
|
meson wrap install mujs
|
|
|
|
- name: Build libraries
|
|
run: |
|
|
./ci/build-mingw64.sh
|
|
env:
|
|
TARGET: ${{ matrix.target }}
|
|
|
|
- name: Build with meson
|
|
id: build
|
|
run: |
|
|
./ci/build-mingw64.sh meson pack
|
|
env:
|
|
TARGET: ${{ matrix.target }}
|
|
|
|
- name: Print meson log
|
|
if: ${{ failure() && steps.build.outcome == 'failure' }}
|
|
run: |
|
|
cat ./mingw_build/meson-logs/meson-log.txt
|
|
|
|
- name: Functional test
|
|
if: ${{ matrix.wine }}
|
|
run: |
|
|
cd artifact && wine ./mpv.com -v --no-config
|
|
env:
|
|
WINEDEBUG: '+loaddll'
|
|
|
|
- name: Run meson tests
|
|
if: ${{ matrix.wine }}
|
|
id: tests
|
|
run: |
|
|
meson test -C mingw_build
|
|
|
|
- name: Print meson test log
|
|
if: ${{ failure() && steps.tests.outcome == 'failure' }}
|
|
run: |
|
|
cat ./mingw_build/meson-logs/testlog.txt
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: mpv-${{ matrix.target }}
|
|
path: mpv-git-*.zip
|
|
|
|
- name: Save Cache
|
|
uses: actions/cache/save@v4
|
|
if: always()
|
|
with:
|
|
path: ${{ env.CCACHE_DIR }}
|
|
key: ${{ matrix.target }}-${{ steps.get_time.outputs.timestamp }}
|
|
|
|
win32:
|
|
runs-on: windows-latest
|
|
env:
|
|
VS: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise"
|
|
CC: "ccache clang"
|
|
CXX: "ccache clang++"
|
|
CC_LD: "lld"
|
|
CXX_LD: "lld"
|
|
WINDRES: "llvm-rc"
|
|
CCACHE_BASEDIR: ${{ github.workspace }}
|
|
CCACHE_DIR: "${{ github.workspace }}\\.ccache"
|
|
CCACHE_MAXSIZE: 500M
|
|
steps:
|
|
- name: Disable autocrlf
|
|
run: |
|
|
git config --global core.autocrlf false
|
|
git config --global core.eol lf
|
|
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Get time
|
|
id: get_time
|
|
run: |
|
|
"timestamp=$((Get-Date).Ticks)" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Restore cache
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
path: ${{ env.CCACHE_DIR }}
|
|
key: x86_64-windows-msvc-${{ steps.get_time.outputs.timestamp }}
|
|
restore-keys: x86_64-windows-msvc-
|
|
|
|
# https://github.com/mesonbuild/meson/pull/11715
|
|
- name: Install dependencies
|
|
run: |
|
|
git clone https://github.com/kasper93/meson --depth 1 -b 8981
|
|
python -m pip install build wheel
|
|
python -m build --wheel --no-isolation meson
|
|
python -m pip install (Get-Item ./meson/dist/meson-*-py3-none-any.whl).FullName
|
|
choco install ccache
|
|
|
|
- name: Update Meson WrapDB
|
|
run: |
|
|
meson wrap update-db
|
|
# Explicitly download wraps, as nested projects may have older versions of them.
|
|
meson wrap install expat
|
|
meson wrap install harfbuzz
|
|
meson wrap install libpng
|
|
meson wrap install zlib
|
|
|
|
- name: Build
|
|
id: build
|
|
run: |
|
|
$env:PATH = ($env:PATH -split ';' | Where-Object { $_ -ne 'C:\Program Files\LLVM\bin' -and `
|
|
$_ -ne 'C:\Strawberry\c\bin' }) -join ';'
|
|
Import-Module "$env:VS\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
|
|
Enter-VsDevShell -VsInstallPath $env:VS -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64"
|
|
./ci/build-win32.ps1
|
|
|
|
- name: Print build log
|
|
if: ${{ failure() && steps.build.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/meson-log.txt
|
|
|
|
- name: Run meson tests
|
|
id: tests
|
|
run: |
|
|
$env:PATH = ($env:PATH -split ';' | Where-Object { $_ -ne 'C:\Program Files\LLVM\bin' -and `
|
|
$_ -ne 'C:\Strawberry\c\bin' }) -join ';'
|
|
Import-Module "$env:VS\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
|
|
Enter-VsDevShell -VsInstallPath $env:VS -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64"
|
|
meson test -C build mpv:
|
|
|
|
- name: Print meson test log
|
|
if: ${{ failure() && steps.tests.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/testlog.txt
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: mpv-x86_64-windows-msvc
|
|
path: |
|
|
build/mpv.???
|
|
build/vulkan-*.dll
|
|
!build/mpv.lib
|
|
|
|
- name: Save Cache
|
|
uses: actions/cache/save@v4
|
|
if: always()
|
|
with:
|
|
path: ${{ env.CCACHE_DIR }}
|
|
key: x86_64-windows-msvc-${{ steps.get_time.outputs.timestamp }}
|
|
|
|
macos:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
cc:
|
|
- "clang"
|
|
cxx:
|
|
- "clang++"
|
|
os:
|
|
- "macos-12"
|
|
- "macos-13"
|
|
- "macos-14"
|
|
include:
|
|
- os: "macos-12"
|
|
arch: "intel"
|
|
- os: "macos-13"
|
|
arch: "intel"
|
|
- os: "macos-14"
|
|
arch: "arm"
|
|
xcode: "Xcode_15.2"
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Remove stray upstream python binary symlinks under /usr/local
|
|
run: |
|
|
find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete -print
|
|
brew unlink python && brew link --overwrite python
|
|
|
|
- name: Change Xcode version
|
|
if: ${{ matrix.xcode != '' }}
|
|
run: |
|
|
sudo xcode-select -s /Applications/${{ matrix.xcode }}.app
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
brew update
|
|
brew install -q autoconf automake pkg-config libtool python freetype fribidi little-cms2 \
|
|
luajit libass ffmpeg meson uchardet mujs libplacebo molten-vk vulkan-loader vulkan-headers
|
|
|
|
- name: Build with meson
|
|
id: build
|
|
run: |
|
|
./ci/build-macos.sh
|
|
env:
|
|
CC: "${{ matrix.cc }}"
|
|
CXX: "${{ matrix.cxx }}"
|
|
TRAVIS_OS_NAME: "${{ matrix.os }}"
|
|
|
|
- name: Create App Bundle
|
|
run: |
|
|
meson compile -C build macos-bundle
|
|
tar -czvf mpv.tar.gz -C build mpv.app
|
|
|
|
- name: Print meson log
|
|
if: ${{ failure() && steps.build.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/meson-log.txt
|
|
|
|
- name: Run meson tests
|
|
id: tests
|
|
run: |
|
|
meson test -C build
|
|
|
|
- name: Print meson test log
|
|
if: ${{ failure() && steps.tests.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/testlog.txt
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: mpv-${{ matrix.os }}-${{ matrix.arch }}
|
|
path: mpv.tar.gz
|
|
|
|
linux:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps"
|
|
env:
|
|
CC: "${{ matrix.config.cc }}"
|
|
CXX: "${{ matrix.config.cxx }}"
|
|
strategy:
|
|
matrix:
|
|
config:
|
|
- {
|
|
cc: "gcc",
|
|
cxx: "g++",
|
|
}
|
|
- {
|
|
cc: "clang",
|
|
cxx: "clang++",
|
|
}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
# workaround to avoid "fatal: unsafe repository" error
|
|
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
|
|
- name: Build with meson
|
|
id: build
|
|
run: |
|
|
./ci/build-tumbleweed.sh
|
|
|
|
- name: Print meson log
|
|
if: ${{ failure() && steps.build.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/meson-log.txt
|
|
|
|
- name: Run meson tests
|
|
id: tests
|
|
run: |
|
|
meson test -C build
|
|
|
|
- name: Print meson test log
|
|
if: ${{ failure() && steps.tests.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/testlog.txt
|
|
|
|
linux-fuzz:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps"
|
|
env:
|
|
CC: "clang"
|
|
CXX: "clang++"
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Build with meson
|
|
id: build
|
|
run: |
|
|
meson setup build \
|
|
--werror \
|
|
-Dc_args="-Wno-error=deprecated -Wno-error=deprecated-declarations" \
|
|
-Dfuzzers=true -Dlibmpv=true -Dcplayer=false
|
|
meson compile -C build
|
|
|
|
- name: Print meson log
|
|
if: ${{ failure() && steps.build.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/meson-log.txt
|
|
|
|
linux-ffmpeg-6-1:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
# We want to test ffmpeg 6.1.1 which alpine 3.19 has exactly.
|
|
# Furthermore, this is a very minimal build of mpv without commonly
|
|
# used features to test build compatibility. Musl is a nice bonus as well
|
|
image: alpine:3.19
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install dependencies
|
|
run: |
|
|
apk update
|
|
apk add \
|
|
binutils \
|
|
ffmpeg-dev \
|
|
gcc \
|
|
git \
|
|
g++ \
|
|
libass-dev \
|
|
lua5.2-dev \
|
|
pulseaudio-dev \
|
|
libx11-dev \
|
|
libxfixes-dev \
|
|
libxkbcommon-dev \
|
|
libxrandr-dev \
|
|
libxpresent-dev \
|
|
libxscrnsaver-dev \
|
|
meson \
|
|
musl-dev \
|
|
samurai
|
|
|
|
- name: Build with meson
|
|
id: build
|
|
run: |
|
|
./ci/build-linux-old.sh
|
|
|
|
- name: Print meson log
|
|
if: ${{ failure() && steps.build.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/meson-log.txt
|
|
|
|
- name: Run meson tests
|
|
id: tests
|
|
run: |
|
|
meson test -C build
|
|
|
|
- name: Print meson test log
|
|
if: ${{ failure() && steps.tests.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/testlog.txt
|
|
|
|
openbsd:
|
|
runs-on: ubuntu-latest # until https://github.com/actions/runner/issues/385
|
|
timeout-minutes: 30 # avoid any weirdness with the VM
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Test in OpenBSD VM
|
|
uses: cross-platform-actions/action@v0.24.0
|
|
with:
|
|
operating_system: openbsd
|
|
version: '7.5'
|
|
run: |
|
|
sudo pkg_add -U \
|
|
cmake \
|
|
ffmpeg \
|
|
git \
|
|
libarchive \
|
|
libbluray \
|
|
libcaca \
|
|
libcdio-paranoia \
|
|
libdvdnav \
|
|
libiconv \
|
|
libplacebo \
|
|
libv4l \
|
|
libxkbcommon \
|
|
luajit \
|
|
meson \
|
|
openal \
|
|
pkgconf \
|
|
pulseaudio \
|
|
python3 \
|
|
rubberband \
|
|
sdl2 \
|
|
shaderc \
|
|
spirv-cross \
|
|
spirv-headers \
|
|
uchardet \
|
|
vulkan-loader \
|
|
vulkan-headers \
|
|
zimg
|
|
./ci/build-openbsd.sh
|
|
meson test -C build
|
|
|
|
freebsd:
|
|
runs-on: ubuntu-latest # until https://github.com/actions/runner/issues/385
|
|
timeout-minutes: 30 # avoid any weirdness with the VM
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Test in FreeBSD VM
|
|
uses: cross-platform-actions/action@v0.24.0
|
|
with:
|
|
operating_system: freebsd
|
|
version: '14.0'
|
|
run: |
|
|
sudo pkg update
|
|
sudo pkg install -y \
|
|
alsa-lib \
|
|
cmake \
|
|
evdev-proto \
|
|
ffmpeg \
|
|
git \
|
|
iconv \
|
|
jackit \
|
|
libarchive \
|
|
libbluray \
|
|
libcaca \
|
|
libcdio-paranoia \
|
|
libdvdnav \
|
|
libplacebo \
|
|
libXinerama \
|
|
libxkbcommon \
|
|
libxpresent \
|
|
libXv \
|
|
luajit \
|
|
meson \
|
|
mujs \
|
|
openal-soft \
|
|
pipewire \
|
|
pkgconf \
|
|
pulseaudio \
|
|
python3 \
|
|
rubberband \
|
|
sekrit-twc-zimg \
|
|
sdl2 \
|
|
sndio \
|
|
uchardet \
|
|
v4l_compat \
|
|
vulkan-headers \
|
|
wayland-protocols
|
|
./ci/build-freebsd.sh
|
|
meson test -C build
|
|
|
|
msys2:
|
|
runs-on: windows-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
sys:
|
|
- clang32
|
|
- clang64
|
|
- mingw32
|
|
- mingw64
|
|
- ucrt64
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
steps:
|
|
- name: Disable autocrlf
|
|
shell: pwsh
|
|
run: |
|
|
git config --global core.autocrlf false
|
|
git config --global core.eol lf
|
|
- uses: actions/checkout@v4
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: ${{ matrix.sys }}
|
|
update: true
|
|
install: git
|
|
pacboy: >-
|
|
ca-certificates:p
|
|
cc:p
|
|
ffmpeg:p
|
|
lcms2:p
|
|
libarchive:p
|
|
libass:p
|
|
libcdio-paranoia:p
|
|
libdvdnav:p
|
|
libjpeg-turbo:p
|
|
libplacebo:p
|
|
lua51:p
|
|
meson:p
|
|
ninja:p
|
|
pkgconf:p
|
|
python:p
|
|
shaderc:p
|
|
spirv-cross:p
|
|
uchardet:p
|
|
vapoursynth:p
|
|
vulkan-devel:p
|
|
|
|
- name: Install dependencies
|
|
if: ${{ matrix.sys != 'clang32' && matrix.sys != 'mingw32' }}
|
|
run: |
|
|
pacboy --noconfirm -S {angleproject,rst2pdf,rubberband}:p
|
|
|
|
- name: Build with meson
|
|
id: build
|
|
run: |
|
|
./ci/build-msys2.sh meson
|
|
env:
|
|
SYS: ${{ matrix.sys }}
|
|
|
|
- name: Print meson log
|
|
if: ${{ failure() && steps.build.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/meson-log.txt
|
|
|
|
- name: Run meson tests
|
|
id: tests
|
|
run: |
|
|
meson test -C build
|
|
|
|
- name: Print meson test log
|
|
if: ${{ failure() && steps.tests.outcome == 'failure' }}
|
|
run: |
|
|
cat ./build/meson-logs/testlog.txt
|