Raspberry Pi version?

@dacap would you guys consider making a raspberry pi version(armv8 I believe) of aseprite available for purchase? I would love that if you could. The current only way I can find to use aseprite on a raspberry pi is through the default repo, which is a very outdated version(1.1.6-dev I think), and missing a lot of features that I need. I have tried to compile it from source, but it throws a lot of errors last I tried.
Thanks a lot!

5 Likes

Agree to this one. I am a raspberry pi user myself (raspberry os), and I love Asprite.
On PC i have the full version already,but I wouldnā€™t mind to buy it again for PI.

As for now I have to put up with dev version, although there is a small bug that drives me nuts.
No ā€œfull screenā€ option. Asprite runs in a small window mode and it is a littlebit uncomfrotable to work that way.

Would be nice if dev version would gade a small update fixing this problem.
Hope to see one day Asprite as a full software for pi. :wink:

I discussed this with dacap on the Aseprite Discord.
Relevant messages:

And while building Aseprite on aarch64 is not possible by following the official instructions, itā€™s not impossible.
To compile skia I needed to download ninja and gn for aarch64 instead of using the binaries provided in depot_tools. Then I needed to symlink python2 to python, as thatā€™s what the skia build script seems to expect.
Aseprite built without that much extra stuff, but I had to set one library (I think libcurl) to shared, as it was throwing a few errors.
Iā€™m not sure if the raspberry pi os repoā€™s have gn, but they should have ninja. If itā€™s not available, Iā€™d try getting the binary from the Arch Linux ARM repos here.
I have built the latest main on my Pinebook Pro (aarch64 CPU) using this method.

2 Likes

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

Hi there! I grabbed the newest image of raspberry pi OS 32-bit and ran your script. it seems to hang/pause after the following messages:

Submodule path ā€˜third_party/zlibā€™: checked out ā€˜fc3ecad5d50b59945ffd3f44c78472c3ecc70b87ā€™
CMake Deprecation Warning at CMakeLists.txt:16 (cmake_policy):
The OLD behavior for policy CMP0046 will be removed from a future version
of CMake.

The cmake-policies(7) manual explains that the OLD behaviors of all
policies are deprecated and that a policy should be set to OLD only under
specific short-term circumstances. Projects should be ported to the NEW
behavior and not rely on setting a policy to OLD.

iā€™ve tried letting it run for nearly 24 hours but it still just sits there until I CTRL+C. Any ideas?

Everything was going great right up until the very end.

[1567/1567] Linking CXX executable bin/aseprite
FAILED: bin/aseprite 
: && /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/marc/deps/skia/out/Release-ARM32/libfreetype2.a  /home/marc/deps/skia/out/Release-ARM32/libharfbuzz.a  /home/marc/deps/skia/out/Release-ARM32/libskia.a  /usr/lib/aarch64-linux-gnu/libGL.so  /usr/lib/aarch64-linux-gnu/libfontconfig.so  /usr/lib/aarch64-linux-gnu/libX11.so  /usr/lib/aarch64-linux-gnu/libXext.so  /usr/lib/aarch64-linux-gnu/libXcursor.so  /home/marc/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/aarch64-linux-gnu/libm.so  lib/libwebpdemux.a  lib/libwebpmux.a  lib/libwebp.a  -lm  lib/libjson11.a  lib/libarchive.a  /usr/lib/aarch64-linux-gnu/libexpat.so  lib/libfmt.a  lib/libtinyexpr.a  lib/liblauxlib.a  lib/liblua.a  lib/liblualib.a  lib/libixwebsocket.a  lib/libz.a  -pthread  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/aarch64-linux-gnu/libdl.so  lib/libcurl.a  -ldl  -lpthread && :
/usr/bin/ld: /home/marc/deps/skia/out/Release-ARM32/libfreetype2.a: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Any idea what went wrong? Iā€™m clueless when it comes to compiling things.

yo, I got some issues with that can you hook me up on discord? Just send me a friend request.

I am cdkw2#3833

I had some troubles building this on my RPi 4, so Iā€™m leaving a note here.

The Skia backend has been updated to m102 on May, 2022.
So you either have to build Skia from scratch, or check out the Aseprite commit that uses m96 Skia backend.

I failed building the Skia m102, so I check out the last release of Aseprite that uses m96 Skia (which was v1.3-beta14).

git clone --depth 1 -b v1.3-beta14 --single-branch --recursive https://github.com/aseprite/aseprite.git

I built it with GCC, but at the end thereā€™s 2 errors on linking:

  1. As the original article said -latomic is missing.
    Fix: Add -latomic to the link command manually.
  2. Multiple definition error regarding webp, which is explained here.
    Fix: Remove lib/libwebp.a from the link command manually.

I built aseprite 1.3.1 and skia-102 on my raspberry pi 4 (64 bit) this afternoon. Here is the documentation for my build process: Build aseprite 1.3.1 on Raspberry Pi 4 aarch64 bit Ā· GitHub

1 Like