diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index a705f187e2..72fab22c6e 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -4,7 +4,7 @@ on: workflow_dispatch jobs: build-macos: name: Build macOS - runs-on: macos-latest + runs-on: macos-12 strategy: fail-fast: false matrix: @@ -55,25 +55,22 @@ jobs: path: macOS-universal build-win: - name: Build Windows (${{ matrix.arch }}) + name: Build Windows runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: arch: - - x64 - x86 - - arm64 - container: - image: mstorsjo/llvm-mingw:latest + - x64 steps: - name: Checkout uses: actions/checkout@v4 - name: Install dependencies run: | - apt-get update -y -qq - apt-get install -y nasm mingw-w64 + sudo apt-get update -y -qq + sudo apt-get install -y nasm mingw-w64 - name: Build run: osu.Framework.NativeLibs/scripts/ffmpeg/build-win.sh @@ -86,6 +83,27 @@ jobs: name: win-${{ matrix.arch }} path: win-${{ matrix.arch }} + # The win-arm64 build runs in a special MinGW container to cross-compile successfully. + build-win-arm64: + name: Build Windows (arm64) + runs-on: ubuntu-22.04 + container: + image: mstorsjo/llvm-mingw:latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build + run: osu.Framework.NativeLibs/scripts/ffmpeg/build-win.sh + env: + arch: arm64 + + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: win-arm64 + path: win-arm64 + build-linux: name: Build Linux # Use 20.04 to target glibc 2.31 like the other native libs @@ -112,7 +130,7 @@ jobs: options: -v ${{ github.workspace }}:/workspace -w /workspace -e DEBIAN_FRONTEND=noninteractive run: | apt-get update -y -qq - apt-get install -y build-essential curl nasm libva-dev libvdpau-dev + apt-get install -y build-essential curl${{ matrix.arch == 'x86' || matrix.arch == 'x64' && ' nasm' || '' }} osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload @@ -128,25 +146,42 @@ jobs: - combine-macos - build-win - build-linux - strategy: - matrix: - include: - - { name: macOS-universal, path: osu.Framework.NativeLibs/runtimes/osx/native } - - { name: linux-arm64, path: osu.Framework.NativeLibs/runtimes/linux-arm64/native} - - { name: linux-arm, path: osu.Framework.NativeLibs/runtimes/linux-arm/native} - - { name: linux-x64, path: osu.Framework.NativeLibs/runtimes/linux-x64/native} - - { name: linux-x86, path: osu.Framework.NativeLibs/runtimes/linux-x86/native} - - { name: win-arm64, path: osu.Framework.NativeLibs/runtimes/win-arm64/native} - - { name: win-x64, path: osu.Framework.NativeLibs/runtimes/win-x64/native} - - { name: win-x86, path: osu.Framework.NativeLibs/runtimes/win-x86/native} steps: - name: Checkout uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: - name: ${{ matrix.name }} - path: ${{ matrix.path }} + name: macOS-universal + path: osu.Framework.NativeLibs/runtimes/osx/native + - uses: actions/download-artifact@v4 + with: + name: linux-arm64 + path: osu.Framework.NativeLibs/runtimes/linux-arm64/native + - uses: actions/download-artifact@v4 + with: + name: linux-arm + path: osu.Framework.NativeLibs/runtimes/linux-arm/native + - uses: actions/download-artifact@v4 + with: + name: linux-x64 + path: osu.Framework.NativeLibs/runtimes/linux-x64/native + - uses: actions/download-artifact@v4 + with: + name: linux-x86 + path: osu.Framework.NativeLibs/runtimes/linux-x86/native + - uses: actions/download-artifact@v4 + with: + name: win-arm64 + path: osu.Framework.NativeLibs/runtimes/win-arm64/native + - uses: actions/download-artifact@v4 + with: + name: win-x64 + path: osu.Framework.NativeLibs/runtimes/win-x64/native + - uses: actions/download-artifact@v4 + with: + name: win-x86 + path: osu.Framework.NativeLibs/runtimes/win-x86/native - uses: peter-evans/create-pull-request@v6 with: diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh index 7b14cc4b6c..f8da53f1c4 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh @@ -6,19 +6,6 @@ SCRIPT_PATH=$(pwd) popd > /dev/null source "$SCRIPT_PATH/common.sh" -FFMPEG_FLAGS+=( - # --enable-vaapi - # --enable-vdpau - # --enable-hwaccel='h264_vaapi,h264_vdpau' - # --enable-hwaccel='hevc_vaapi,hevc_vdpau' - # --enable-hwaccel='vp8_vaapi,vp8_vdpau' - # --enable-hwaccel='vp9_vaapi,vp9_vdpau' - - --target-os=linux -) - -pushd . > /dev/null - if [ $(uname -m) == "x86_64" ]; then ARCH="x64" elif [ $(uname -m) == "i686" ]; then @@ -32,6 +19,19 @@ else exit 1 fi +FFMPEG_FLAGS+=( + # --enable-vaapi + # --enable-vdpau + # --enable-hwaccel='h264_vaapi,h264_vdpau' + # --enable-hwaccel='hevc_vaapi,hevc_vdpau' + # --enable-hwaccel='vp8_vaapi,vp8_vdpau' + # --enable-hwaccel='vp9_vaapi,vp9_vdpau' + + --target-os=linux +) + +pushd . > /dev/null + prep_ffmpeg linux-$ARCH # Apply patch from upstream to fix errors with new binutils versions: # Ticket: https://fftrac-bg.ffmpeg.org/ticket/10405