Skip to content

Commit 57b3b96

Browse files
committed
Update runner & scripts to support aarch64 builds for linux
1 parent e68c31e commit 57b3b96

File tree

4 files changed

+63
-38
lines changed

4 files changed

+63
-38
lines changed

.github/workflows/build.yml

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,16 @@ env:
1616

1717
jobs:
1818
build-ubuntu:
19-
runs-on: ubuntu-22.04
19+
strategy:
20+
matrix:
21+
include:
22+
- runner: ubuntu-22.04
23+
arch: x86_64
24+
25+
- runner: ubuntu-22.04-arm
26+
arch: aarch64
27+
28+
runs-on: ${{ matrix.runner }}
2029
steps:
2130
- name: "Checkout repo"
2231
uses: actions/checkout@v4
@@ -39,12 +48,17 @@ jobs:
3948
- name: "Install system dependencies"
4049
run: |
4150
sudo apt update -qq
42-
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libudev-dev nasm ninja-build libbluetooth-dev
51+
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libudev-dev nasm ninja-build libbluetooth-dev appstream
4352
4453
- name: "Setup cmake"
45-
uses: jwlawson/actions-setup-cmake@v2
46-
with:
47-
cmake-version: '3.29.0'
54+
uses: lukka/get-cmake@v3.29.0
55+
56+
- name: Overwrite /usr/bin/mono
57+
# nuget downloaded by vcpkg fetch on aarch64 is a shell script. This
58+
# prevents vcpkg from trying and failing, to run it in mono.
59+
# https://github.com/microsoft/vcpkg/issues/46040
60+
if: matrix.arch == 'aarch64'
61+
run: sudo sh -c "mv /usr/bin/mono /usr/bin/mono-real && echo '#! /usr/bin/env bash\nif [ \"\$1\" = \"/usr/bin/nuget\" ]; then \$*; else /usr/bin/mono-real \$*; fi' > /usr/bin/mono && chmod 755 /usr/bin/mono"
4862

4963
- name: "Bootstrap vcpkg"
5064
run: |
@@ -63,7 +77,7 @@ jobs:
6377
mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \
6478
setapikey "${{ secrets.GITHUB_TOKEN }}" \
6579
-source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json"
66-
80+
6781
- name: "cmake"
6882
run: |
6983
cmake -S . -B build ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DCMAKE_C_COMPILER=/usr/bin/clang-15 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-15 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja
@@ -78,36 +92,20 @@ jobs:
7892
- name: Upload artifact
7993
uses: actions/upload-artifact@v4
8094
with:
81-
name: cemu-bin-linux-x64
95+
name: cemu-bin-linux-${{ matrix.arch }}
8296
path: ./bin/Cemu
8397

84-
build-appimage:
85-
runs-on: ubuntu-22.04
86-
needs: build-ubuntu
87-
steps:
88-
- name: Checkout Upstream Repo
89-
uses: actions/checkout@v4
90-
91-
- uses: actions/download-artifact@v4
92-
with:
93-
name: cemu-bin-linux-x64
94-
path: bin
95-
96-
- name: "Install system dependencies"
97-
run: |
98-
sudo apt update -qq
99-
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev nasm ninja-build appstream libbluetooth-dev
100-
10198
- name: "Build AppImage"
10299
run: |
103100
export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
104101
export DEPLOY_GTK_VERSION=3
102+
export CEMU_ARCH=${{ matrix.arch }}
105103
dist/linux/appimage.sh
106104
107105
- name: Upload artifact
108106
uses: actions/upload-artifact@v4
109107
with:
110-
name: cemu-appimage-x64
108+
name: cemu-appimage-${{ matrix.arch }}
111109
path: artifacts
112110

113111
build-windows:

.github/workflows/build_check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on:
1111
paths-ignore:
1212
- "*.md"
1313
branches:
14-
- main
14+
- linux-aarch64-appimage
1515

1616
jobs:
1717
build:

dependencies/ih264d/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required (VERSION 3.8)
1+
cmake_minimum_required (VERSION 3.8)
22

33
project ("ih264d")
44

