Since the Librem 5 phone is based on a processor architecture (aarch64) that is different to the architectures used by most development workstations, the way that applications are built for the phone is a bit different to the way that applications are built and tested on a workstation.
The first difference is that we need to explicitly install the aarch64 versions of the SDK and runtime used to build flatpaks.
For example, when using the runtimes from the Nightly GNOME Apps repository
gnome-nightly), we need to install versions of those for the aarch64
flatpak install gnome-nightly org.gnome.Platform/aarch64 org.gnome.Sdk/aarch64
This ensures that the resources needed for applications on that architecture are available when they are built to target it.
As mentioned in the Flatpak section of the Setting up a Development Environment chapter, a version of the qemu emulator is used to help Flatpak with cross-building. This needs to be installed before applications are built for the target architecture. On Debian-based systems, this command will install the relevant package:
sudo apt -y install qemu-user-static
It should not be necessary to perform any further configuration on your workstation if you are using a recent distribution of GNU/Linux.
As in the Building an Application section,
used to build an application for deployment in a flatpak. The command used to
do this now includes the
flatpak-builder --arch=<arch> --repo=<repo> <build-dir> <manifest>
In the case of the Librem 5,
The example used previously is the example program supplied with the libhandy library, which we now build with the additional option:
flatpak-builder --arch=aarch64 --repo=myrepo _flatpak sm.puri.Handy.Example.json
The result is stored in the
myrepo directory, which is a local repository.
Note that we did not try to use the
--install option to build and install
the application locally. This would only make sense if the workstation we are
using has an aarch64 architecture.
Following the general advice for building flatpaks given earlier, we can export a binary bundle from the local repository so that it can be tested on the target system:
flatpak build-bundle --arch=aarch64 myrepo app.flatpak sm.puri.Handy.Example
This builds a bundle called
app.flatpak from the application referred to by
sm.puri.Handy.Example from the
myrepo directory. This bundle can be
copied to the phone or development board for testing.
Before the application can be installed on the target system, both Flatpak and the appropriate runtime must be installed. Flatpak should already be installed on the Librem 5 and the Librem 5 development board. However, if you need to install it again, the following command will do this:
sudo apt -y install flatpak
Flatpak on the target system will need to know about the remotes you used to
build the application. For example, if you used the Nightly GNOME Apps
gnome-nightly) then this will need to be registered:
flatpak --user remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
We do this with the
--user option for convenience. It can also be added to
the system-wide list of remotes if
sudo is used instead.
This bundle can now be installed, again as a normal user:
flatpak --user install app.flatpak
Flatpak will resolve the dependencies of the bundle using the remote we registered and begin to install them if they are not already present, before installing the application itself.
The application can then be run using
flatpak in the usual way:
flatpak run sm.puri.Handy.Example
The commands for managing applications, runtimes and remotes are all the same on the target system as they are on the workstation.