Now that libfoundry use has proliferated I need to get all the core abstractions in place for the proverbial 1.0
.
There is already a device manager and provider abstraction in libfoundry
with the typical back-ends. There are providers for the local system (so native architecture) and deviced which connects to a device on the local network.
Builder supports cross-architecture building and running even when you do not have a cross-toolchain available. So this must be added to Foundry too. The mechanics are handled by qemu-user-static
and binfmt
when properly packaged on your distribution. Fedora manages to have this setup correctly if you dnf install qemu-user-static
.
Practically speaking, that means if you install a Flatpak SDK for another architecture you can use it to build/run your application (at a performance penalty). Qemu-user-static uses a combination of syscall-translation and instruction-translation which can have significant overhead, but it does work.
You can use Foundry now to do this rather easily.
$ cd project/ $ foundry enter $ foundry device list ID Active Name Chassis System qemu:riscv64 No My Computer (riscv64 Emulation) workstation riscv64 qemu:x86_64 No My Computer (x64_64 Emulation) workstation x86_64 native Yes My Computer workstation aarch64-linux-gnu $ foundry device switch qemu:x86_64 $ foundry run ...
Since I’m running on an aarch64
laptop right now, qemu:x86_64
device emulation is available.
If you have a cached build you might want to purge that so it doesn’t try to incrementally rebuild your project.
$ foundry pipeline purge $ foundry run
If you want to export a Flatpak to test on another system, you can export as normal. However this time it will be for your alternate architecture.
$ foundry export ... Artifacts: /path/to/x86_64-main/app.devsuite.Test.Devel.flatpak
Hopefully that makes things easier for people who want to test other devices/architectures such as GNOME on a handheld device.