This guide documents the process for building Upscayl on aarch64 Linux systems, specifically on Asahi Linux (Fedora), but should be translatable to other aarch64 systems.
Install the required dependencies:
sudo dnf install vulkan-headers vulkan-loader-devel glslang libstdc++-static clang
Electron-builder bundles an x86 version of FPM which doesn't work on aarch64. To build RPM or DEB packages, install the system FPM:
sudo dnf install ruby ruby-devel gcc make rpm-build
sudo gem install fpm
The bundled upscayl-bin binary is x86-64 and must be rebuilt for aarch64.
git clone https://github.com/upscayl/upscayl-ncnn.git
cd upscayl-ncnn
git submodule update --init --recursive
GCC 15 has compatibility issues with ncnn's ARM assembly code (i8mm/fp16 vector instructions). Use Clang instead:
mkdir build && cd build
CC=clang CXX=clang++ cmake ../src
cmake --build . -j$(nproc)
This produces the upscayl-bin binary in the build directory.
Copy the built binary to the Upscayl resources:
cp upscayl-bin /path/to/upscayl/resources/linux/bin/
cd /path/to/upscayl
npm install
The default build targets x86-64. Explicitly specify arm64. Use USE_SYSTEM_FPM=true to build RPM/DEB packages (the bundled FPM is x86-only):
npm run build
USE_SYSTEM_FPM=true npx electron-builder --linux --arm64
This creates:
dist/linux-arm64-unpacked/ - Unpacked application directorydist/upscayl-2.15.0-linux.AppImage - AppImage (may not work on all systems)dist/upscayl-2.15.0-linux.zip - Zip archivedist/upscayl-2.15.0-linux.rpm - RPM packagedist/upscayl-2.15.0-linux.deb - DEB packageRun the application from the unpacked directory:
./dist/linux-arm64-unpacked/upscayl
Or install the RPM (on Fedora):
sudo dnf install ./dist/upscayl-2.15.0-linux.rpm