Since the recent 0.13.0 release, Guix supports building software for
aarch64 (64-bit ARM architecture). Here’s the current status.
Currently aarch64 support in Guix is pretty good, as long as you don&apost
mind compiling for yourself :). Potential downfalls are too little RAM
(I limited my boards to 2GB minimum) and using an SD card. For building
packages I made sure that between RAM and swap I have at least 6 GB,
which I don&apost recall giving me any issues.
There were problems with actually building the Guix binary in time for
the 0.13 release. It has since been fixed and I have an unoffical
aarch64 binary install tarball at http://flashner.co.il/~efraim/. Also there is
the signing key for my odroid running
The URL of my
guix publish server is
General problem points/packages:
- Java is currently out,
sablevm-classpath doesn&apost compile, so currently
there is no path for Java. A quick check showed about 140 packages
- Go: go-1.4.x doesn&apost support aarch64 (or mips). I have a patch against
our GCC to build gccgo, and it produces a
go binary, but it fails to
actually build anything. When I checked Debian I saw they cross-compile
go binary from amd64. I believe there may be an issue with
using gccgo and linking against glibc.
- OCaml 4.01.0: Doesn&apost build on aarch64, haven&apost investigated.
- Julia: aarch64 is officially supported, but it has only been tested on
superpowerful boards, like the ThunderX. I haven&apost gotten it to build
yet. The issue is related to
- clisp: our current version doesn&apost build on aarch64, there isn&apost
support yet. There are newer builds but no offical release yet, and I
haven&apost tested those yet.
- gprolog: No upstream support and AFAICT no one is working on it.
- LDC: 1.x is supposed to support aarch64, 0.17.x, aka ldc-bootstrap,
doesn&apost, it fails while compiling phobos, which has no aarch64 support
in that version.
- Rust: Has upstream support, our package uses the i686 version as a
bootstrap, so only i686 and x86_64 have support in guix ATM.
- Haskell: There is no upstream aarch64 binary to use for bootstrapping.
I&aposm thinking of trying to use qemu-system-x86_64 as the shell and
emulate x86_64 on my aarch64 board to cross-compile it to aarch64.
guix package -A ghc | wc -l shows 293 packages.
- Qt 4: does not build, I&aposve hardly put any time into it.
- Gnucash: The ancient WebKit version they use didn&apost build on aarch64,
I haven&apost tried to fix it.
- Linux-libre: While many boards do require specific patches and
versions of the kernel, there have been great increases in recent
kernel versions for many ARM boards. It remains to be seen how much
support these boards have after the kernel has been deblobbed.
It sounds like its all doom and gloom, but its not too bad.
guix package -A | wc -l shows me 5,341 (5,208 without
compared with ~5,600 on x86_64. Most of the difference is Haskell. In
addition, I personally believe that aarch64 actually has fewer
packages that fail to build than armhf.
Currently the project’s build farm lacks aarch64 build machines. If you
would like to help,
please get in touch with us!
About GNU Guix
GNU Guix is a transactional package
manager for the GNU system. The Guix System Distribution or GuixSD is
an advanced distribution of the GNU system that relies on GNU Guix and
respects the user&aposs
In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection. Guix uses low-level
mechanisms from the Nix package manager, except that packages are
defined as native Guile modules,
using extensions to the Scheme language. GuixSD
offers a declarative approach to operating system configuration
management, and is highly customizable and hackable.
GuixSD can be used on an i686 or x86_64 machine. It is also possible to
use Guix on top of an already installed GNU/Linux system, including on
mips64el, armv7, and aarch64.