diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml
index aa4a573496..7e7969fa29 100644
--- a/.github/workflows/build-ffmpeg.yml
+++ b/.github/workflows/build-ffmpeg.yml
@@ -185,6 +185,8 @@ jobs:
- name: Build
run: osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh
+ env:
+ arch: x64
- name: Upload
uses: actions/upload-artifact@v4
@@ -192,6 +194,24 @@ jobs:
name: linux-x64
path: linux-x64
+ build-linux-arm64:
+ name: Build Linux (arm64)
+ runs-on: ubuntu-22.04-arm
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Build
+ run: osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh
+ env:
+ arch: arm64
+
+ - name: Upload
+ uses: actions/upload-artifact@v4
+ with:
+ name: linux-arm64
+ path: linux-arm64
+
build-android:
name: Build Android
runs-on: ubuntu-22.04
@@ -244,6 +264,10 @@ jobs:
with:
name: linux-x64
path: osu.Framework.NativeLibs/runtimes/linux-x64/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: win-arm64
diff --git a/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavcodec.so.58 b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavcodec.so.58
new file mode 100755
index 0000000000..7028c503c4
Binary files /dev/null and b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavcodec.so.58 differ
diff --git a/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavformat.so.58 b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavformat.so.58
new file mode 100755
index 0000000000..5c16826449
Binary files /dev/null and b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavformat.so.58 differ
diff --git a/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavutil.so.56 b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavutil.so.56
new file mode 100755
index 0000000000..1130df11d6
Binary files /dev/null and b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libavutil.so.56 differ
diff --git a/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbass.so b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbass.so
new file mode 100644
index 0000000000..5729fb8bb4
Binary files /dev/null and b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbass.so differ
diff --git a/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbass_fx.so b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbass_fx.so
new file mode 100644
index 0000000000..44cf0e1372
Binary files /dev/null and b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbass_fx.so differ
diff --git a/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbassmix.so b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbassmix.so
new file mode 100644
index 0000000000..0bc77f6ddd
Binary files /dev/null and b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libbassmix.so differ
diff --git a/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libswscale.so.5 b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libswscale.so.5
new file mode 100755
index 0000000000..33837d2aac
Binary files /dev/null and b/osu.Framework.NativeLibs/runtimes/linux-arm64/native/libswscale.so.5 differ
diff --git a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh
index 5044d4e061..7468511a24 100755
--- a/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh
+++ b/osu.Framework.NativeLibs/scripts/ffmpeg/build-linux.sh
@@ -6,18 +6,43 @@ SCRIPT_PATH=$(pwd)
popd > /dev/null
source "$SCRIPT_PATH/common.sh"
+if [ -z "${arch-}" ]; then
+ PS3='Build for which arch? '
+ select arch in "x64" "arm64"; do
+ if [ -z "$arch" ]; then
+ echo "invalid option"
+ else
+ break
+ fi
+ done
+fi
+
+case $arch in
+ x64)
+ FFMPEG_FLAGS+=(
+ --arch=x86_64
+ )
+ ;;
+
+ arm64)
+ FFMPEG_FLAGS+=(
+ --arch=aarch64
+ )
+ ;;
+esac
+
FFMPEG_FLAGS+=(
--target-os=linux
)
pushd . > /dev/null
-prep_ffmpeg linux-x64
+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-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/update-bass.sh b/osu.Framework.NativeLibs/update-bass.sh
index 6e589db399..ba746860d6 100755
--- a/osu.Framework.NativeLibs/update-bass.sh
+++ b/osu.Framework.NativeLibs/update-bass.sh
@@ -9,6 +9,7 @@ curl -Lso bass24-arm64.zip https://www.un4seen.com/files/bass24-arm64.zip
unzip -qjo bass24-arm64.zip arm64/bass.dll -d runtimes/win-arm64/native/
curl -Lso bass-linux.zip https://www.un4seen.com/stuff/bass-linux.zip
+unzip -qjo bass-linux.zip aarch64/libbass.so -d runtimes/linux-arm64/native/
unzip -qjo bass-linux.zip x86/libbass.so -d runtimes/linux-x86/native/
unzip -qjo bass-linux.zip x86_64/libbass.so -d runtimes/linux-x64/native/
@@ -32,6 +33,7 @@ curl -Lso bass_fx-arm64.zip https://www.un4seen.com/stuff/bass_fx-arm64.zip
unzip -qjo bass_fx-arm64.zip bass_fx.dll -d runtimes/win-arm64/native/
curl -Lso bass_fx-linux.zip https://www.un4seen.com/stuff/bass_fx-linux.zip
+unzip -qjo bass_fx-linux.zip aarch64/libbass_fx.so -d runtimes/linux-arm64/native/
unzip -qjo bass_fx-linux.zip x86/libbass_fx.so -d runtimes/linux-x86/native/
unzip -qjo bass_fx-linux.zip x86_64/libbass_fx.so -d runtimes/linux-x64/native/
@@ -55,6 +57,7 @@ unzip -qjo bassmix24.zip bassmix.dll -d runtimes/win-x86/native/
unzip -qjo bass24-arm64.zip arm64/bassmix.dll -d runtimes/win-arm64/native/
curl -Lso bassmix24-linux.zip https://www.un4seen.com/stuff/bassmix-linux.zip
+unzip -qjo bassmix24-linux.zip aarch64/libbassmix.so -d runtimes/linux-arm64/native/
unzip -qjo bassmix24-linux.zip x86/libbassmix.so -d runtimes/linux-x86/native/
unzip -qjo bassmix24-linux.zip x86_64/libbassmix.so -d runtimes/linux-x64/native/
diff --git a/osu.Framework/osu.Framework.csproj b/osu.Framework/osu.Framework.csproj
index ce70796b37..6039899674 100644
--- a/osu.Framework/osu.Framework.csproj
+++ b/osu.Framework/osu.Framework.csproj
@@ -27,7 +27,7 @@
-
+