From 7e2760ea2770c433492bc15ca2decbe86bee2d20 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Tue, 20 Jan 2026 13:03:03 +0800 Subject: [PATCH] arm linux build? (#629) * arm build? * try newer vulkan * dont think this will work but try anyway * Update build.yml --- .github/workflows/build-test.yml | 3 ++ .github/workflows/build.yml | 51 +++++++++++++++++++++-------- .github/workflows/pr-test-build.yml | 3 ++ .github/workflows/release.yml | 3 ++ 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 6eee005..9ab97cc 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -22,6 +22,9 @@ jobs: - platform: "ubuntu-24.04" # Build AppImage and RPM on 24.04 args: "--bundles appimage,rpm" target: "x86_64-unknown-linux-gnu" + - platform: "ubuntu-24.04-arm" # Build for ARM64 Linux + args: "--bundles appimage,deb,rpm" + target: "aarch64-unknown-linux-gnu" - platform: "windows-latest" args: "" target: "x86_64-pc-windows-msvc" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ab70571..395d7f9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -101,8 +101,8 @@ jobs: workspaces: "./src-tauri -> target" key: ${{ inputs.platform }}-${{ inputs.target }} - - name: install dependencies (ubuntu 24.04) - if: contains(inputs.platform, 'ubuntu-24.04') + - name: install dependencies (ubuntu 24.04 x64) + if: contains(inputs.platform, 'ubuntu-24.04') && !contains(inputs.platform, 'arm') run: | sudo apt-get update sudo apt-get install -y libappindicator3-dev librsvg2-dev patchelf libasound2-dev libopenblas-dev libx11-dev libxtst-dev libxrandr-dev \ @@ -113,8 +113,14 @@ jobs: gir1.2-javascriptcoregtk-4.1=2.44.0-2 \ gir1.2-webkit2-4.1=2.44.0-2 + - name: install dependencies (ubuntu 24.04 arm64) + if: contains(inputs.platform, 'ubuntu-24.04-arm') + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libasound2-dev libopenblas-dev libx11-dev libxtst-dev libxrandr-dev xdg-utils + - name: install dependencies (ubuntu 22.04) - if: contains(inputs.platform, 'ubuntu-22.04') + if: contains(inputs.platform, 'ubuntu-22.04') && !contains(inputs.platform, 'arm') run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libasound2-dev libopenblas-dev libx11-dev libxtst-dev libxrandr-dev @@ -172,7 +178,7 @@ jobs: run: cargo install trusted-signing-cli - name: Prepare Vulkan SDK for Ubuntu 24.04 - if: contains(inputs.platform, 'ubuntu-24.04') + if: contains(inputs.platform, 'ubuntu-24.04') && !contains(inputs.platform, 'arm') run: | wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-noble.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-noble.list @@ -180,8 +186,21 @@ jobs: sudo apt install vulkan-sdk -y sudo apt-get install -y mesa-vulkan-drivers + - name: Prepare Vulkan SDK for Ubuntu ARM64 + if: contains(inputs.platform, 'ubuntu') && contains(inputs.platform, 'arm') + uses: jakoch/install-vulkan-sdk-action@v1 + with: + vulkan_version: 1.4.335.0 + cache: true + + - name: Install Vulkan runtime libraries (Ubuntu ARM64) + if: contains(inputs.platform, 'ubuntu') && contains(inputs.platform, 'arm') + run: | + sudo apt-get update + sudo apt-get install -y libvulkan-dev mesa-vulkan-drivers + - name: Prepare Vulkan SDK for Ubuntu 22.04 - if: contains(inputs.platform, 'ubuntu-22.04') + if: contains(inputs.platform, 'ubuntu-22.04') && !contains(inputs.platform, 'arm') run: | wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list @@ -198,7 +217,7 @@ jobs: run: bun install --cpu=arm64 - name: rustup install target - if: ${{ inputs.target != '' && !contains(inputs.target, 'unknown-linux-gnu') && !contains(inputs.target, 'x86_64-pc-windows-msvc') }} + if: ${{ inputs.target != '' && !contains(inputs.target, 'x86_64-unknown-linux-gnu') && !contains(inputs.target, 'aarch64-unknown-linux-gnu') && !contains(inputs.target, 'x86_64-pc-windows-msvc') }} run: rustup target add ${{ inputs.target }} - name: import Apple Developer Certificate @@ -254,8 +273,8 @@ jobs: AZURE_TENANT_ID: ${{ inputs.sign-binaries && secrets.AZURE_TENANT_ID || '' }} TAURI_SIGNING_PRIVATE_KEY: ${{ inputs.sign-binaries && secrets.TAURI_SIGNING_PRIVATE_KEY || '' }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ inputs.sign-binaries && secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD || '' }} - WHISPER_NO_AVX: ${{ contains(inputs.platform, 'ubuntu') && 'ON' || '' }} - WHISPER_NO_AVX2: ${{ contains(inputs.platform, 'ubuntu') && 'ON' || '' }} + WHISPER_NO_AVX: ${{ contains(inputs.platform, 'ubuntu') && !contains(inputs.platform, 'arm') && 'ON' || '' }} + WHISPER_NO_AVX2: ${{ contains(inputs.platform, 'ubuntu') && !contains(inputs.platform, 'arm') && 'ON' || '' }} with: tagName: ${{ inputs.release-id && format('v{0}', steps.get-version.outputs.version) || '' }} releaseName: ${{ inputs.release-id && format('v{0}', steps.get-version.outputs.version) || '' }} @@ -309,15 +328,21 @@ jobs: ls "$dir" | grep -E "(wayland|fuse)" || echo " No wayland/fuse libraries found" done - # Get appimagetool - wget -q https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage - chmod +x appimagetool-x86_64.AppImage + # Detect architecture and get appropriate appimagetool + if [[ "$(uname -m)" == "aarch64" ]]; then + APPIMAGETOOL_ARCH="aarch64" + else + APPIMAGETOOL_ARCH="x86_64" + fi + + wget -q "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-${APPIMAGETOOL_ARCH}.AppImage" + chmod +x "appimagetool-${APPIMAGETOOL_ARCH}.AppImage" # Repackage AppImage with no-appstream to avoid warnings - ARCH=x86_64 ./appimagetool-x86_64.AppImage --no-appstream squashfs-root "$APPIMAGE_NAME" + ARCH="${APPIMAGETOOL_ARCH}" "./appimagetool-${APPIMAGETOOL_ARCH}.AppImage" --no-appstream squashfs-root "$APPIMAGE_NAME" # Clean up - rm -rf squashfs-root appimagetool-x86_64.AppImage + rm -rf squashfs-root "appimagetool-${APPIMAGETOOL_ARCH}.AppImage" echo "libwayland-client.so removed from AppImage successfully" else diff --git a/.github/workflows/pr-test-build.yml b/.github/workflows/pr-test-build.yml index 2134258..3e214ea 100644 --- a/.github/workflows/pr-test-build.yml +++ b/.github/workflows/pr-test-build.yml @@ -28,6 +28,9 @@ jobs: - platform: "ubuntu-24.04" args: "--bundles appimage,rpm" target: "x86_64-unknown-linux-gnu" + - platform: "ubuntu-24.04-arm" # Build for ARM64 Linux + args: "--bundles appimage,deb,rpm" + target: "aarch64-unknown-linux-gnu" - platform: "windows-latest" args: "" target: "x86_64-pc-windows-msvc" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e7287b..739c278 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,6 +58,9 @@ jobs: - platform: "ubuntu-24.04" # Build AppImage and RPM on 24.04 args: "--bundles appimage,rpm" target: "x86_64-unknown-linux-gnu" + - platform: "ubuntu-24.04-arm" # Build for ARM64 Linux + args: "--bundles appimage,deb,rpm" + target: "aarch64-unknown-linux-gnu" - platform: "windows-latest" args: "" target: "x86_64-pc-windows-msvc"