@@ -183,6 +183,11 @@ target_sources(ih264d PRIVATE
183183
"decoder/arm/ih264d_function_selector.c"
184184
)
185185
target_compile_options(ih264d PRIVATE -DARMV8)
186+
187+
if(NOT MSVC)
188+
set(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp")
189+
endif()
190+
186191
if(APPLE)
187192
target_sources(ih264d PRIVATE "common/armv8/macos_arm_symbol_aliases.s")
188193
endif()

dist/linux/appimage.sh

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ if [[ -z "${GITHUB_WORKSPACE}" ]]; then
44
export GITHUB_WORKSPACE="."
55
fi
66

7-
curl -sSfLO "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
8-
chmod a+x linuxdeploy*.AppImage
9-
curl -sSfL https://github.com"$(curl https://github.com/probonopd/go-appimage/releases/expanded_assets/continuous | grep "mkappimage-.*-x86_64.AppImage" | head -n 1 | cut -d '"' -f 2)" -o mkappimage.AppImage
7+
if [[ -z "${CEMU_ARCH}" ]]; then
8+
export CEMU_ARCH="x86_64"
9+
fi
10+
11+
curl -sSfL "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-$CEMU_ARCH.AppImage" -o linuxdeploy.AppImage
12+
chmod a+x linuxdeploy.AppImage
13+
curl -sSfL https://github.com"$(curl https://github.com/probonopd/go-appimage/releases/expanded_assets/continuous | grep "mkappimage-.*-$CEMU_ARCH.AppImage" | head -n 1 | cut -d '"' -f 2)" -o mkappimage.AppImage
1014
chmod a+x mkappimage.AppImage
1115
curl -sSfLO "https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh"
1216
chmod a+x linuxdeploy-plugin-gtk.sh
1317
curl -sSfLO "https://github.com/darealshinji/linuxdeploy-plugin-checkrt/releases/download/continuous/linuxdeploy-plugin-checkrt.sh"
1418
chmod a+x linuxdeploy-plugin-checkrt.sh
1519

16-
if [[ ! -e /usr/lib/x86_64-linux-gnu ]]; then
17-
sed -i 's#lib\/x86_64-linux-gnu#lib64#g' linuxdeploy-plugin-gtk.sh
18-
fi
19-
2020
mkdir -p AppDir/usr/bin
2121
mkdir -p AppDir/usr/share/Cemu
2222
mkdir -p AppDir/usr/share/applications
@@ -32,11 +32,33 @@ cp -r bin/* AppDir/usr/share/Cemu
3232
mv AppDir/usr/share/Cemu/Cemu AppDir/usr/bin/
3333
chmod +x AppDir/usr/bin/Cemu
3434

35-
cp /usr/lib/x86_64-linux-gnu/{libsepol.so.1,libffi.so.7,libpcre.so.3,libGLU.so.1,libthai.so.0} AppDir/usr/lib
35+
libs=(
36+
libsepol.so
37+
libffi.so
38+
libpcre.so
39+
libGLU.so
40+
libthai.so
41+
)
42+
43+
for lib in "${libs[@]}"; do
44+
libpath="/usr/lib/$CEMU_ARCH-linux-gnu/$lib"
45+
46+
if [ ! -e "$libpath" ]; then
47+
libpath="/usr/lib/$lib"
48+
if [ ! -e "$libpath" ]; then
49+
echo "Library $lib not found at /usr/lib/$CEMU_ARCH-linux-gnu/$lib or /usr/lib/$lib, skipping."
50+
continue
51+
fi
52+
fi
53+
54+
libpath=$(realpath "$libpath")
55+
56+
cp "$libpath" AppDir/usr/lib
57+
done
3658

3759
export UPD_INFO="gh-releases-zsync|cemu-project|Cemu|ci|Cemu.AppImage.zsync"
3860
export NO_STRIP=1
39-
./linuxdeploy-x86_64.AppImage --appimage-extract-and-run \
61+
./linuxdeploy.AppImage --appimage-extract-and-run \
4062
--appdir="${GITHUB_WORKSPACE}"/AppDir/ \
4163
-d "${GITHUB_WORKSPACE}"/AppDir/info.cemu.Cemu.desktop \
4264
-i "${GITHUB_WORKSPACE}"/AppDir/info.cemu.Cemu.png \
@@ -49,9 +71,9 @@ if ! GITVERSION="$(git rev-parse --short HEAD 2>/dev/null)"; then
4971
fi
5072
echo "Cemu Version Cemu-${GITVERSION}"
5173

52-
rm AppDir/usr/lib/libwayland-client.so.0
74+
rm AppDir/usr/lib/libwayland-client.so.* || true
5375
echo -e "export LC_ALL=C\nexport FONTCONFIG_PATH=/etc/fonts" >> AppDir/apprun-hooks/linuxdeploy-plugin-gtk.sh
5476
VERSION="${GITVERSION}" ./mkappimage.AppImage --appimage-extract-and-run "${GITHUB_WORKSPACE}"/AppDir
5577

5678
mkdir -p "${GITHUB_WORKSPACE}"/artifacts/
57-
mv Cemu-"${GITVERSION}"-x86_64.AppImage "${GITHUB_WORKSPACE}"/artifacts/
79+
mv Cemu-"${GITVERSION}"-$CEMU_ARCH.AppImage "${GITHUB_WORKSPACE}"/artifacts/

0 commit comments

Comments
 (0)