From 26f578bb67e29bd947e7433e294dc77e2e69a5dd Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 10:23:33 +0200 Subject: [PATCH 01/23] add linux targets --- .../scripts/ffmpeg/build-linux.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh index d3d52129b2..94a95a7fd8 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh @@ -18,7 +18,21 @@ FFMPEG_FLAGS+=( ) pushd . > /dev/null -prep_ffmpeg linux-x64 + +if [ $(uname -m) == "x86_64" ]; then + ARCH="x86_64" +elif [ $(uname -m) == "i686" ]; then + ARCH="x86" +elif [ $(uname -m) == "aarch64" ]; then + ARCH="arm64" +elif [ $(uname -m) == "armv7l" ]; then + ARCH="arm" +else + echo "Unsupported architecture: $(uname -m)" + exit 1 +fi + +prep_ffmpeg "linux-${ARCH}" # Apply patch from upstream to fix errors with new binutils versions: # Ticket: https://fftrac-bg.ffmpeg.org/ticket/10405 # This patch should be removed when FFmpeg is updated to >=6.1 From 3c27bf7f20299eac9b6c213050f15c927cb5edd2 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 10:31:00 +0200 Subject: [PATCH 02/23] add targets (2) --- .../scripts/ffmpeg/build-linux.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh index 94a95a7fd8..6856d63c34 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh @@ -20,19 +20,32 @@ FFMPEG_FLAGS+=( pushd . > /dev/null if [ $(uname -m) == "x86_64" ]; then + FFMPEG_FLAGS+=( + --arch=x86_64 + ) ARCH="x86_64" elif [ $(uname -m) == "i686" ]; then + FFMPEG_FLAGS+=( + --arch=x86 + ) ARCH="x86" + elif [ $(uname -m) == "aarch64" ]; then + FFMPEG_FLAGS+=( + --arch=arm64 + ) ARCH="arm64" elif [ $(uname -m) == "armv7l" ]; then + FFMPEG_FLAGS+=( + --arch=arm + ) ARCH="arm" else echo "Unsupported architecture: $(uname -m)" exit 1 fi -prep_ffmpeg "linux-${ARCH}" +prep_ffmpeg linux-$ARCH # Apply patch from upstream to fix errors with new binutils versions: # Ticket: https://fftrac-bg.ffmpeg.org/ticket/10405 # This patch should be removed when FFmpeg is updated to >=6.1 From 939b2c13fcc0eb61ca5b53139258c03023427f2a Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 10:38:48 +0200 Subject: [PATCH 03/23] log stuff --- osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh | 4 ++-- osu.Framework.NativeLibs/scripts/ffmpeg/common.sh | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh index 6856d63c34..4360e3a309 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh @@ -21,9 +21,9 @@ pushd . > /dev/null if [ $(uname -m) == "x86_64" ]; then FFMPEG_FLAGS+=( - --arch=x86_64 + --arch=x64 ) - ARCH="x86_64" + ARCH="x64" elif [ $(uname -m) == "i686" ]; then FFMPEG_FLAGS+=( --arch=x86 diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh index 7753867dca..259332d1da 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh @@ -34,6 +34,9 @@ function prep_ffmpeg() { --shlibdir="$PWD/$1" ) + echo "--prefix=$PWD/$1" + echo "--shlibdir=$PWD/$1" + local build_dir="$1-build" if [ ! -e "$FFMPEG_FILE" ]; then echo "-> Downloading $FFMPEG_FILE..." From 5c8ce4fe5c409379d1465e54ddb55ad89f651b9f Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:26:55 +0200 Subject: [PATCH 04/23] build using docker --- .github/workflows/build-ffmpeg.yml | 30 +++++++++++++------ .../scripts/ffmpeg/build-linux.sh | 17 ++--------- .../scripts/ffmpeg/common.sh | 3 -- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index aebd3de365..bba4cd0809 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -105,26 +105,38 @@ jobs: path: win-arm64 build-linux: - name: Build Linux (x64) + name: Build Linux (${{ matrix.arch }}) # Use 20.04 to target glibc 2.31 like the other native libs runs-on: ubuntu-20.04 + strategy: + matrix: + include: + - { arch: x64, container: ubuntu:20.04 } + - { arch: x86, container: i386/ubuntu:20.04 } + - { arch: arm64, container: arm64v8/ubuntu:20.04 } + - { arch: arm, container: arm32v7/ubuntu:20.04 } steps: - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install nasm libva-dev libvdpau-dev - - name: Checkout uses: actions/checkout@v4 + - name: Setup QEMU + if: ${{ contains(matrix.arch, 'arm') }} + uses: docker/setup-qemu-action@v2 + - name: Build - run: osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh + uses: addnab/docker-run-action@v3 + with: + image: ${{ matrix.container }} + run: | + sudo apt-get update + sudo apt-get install nasm libva-dev libvdpau-dev + osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload uses: actions/upload-artifact@v4 with: - name: linux-x64 - path: linux-x64 + name: linux-${{ matrix.arch }} + path: linux-${{ matrix.arch }} make-pr: name: Create pull request diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh index 4360e3a309..7b14cc4b6c 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh @@ -20,25 +20,12 @@ FFMPEG_FLAGS+=( pushd . > /dev/null if [ $(uname -m) == "x86_64" ]; then - FFMPEG_FLAGS+=( - --arch=x64 - ) ARCH="x64" elif [ $(uname -m) == "i686" ]; then - FFMPEG_FLAGS+=( - --arch=x86 - ) ARCH="x86" - elif [ $(uname -m) == "aarch64" ]; then - FFMPEG_FLAGS+=( - --arch=arm64 - ) ARCH="arm64" elif [ $(uname -m) == "armv7l" ]; then - FFMPEG_FLAGS+=( - --arch=arm - ) ARCH="arm" else echo "Unsupported architecture: $(uname -m)" @@ -55,7 +42,7 @@ popd > /dev/null # gcc creates multiple symlinks per .so file for versioning. # We delete the symlinks and rename the real files to include the major library version -rm linux-x64/*.so -for f in linux-x64/*.so.*.*.*; do +rm linux-$ARCH/*.so +for f in linux-$ARCH/*.so.*.*.*; do mv -vf "$f" "${f%.*.*}" done diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh index 259332d1da..7753867dca 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh @@ -34,9 +34,6 @@ function prep_ffmpeg() { --shlibdir="$PWD/$1" ) - echo "--prefix=$PWD/$1" - echo "--shlibdir=$PWD/$1" - local build_dir="$1-build" if [ ! -e "$FFMPEG_FILE" ]; then echo "-> Downloading $FFMPEG_FILE..." From f067a171d414e800a9cac1e53685a1dc91ef7d00 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:39:51 +0200 Subject: [PATCH 05/23] container in quotes --- .github/workflows/build-ffmpeg.yml | 39 +++++++++++++----------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index bba4cd0809..64dff8da79 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -111,10 +111,10 @@ jobs: strategy: matrix: include: - - { arch: x64, container: ubuntu:20.04 } - - { arch: x86, container: i386/ubuntu:20.04 } - - { arch: arm64, container: arm64v8/ubuntu:20.04 } - - { arch: arm, container: arm32v7/ubuntu:20.04 } + - { arch: x64, container: "ubuntu:20.04" } + - { arch: x86, container: "i386/ubuntu:20.04" } + - { arch: arm64, container: "arm64v8/ubuntu:20.04" } + - { arch: arm, container: "arm32v7/ubuntu:20.04" } steps: - name: Checkout uses: actions/checkout@v4 @@ -146,30 +146,25 @@ jobs: - build-win - build-win-arm64 - 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: macOS-universal - path: osu.Framework.NativeLibs/runtimes/osx/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: 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 + name: ${{ matrix.name }} + path: ${{ matrix.path }} - uses: peter-evans/create-pull-request@v6 with: From 78217655e365440fa4e666a2071951cd58f8f169 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:46:33 +0200 Subject: [PATCH 06/23] pass workspace --- .github/workflows/build-ffmpeg.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 64dff8da79..e25ebe7699 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -127,6 +127,7 @@ jobs: uses: addnab/docker-run-action@v3 with: image: ${{ matrix.container }} + options: -v ${{ github.workspace }}:/workspace -w /workspace run: | sudo apt-get update sudo apt-get install nasm libva-dev libvdpau-dev From f2606489651789f5447565ade7eded62bba6c129 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:48:10 +0200 Subject: [PATCH 07/23] install build-essential --- .github/workflows/build-ffmpeg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index e25ebe7699..44257de6e9 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -130,7 +130,7 @@ jobs: options: -v ${{ github.workspace }}:/workspace -w /workspace run: | sudo apt-get update - sudo apt-get install nasm libva-dev libvdpau-dev + sudo apt-get install build-essential curl nasm libva-dev libvdpau-dev osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload From f226655be748103155a0481fee4bf28396973bb7 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:49:32 +0200 Subject: [PATCH 08/23] install more --- .github/workflows/build-ffmpeg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 44257de6e9..43a5c8eab4 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -130,7 +130,7 @@ jobs: options: -v ${{ github.workspace }}:/workspace -w /workspace run: | sudo apt-get update - sudo apt-get install build-essential curl nasm libva-dev libvdpau-dev + sudo apt-get install build-essential curl sudo nasm libva-dev libvdpau-dev osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload From 240a955a72613cda30f796a2823c39073cb7703b Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:53:30 +0200 Subject: [PATCH 09/23] merge windows --- .github/workflows/build-ffmpeg.yml | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 43a5c8eab4..e719fe7fb0 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -55,14 +55,17 @@ jobs: path: macOS-universal build-win: - name: Build Windows + name: Build Windows (${{ matrix.arch }}) runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: arch: - - x86 - x64 + - x86 + - arm64 + container: + image: mstorsjo/llvm-mingw:latest steps: - name: Checkout uses: actions/checkout@v4 @@ -83,27 +86,6 @@ 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 (${{ matrix.arch }}) # Use 20.04 to target glibc 2.31 like the other native libs @@ -145,7 +127,6 @@ jobs: needs: - combine-macos - build-win - - build-win-arm64 - build-linux strategy: matrix: From 3e1a3e44adf8af5b6899d9184aa71bc8cc2e3e70 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:56:06 +0200 Subject: [PATCH 10/23] remove sudo --- .github/workflows/build-ffmpeg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index e719fe7fb0..254cc9bf28 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -72,8 +72,8 @@ jobs: - name: Install dependencies run: | - sudo apt-get update - sudo apt-get install nasm mingw-w64 + apt-get update + apt-get install nasm mingw-w64 - name: Build run: osu.Framework.NativeLibs/scripts/ffmpeg/build-win.sh From 991b0d97656bdc1dd8ec9919b83bceeda8be0d6d Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:57:39 +0200 Subject: [PATCH 11/23] remove sudo --- .github/workflows/build-ffmpeg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 254cc9bf28..3360c112fb 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -111,8 +111,8 @@ jobs: image: ${{ matrix.container }} options: -v ${{ github.workspace }}:/workspace -w /workspace run: | - sudo apt-get update - sudo apt-get install build-essential curl sudo nasm libva-dev libvdpau-dev + apt-get update + apt-get install build-essential curl sudo nasm libva-dev libvdpau-dev osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload From ffaf5ddf84c958cf5300e96984b99525425f9994 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 11:58:06 +0200 Subject: [PATCH 12/23] remove sudo --- .github/workflows/build-ffmpeg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 3360c112fb..8d08ca5bf3 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -112,7 +112,7 @@ jobs: options: -v ${{ github.workspace }}:/workspace -w /workspace run: | apt-get update - apt-get install build-essential curl sudo nasm libva-dev libvdpau-dev + apt-get install build-essential curl nasm libva-dev libvdpau-dev osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload From 2cdec6aa89312472b243ed79a19640942bc10a0e Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 12:01:25 +0200 Subject: [PATCH 13/23] confirm --- .github/workflows/build-ffmpeg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 8d08ca5bf3..b5422f4861 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -111,8 +111,8 @@ jobs: image: ${{ matrix.container }} options: -v ${{ github.workspace }}:/workspace -w /workspace run: | - apt-get update - apt-get install build-essential curl nasm libva-dev libvdpau-dev + apt-get update -y -qq + apt-get install -y build-essential curl nasm libva-dev libvdpau-dev osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload From 0972bd3e068d7b82889ce8bc9ea91bac5b3176de Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 12:03:00 +0200 Subject: [PATCH 14/23] confirm --- .github/workflows/build-ffmpeg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index b5422f4861..a74b8d2289 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -72,8 +72,8 @@ jobs: - name: Install dependencies run: | - apt-get update - apt-get install nasm mingw-w64 + apt-get update -y -qq + apt-get install -y nasm mingw-w64 - name: Build run: osu.Framework.NativeLibs/scripts/ffmpeg/build-win.sh From 8793a3a6d0ce9387e6a7fabf1fc28292995ed7b1 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 12:08:49 +0200 Subject: [PATCH 15/23] make noninteractive --- .github/workflows/build-ffmpeg.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index a74b8d2289..373df4ef94 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -109,10 +109,10 @@ jobs: uses: addnab/docker-run-action@v3 with: image: ${{ matrix.container }} - options: -v ${{ github.workspace }}:/workspace -w /workspace + 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 update + apt-get install build-essential curl nasm libva-dev libvdpau-dev osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload From bf113a86084ddd571acab070519616aae2496388 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 12:10:46 +0200 Subject: [PATCH 16/23] -y --- .github/workflows/build-ffmpeg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 373df4ef94..8690740662 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -111,8 +111,8 @@ jobs: image: ${{ matrix.container }} options: -v ${{ github.workspace }}:/workspace -w /workspace -e DEBIAN_FRONTEND=noninteractive run: | - apt-get update - apt-get install build-essential curl nasm libva-dev libvdpau-dev + apt-get update -y -qq + apt-get install -y build-essential curl nasm libva-dev libvdpau-dev osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload From 64d129a12c6796ce8a1edf534f945d6c82a5808e Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 19 May 2024 12:11:12 +0200 Subject: [PATCH 17/23] latest --- .github/workflows/build-ffmpeg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 8690740662..8b7568e979 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-12 + runs-on: macos-latest strategy: fail-fast: false matrix: From 6452d45a08f9613d23ae6f20846a508276531d6b Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Tue, 4 Jun 2024 20:36:34 +0200 Subject: [PATCH 18/23] remove arch from name Co-authored-by: FreezyLemon --- .github/workflows/build-ffmpeg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 8b7568e979..a705f187e2 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -87,7 +87,7 @@ jobs: path: win-${{ matrix.arch }} build-linux: - name: Build Linux (${{ matrix.arch }}) + name: Build Linux # Use 20.04 to target glibc 2.31 like the other native libs runs-on: ubuntu-20.04 strategy: From 44d68e508ed76cf150eb5337364a488e562af9d7 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sat, 6 Jul 2024 02:46:03 +0000 Subject: [PATCH 19/23] fix linux-x86 builds by disabling asm --- osu.Framework.NativeLibs/scripts/ffmpeg/common.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh index 522b177112..b2353d015d 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh @@ -56,6 +56,12 @@ function prep_ffmpeg() { function build_ffmpeg() { echo "-> Configuring..." + if [ "$arch" = "x86" ]; then + FFMPEG_FLAGS+=( + --disable-asm + ) + fi + ./configure "${FFMPEG_FLAGS[@]}" echo "-> Building using $CORES threads..." From 5b9ae47eb72bb746df4644cc9c681c57235d8709 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sat, 6 Jul 2024 02:52:01 +0000 Subject: [PATCH 20/23] move arch to the top --- .../scripts/ffmpeg/build-linux.sh | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh index 01786ac379..d7ad8923f4 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh @@ -6,36 +6,31 @@ SCRIPT_PATH=$(pwd) popd > /dev/null source "$SCRIPT_PATH/common.sh" +if [ "$(dpkg --print-architecture)" = "amd64" ]; then + arch="x64" +elif [ "$(dpkg --print-architecture)" = "i386" ]; then + arch="x86" +elif [ "$(dpkg --print-architecture)" = "arm64" ]; then + arch="arm64" +elif [ "$(dpkg --print-architecture)" = "armhf" ]; then + arch="arm" +else + echo "Unsupported architecture: $(dpkg --print-architecture)" + exit 1 +fi + FFMPEG_FLAGS+=( --target-os=linux ) pushd . > /dev/null - -if [ $(uname -m) == "x86_64" ]; then - ARCH="x64" -elif [ $(uname -m) == "i686" ]; then - ARCH="x86" -elif [ $(uname -m) == "aarch64" ]; then - ARCH="arm64" -elif [ $(uname -m) == "armv7l" ]; then - ARCH="arm" -else - echo "Unsupported architecture: $(uname -m)" - exit 1 -fi - -prep_ffmpeg linux-$ARCH -# Apply patch from upstream to fix errors with new binutils versions: -# Ticket: https://fftrac-bg.ffmpeg.org/ticket/10405 -# This patch should be removed when FFmpeg is updated to >=6.1 -patch -p1 < "$SCRIPT_PATH/fix-binutils-2.41.patch" +prep_ffmpeg linux-$arch build_ffmpeg popd > /dev/null # gcc creates multiple symlinks per .so file for versioning. # We delete the symlinks and rename the real files to include the major library version -rm linux-$ARCH/*.so -for f in linux-$ARCH/*.so.*.*.*; do +rm linux-$arch/*.so +for f in linux-$arch/*.so.*.*.*; do mv -vf "$f" "${f%.*.*}" done From a2a0102b2cdbfaf30949e9b575444a80f99f5fc2 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sat, 6 Jul 2024 02:53:59 +0000 Subject: [PATCH 21/23] revert changes unrelated to this pr --- .github/workflows/build-ffmpeg.yml | 155 ++++++++++++++++++++++++----- 1 file changed, 132 insertions(+), 23 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 276e6fe074..d35babcf29 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: @@ -122,25 +122,22 @@ jobs: path: iOS-xcframework 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 + sudo apt-get install nasm mingw-w64 - name: Build run: osu.Framework.NativeLibs/scripts/ffmpeg/build-win.sh @@ -153,14 +150,56 @@ 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 (x64) + # Use 20.04 to target glibc 2.31 like the other native libs + runs-on: ubuntu-20.04 + steps: + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install nasm + + - name: Checkout + uses: actions/checkout@v4 + + - name: Build + run: osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh + + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: linux-x64 + path: linux-x64 + + build-linux-cross: name: Build Linux # Use 20.04 to target glibc 2.31 like the other native libs runs-on: ubuntu-20.04 strategy: matrix: include: - - { arch: x64, container: "ubuntu:20.04" } - { arch: x86, container: "i386/ubuntu:20.04" } - { arch: arm64, container: "arm64v8/ubuntu:20.04" } - { arch: arm, container: "arm32v7/ubuntu:20.04" } @@ -179,7 +218,11 @@ 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 + if [ "$(dpkg --print-architecture)" = "i386" ]; then + apt-get install -y nasm + fi + osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh - name: Upload @@ -188,6 +231,32 @@ jobs: name: linux-${{ matrix.arch }} path: linux-${{ matrix.arch }} + build-android: + name: Build Android + runs-on: ubuntu-22.04 + strategy: + matrix: + arch: + - armeabi-v7a + - arm64-v8a + - x86 + - x86_64 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build + run: osu.Framework.NativeLibs/scripts/ffmpeg/build-android.sh + env: + arch: ${{ matrix.arch }} + + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: android-${{ matrix.arch }} + path: android-${{ matrix.arch }} + make-pr: name: Create pull request runs-on: ubuntu-22.04 @@ -195,26 +264,66 @@ jobs: - combine-macos - combine-iOS - build-win + - build-win-arm64 - 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} + - build-linux-cross + - build-android 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: iOS-xcframework + path: osu.Framework.iOS/runtimes/ios/native + - uses: actions/download-artifact@v4 + with: + name: linux-arm64 + path: osu.Framework.NativeLibs/runtimes/linux-x64/native + - uses: actions/download-artifact@v4 + with: + name: linux-arm + path: osu.Framework.NativeLibs/runtimes/linux-x64/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-x64/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: actions/download-artifact@v4 + with: + name: android-armeabi-v7a + path: osu.Framework.Android/armeabi-v7a + - uses: actions/download-artifact@v4 + with: + name: android-arm64-v8a + path: osu.Framework.Android/arm64-v8a + - uses: actions/download-artifact@v4 + with: + name: android-x86 + path: osu.Framework.Android/x86 + - uses: actions/download-artifact@v4 + with: + name: android-x86_64 + path: osu.Framework.Android/x86_64 - uses: peter-evans/create-pull-request@v6 with: From 7824a71158009bf131affb02fa8d2fab5e7567cb Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sat, 6 Jul 2024 10:55:33 +0200 Subject: [PATCH 22/23] fix linux paths --- .github/workflows/build-ffmpeg.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index d35babcf29..6e565811b1 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -283,11 +283,11 @@ jobs: - uses: actions/download-artifact@v4 with: name: linux-arm64 - path: osu.Framework.NativeLibs/runtimes/linux-x64/native + path: osu.Framework.NativeLibs/runtimes/linux-arm64/native - uses: actions/download-artifact@v4 with: name: linux-arm - path: osu.Framework.NativeLibs/runtimes/linux-x64/native + path: osu.Framework.NativeLibs/runtimes/linux-arm/native - uses: actions/download-artifact@v4 with: name: linux-x64 @@ -295,7 +295,7 @@ jobs: - uses: actions/download-artifact@v4 with: name: linux-x86 - path: osu.Framework.NativeLibs/runtimes/linux-x64/native + path: osu.Framework.NativeLibs/runtimes/linux-x86/native - uses: actions/download-artifact@v4 with: name: win-arm64 From 2c821117de38eb3ed0689e3e8a4f10330969dd0f Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sat, 6 Jul 2024 11:18:13 +0200 Subject: [PATCH 23/23] only disable asm on linux-x86 --- osu.Framework.NativeLibs/scripts/ffmpeg/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh index b2353d015d..707d088922 100755 --- a/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh +++ b/osu.Framework.NativeLibs/scripts/ffmpeg/common.sh @@ -56,7 +56,7 @@ function prep_ffmpeg() { function build_ffmpeg() { echo "-> Configuring..." - if [ "$arch" = "x86" ]; then + if [ "$arch" = "x86" ] && [ "$(uname -s)" = "Linux" ]; then FFMPEG_FLAGS+=( --disable-asm )