Raspberry Pi version?

I have successfully compiled and tested aseprite 1.2.X and 1.3.X-beta with skia laf backend that is working well on the Raspberry Pi 2, 3, 4 and 400 model with OpenGL enabled. It is probably working on Pi Zero 2 as well (untested).
aseprite is not working on Raspberry Pi 1 and Raspberry Pi Zero 1 due to missing support for armv7 instructions on the CPU.

Compilation took about 2h on a Raspberry Pi 400 board. (it took 7gb of c++ sourcecode and generated objectfiles to link the final 19Mb aseprite binary :slight_smile: )
During the compilation i had to pass -latomic to the linker in order for the final aseprite executable to link.

The application uses about 50mb of memory thus with a minimal X11 system aseprite + windomanager uses only 10% of the available memory of a Raspberry Pi 2 with 1gb of RAM.

I had to build my own version of gn, ninja and the skia “aseprite-m96” branch for “armhf” (32bit armv7) to make the build compatible with a standard Raspberry Pi Raspbian install.

I am not able to publish the binarys due to the aseprite license, unless @dacap wants to publish them ARM / Raspberry Pi support · Issue #2835 · aseprite/aseprite · GitHub , but I can prepare prebuilt versions of
gn, ninja and skia that would allow you to compile and perform the final linking of the aseprite binary in about 30 minutes on a Raspberry Pi. Instructions below:


Testing and running aseprite 1.3.x beta on various Raspberry Pi models. Both HDMI out and the official 7" TFT work.

My precompile version of skia for Raspberry Pi ARM Linux 32bit can be found at: https://www.gudinna.com/projects/aseprite/skia/aseprite-m96/Skia-Linux-Release-ARM32.zip

compile instructions

# lines starting with # are comment
# lines without # are to be copied and run on the raspberry pi command line
# 2Gb of ram is required to complete the build
# about 2.5Gb of disk space will be consumed during the build
# install dependencies
sudo apt-get install -y clang cmake ninja-build libx11-dev libxcursor-dev libxi-dev libgl1-mesa-dev libfontconfig1-dev libbb2-dev

#create the deps folder with precompiled skia for 32bit arm
cd ~
mkdir deps
cd deps
mkdir skia
cd skia
wget https://www.gudinna.com/projects/aseprite/skia/aseprite-m96/Skia-Linux-Release-ARM32.zip
unzip Skia-Linux-Release-ARM32.zip

cd ~
#clone the asesprite beta branch, without history
git clone --depth 1 --branch beta --single-branch --recursive https://github.com/aseprite/aseprite.git
cd aseprite
mkdir build
cd build
cmake \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DLAF_BACKEND=skia \
  -DSKIA_DIR=$HOME/deps/skia \
  -DSKIA_LIBRARY_DIR=$HOME/deps/skia/out/Release-ARM32 \
  -DSKIA_LIBRARY=$HOME/deps/skia/out/Release-ARM32/libskia.a \
  -G Ninja \
  ..
ninja aseprite

# if you compile using gcc g++ then the build stop with the following exception:
# /usr/include/c++/8/atomic:239: undefined reference to `__atomic_store_8
# quick fix is to rerun the last link step with added -latomic
# /usr/bin/c++  -Wall -Wno-switch -O2 -g -DNDEBUG   src/CMakeFiles/aseprite.dir/main/main.cpp.o  -o bin/aseprite  lib/libapp-lib.a  lib/libcfg-lib.a  lib/libclip.a  -lxcb  lib/libdio-lib.a  lib/libfilters-lib.a  lib/libflic-lib.a  lib/libtga-lib.a  lib/librender-lib.a  lib/libdoc-lib.a  lib/libfixmath-lib.a  lib/libcityhash.a  lib/libui-lib.a  lib/liblaf-os.a  lib/liblaf-gfx.a  lib/liblaf-ft.a  /home/pi/deps/skia/out/Release-ARM32/libfreetype2.a  /home/pi/deps/skia/out/Release-ARM32/libharfbuzz.a  /home/pi/deps/skia/out/Release-ARM32/libskia.a  /usr/lib/arm-linux-gnueabihf/libGL.so  /usr/lib/arm-linux-gnueabihf/libfontconfig.so  /usr/lib/arm-linux-gnueabihf/libX11.so  /usr/lib/arm-linux-gnueabihf/libXext.so  /usr/lib/arm-linux-gnueabihf/libXcursor.so  /home/pi/deps/skia/out/Release-ARM32/libskshaper.a  lib/libobs.a  lib/libundo.a  lib/libcmark.a  lib/libjpeg.a  lib/libgiflib.a  lib/libpng16.a  /usr/lib/arm-linux-gnueabihf/libm.so  lib/libwebpdemux.a  lib/libwebpmux.a  lib/libwebp.a  -lm  lib/libjson11.a  lib/libarchive.a  /usr/lib/arm-linux-gnueabihf/libb2.so  /usr/lib/arm-linux-gnueabihf/libcrypto.so  /usr/lib/arm-linux-gnueabihf/libexpat.so  /usr/lib/arm-linux-gnueabihf/libssl.so  lib/libfmt.a  lib/libtinyexpr.a  lib/liblauxlib.a  lib/liblua.a  lib/liblualib.a  lib/libixwebsocket.a  lib/libz.a  lib/libupdater-lib.a  lib/libver-lib.a  lib/libtinyxml.a  lib/libnet-lib.a  lib/liblaf-base.a  lib/libmodpbase64.a  -lpthread  /usr/lib/arm-linux-gnueabihf/libdl.so  lib/libcurl.a  -ldl  -lpthread -latomic
# if you compile using clang as c++ cmpiler then the binary will compile without need to add -latomic linker flag.

#... [1558/1558] Linking CXX executable bin/aseprite
# time taken:  24m29.624s     <--- time taken to compile and link aseprite 
# using clang with the precompiled skia for arm 32bit
#
# The build is complete, aseprite can be found in the aseprite/build/bin directory
cd bin
./aseprite

# The compiled aseprite binary is quite large with debug information 
# you can free up 250mb by removing the debug information using strip 
# before: 262412280 262Mb
strip aseprite 
# after:     13910280 13Mb
# it is possible to build the binary without debug information by
# passing  -DCMAKE_BUILD_TYPE=Release to cmake above.
# Enjoy and have a great day! Thank you for reading
# Xerxes Rånby - 2021

When running the 1.3 beta on Raspberry Pi
I recommend disable multiple_windows in the .config/aseprite/aseprite.ini file as it appears to cause issues with some linux window managers.

[experimental]
multiple_windows = false

hus <— compiled and painted on a raspberry pi 400

6 Likes