build(deps): bump third-party/FFmpeg/FFmpeg from b168ed9
to ac494b8
#163
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: CI | |
on: | |
pull_request: | |
branches: [master] | |
types: [opened, synchronize, reopened] | |
push: | |
branches: [master] | |
workflow_dispatch: | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.ref }}" | |
cancel-in-progress: true | |
env: | |
MACOSX_DEPLOYMENT_TARGET: 13.0 | |
jobs: | |
build: | |
name: Build (${{ matrix.name }}) | |
# https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu | |
# https://trac.ffmpeg.org/wiki/CompilationGuide/macOS | |
# https://trac.ffmpeg.org/wiki/CompilationGuide/MinGW | |
strategy: | |
fail-fast: false # false to test all, true to fail entire job if any fail | |
matrix: | |
include: | |
- name: Linux-x86_64 # ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR} | |
os: ubuntu-22.04 | |
arch: x86_64 | |
generator: "Unix Makefiles" | |
shell: bash | |
- name: Linux-aarch64 | |
os: ubuntu-22.04 | |
arch: aarch64 | |
generator: "Unix Makefiles" | |
shell: bash | |
target: aarch64-linux-gnu | |
- name: Linux-ppc64le | |
os: ubuntu-22.04 | |
arch: powerpc64le | |
generator: "Unix Makefiles" | |
shell: bash | |
target: powerpc64le-linux-gnu | |
- name: Darwin-x86_64 | |
os: macos-13 | |
arch: x86_64 | |
generator: "Unix Makefiles" | |
shell: bash | |
target: x86_64-apple-macosx | |
- name: Darwin-arm64 | |
os: macos-14 | |
arch: aarch64 | |
generator: "Unix Makefiles" | |
shell: bash | |
target: arm64-apple-macosx | |
- name: Windows-AMD64 | |
os: windows-2022 | |
arch: x86_64 | |
generator: "MSYS Makefiles" | |
shell: msys2 {0} | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
shell: ${{ matrix.shell }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup cross compiling Linux | |
id: cross_compile | |
if: contains(matrix.os, 'ubuntu') | |
run: | | |
echo "::group::distro detection" | |
# detect dist name like bionic, focal, etc | |
dist_name=$(lsb_release -cs) | |
ubuntu_version=$(lsb_release -rs) | |
ubuntu_major_version=${ubuntu_version%%.*} | |
echo "detected dist name: $dist_name" | |
echo "detected ubuntu version: $ubuntu_version" | |
echo "detected ubuntu major version: $ubuntu_major_version" | |
echo "::endgroup::" | |
echo "::group::install aptitude" | |
sudo apt-get update # must run before changing sources file | |
sudo apt-get install -y \ | |
aptitude | |
echo "::endgroup::" | |
if [[ $ubuntu_major_version -le 20 ]]; then | |
# activate mesa backport PPA to ensure ffmpeg builds with vaSyncBuffer() | |
# (via libva 2.9.0 or later) | |
sudo add-apt-repository ppa:kisak/turtle -y | |
fi | |
echo "::group::dependencies prep" | |
dependencies=( | |
"autoconf" | |
"automake" | |
"build-essential" | |
"cmake" | |
"git-core" | |
"libass-dev" | |
"libfreetype6-dev" | |
"libgnutls28-dev" | |
"libmp3lame-dev" | |
"libnuma-dev" | |
"libopus-dev" | |
"libsdl2-dev" | |
"libtool" | |
"libvorbis-dev" | |
"libxcb1-dev" | |
"libxcb-shm0-dev" | |
"libxcb-xfixes0-dev" | |
"make" | |
"meson" | |
"nasm" | |
"ninja-build" | |
"pkg-config" | |
"texinfo" | |
"wget" | |
"zlib1g-dev" | |
) | |
package_arch="amd64" | |
cross_compile=false | |
package_arch=$(dpkg --print-architecture) | |
if [[ ${{ matrix.arch }} == "aarch64" ]]; then | |
dependencies+=("crossbuild-essential-arm64") | |
cross_compile=true | |
package_arch="arm64" | |
elif [[ ${{ matrix.arch }} == "powerpc64le" ]]; then | |
dependencies+=("crossbuild-essential-ppc64el") | |
cross_compile=true | |
package_arch="ppc64el" | |
fi | |
echo "cross compiling: $cross_compile" | |
echo "package architecture: $package_arch" | |
dependencies+=( | |
"libva-dev:$package_arch" | |
"libva-glx2:$package_arch" | |
"libgl1:$package_arch" | |
"libglx0:$package_arch" | |
) | |
echo "::group::apt sources" | |
mirror="https://ports.ubuntu.com/ubuntu-ports" | |
# source file changed in 24.04 | |
if [[ $ubuntu_major_version -ge 24 ]]; then | |
source_file="/etc/apt/sources.list.d/ubuntu.sources" | |
extra_sources=$(cat <<- VAREOF | |
Types: deb | |
URIs: mirror+file:/etc/apt/apt-mirrors.txt | |
Suites: ${dist_name} ${dist_name}-updates ${dist_name}-backports ${dist_name}-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Architectures: $(dpkg --print-architecture) | |
Types: deb | |
URIs: ${mirror} | |
Suites: ${dist_name} ${dist_name}-updates ${dist_name}-backports ${dist_name}-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Architectures: ${package_arch} | |
VAREOF | |
) | |
else | |
source_file="/etc/apt/sources.list" | |
extra_sources=$(cat <<- VAREOF | |
deb [arch=${package_arch}] ${mirror} ${dist_name} main restricted | |
deb [arch=${package_arch}] ${mirror} ${dist_name}-updates main restricted | |
deb [arch=${package_arch}] ${mirror} ${dist_name} universe | |
deb [arch=${package_arch}] ${mirror} ${dist_name}-updates universe | |
deb [arch=${package_arch}] ${mirror} ${dist_name} multiverse | |
deb [arch=${package_arch}] ${mirror} ${dist_name}-updates multiverse | |
deb [arch=${package_arch}] ${mirror} ${dist_name}-backports main restricted universe multiverse | |
deb [arch=${package_arch}] ${mirror} ${dist_name}-security main restricted | |
deb [arch=${package_arch}] ${mirror} ${dist_name}-security universe | |
deb [arch=${package_arch}] ${mirror} ${dist_name}-security multiverse | |
VAREOF | |
) | |
fi | |
if [[ ${cross_compile} == true ]]; then | |
# print original sources | |
echo "original sources:" | |
sudo cat ${source_file} | |
echo "----" | |
sudo dpkg --add-architecture ${package_arch} | |
if [[ $ubuntu_major_version -ge 24 ]]; then | |
echo "$extra_sources" | sudo tee ${source_file} > /dev/null | |
else | |
# fix original sources | |
sudo sed -i -e "s#deb mirror#deb [arch=amd64] mirror#g" ${source_file} | |
echo "$extra_sources" | sudo tee -a ${source_file} > /dev/null | |
fi | |
echo "----" | |
echo "new sources:" | |
sudo cat ${source_file} | |
echo "----" | |
fi | |
echo "::endgroup::" | |
echo "::group::output" | |
echo "CROSS_COMPILE=${cross_compile}" | |
echo "CROSS_COMPILE=${cross_compile}" >> $GITHUB_OUTPUT | |
echo "DEPENDENCIES=${dependencies[@]}" | |
echo "DEPENDENCIES=${dependencies[@]}" >> $GITHUB_OUTPUT | |
echo "PKG_CONFIG_SYSROOT_DIR=${pkg_config_sysroot_dir}" | |
echo "PKG_CONFIG_SYSROOT_DIR=${pkg_config_sysroot_dir}" >> $GITHUB_ENV | |
echo "PKG_CONFIG_PATH=${pkg_config_sysroot_dir}/pkgconfig" | |
echo "PKG_CONFIG_PATH=${pkg_config_sysroot_dir}/pkgconfig" >> $GITHUB_ENV | |
echo "::endgroup::" | |
- name: Install system dependencies Linux | |
if: contains(matrix.os, 'ubuntu') | |
run: | | |
echo "::group::apt update" | |
sudo apt-get update | |
echo "::endgroup::" | |
echo "::group::install dependencies" | |
sudo aptitude install -y --without-recommends ${{ steps.cross_compile.outputs.DEPENDENCIES }} | |
echo "::endgroup::" | |
- name: Setup Dependencies MacOS | |
if: ${{ runner.os == 'macOS' }} | |
run: | | |
dependencies=( | |
"automake" | |
"fdk-aac" | |
"git" | |
"lame" | |
"libass" | |
"libtool" | |
"libvorbis" | |
"libvpx" | |
"nasm" | |
"ninja" | |
"opus" | |
"pkg-config" | |
"sdl" | |
"shtool" | |
"texi2html" | |
"theora" | |
"wget" | |
"xvid" | |
) | |
brew install ${dependencies[@]} | |
- name: Setup Dependencies Windows | |
# if a dependency needs to be pinned, see https://github.com/LizardByte/build-deps/pull/186 | |
if: ${{ runner.os == 'Windows' }} | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: ucrt64 | |
update: true | |
install: >- | |
diffutils | |
git | |
make | |
pkg-config | |
mingw-w64-ucrt-x86_64-binutils | |
mingw-w64-ucrt-x86_64-cmake | |
mingw-w64-ucrt-x86_64-gcc | |
mingw-w64-ucrt-x86_64-make | |
mingw-w64-ucrt-x86_64-nasm | |
mingw-w64-ucrt-x86_64-ninja | |
mingw-w64-ucrt-x86_64-onevpl | |
- name: Debug msys2.CMD | |
if: ${{ runner.os == 'Windows' }} | |
run: | | |
cat /d/a/_temp/setup-msys2/msys2.CMD | |
- name: Initialize Submodules | |
# libx265 has issues when using the recursive method of the first checkout action | |
# this is after `msys2/setup-msys2@v2` because `msys2` (default) shell is not available until then. | |
run: | | |
git submodule update --init --recursive | |
- name: Setup ENV | |
id: root | |
run: | | |
echo "ROOT_PATH=$PWD" >> $GITHUB_ENV | |
- name: Setup cross compilation | |
id: cross | |
if: ${{ matrix.target != '' }} | |
run: | | |
TOOLCHAIN=${ROOT_PATH}/cmake/toolchains/${{ matrix.target }}.cmake | |
# fail if file does not exist | |
if [ ! -f $TOOLCHAIN ]; then | |
echo "Toolchain file not found: $TOOLCHAIN" | |
exit 1 | |
fi | |
echo "CMAKE_TOOLCHAIN_FILE=$TOOLCHAIN" >> $GITHUB_ENV | |
if [[ ${{ runner.os }} == 'Linux' ]]; then | |
echo "CCPREFIX=/usr/bin/${{ matrix.target }}-" >> $GITHUB_ENV | |
fi | |
- name: Get Processor Count | |
id: processor_count | |
run: | | |
if [[ ${{ runner.os }} == 'macOS' ]]; then | |
echo "PROCESSOR_COUNT=$(sysctl -n hw.ncpu)" >> $GITHUB_OUTPUT | |
else | |
echo "PROCESSOR_COUNT=$(nproc)" >> $GITHUB_OUTPUT | |
fi | |
- name: Configure | |
run: | | |
mkdir -p ./build/dist | |
cmake \ | |
-B build \ | |
-S . \ | |
-G "${{ matrix.generator }}" \ | |
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} \ | |
-DCMAKE_INSTALL_PREFIX="${ROOT_PATH}/build/dist" | |
- name: Build | |
run: | | |
make -C build -j${{ steps.processor_count.outputs.PROCESSOR_COUNT }} | |
- name: Install | |
run: | | |
make -C build install | |
- name: Debug logs | |
if: always() | |
run: | | |
echo "::group::x264 config.log" | |
cat ./third-party/FFmpeg/x264/config.log || true | |
echo "::endgroup::" | |
echo "::group::FFmpeg config.log" | |
cat ./build/generated-src/FFmpeg/ffbuild/config.log || true | |
echo "::endgroup::" | |
- name: Debug build directory | |
if: always() | |
run: | | |
ls -R ./build | |
- name: Debug build/dist directory | |
if: always() | |
run: | | |
ls -R ./build/dist | |
- name: Cleanup | |
run: | | |
rm -f -r ./build/dist/share | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.name }} | |
path: ./build/dist | |
update_dist: | |
# only the commit is conditional, so the rest of the job can be verified on PRs | |
name: Update dist | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout dist | |
uses: actions/checkout@v4 | |
with: | |
ref: dist | |
path: dist | |
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token | |
fetch-depth: 0 # otherwise, will fail to push refs to dest repo | |
- name: Cleanup | |
run: | | |
rm -rf dist/* | |
mkdir -p dist/dist | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: dist/dist | |
- name: Debug dist directory | |
run: | | |
ls -R dist | |
- name: Commit dist | |
if: >- | |
startsWith(github.repository, 'LizardByte/') && | |
github.ref == 'refs/heads/master' && | |
(github.event_name == 'push' || github.event_name == 'workflow_dispatch') | |
uses: actions-js/push@v1.5 | |
with: | |
github_token: ${{ secrets.GH_BOT_TOKEN }} | |
author_email: ${{ secrets.GH_BOT_EMAIL }} | |
author_name: ${{ secrets.GH_BOT_NAME }} | |
directory: dist | |
branch: dist | |
force: false | |
message: "Commit ${{ github.sha }}" |