Engee documentation

ARM (Linux)

Julia fully supports ARMv8 (AArch64) processors and, with some reservations, supports ARMv7 and ARMv6 (AArch32). General compilation recommendations are provided here, as well as instructions for specific devices.

The list is available https://github.com/JuliaLang/julia/labels/arm [known issues] for ARM. If you have any difficulties, create a request and provide the output from the cat /proc/cpuinfo file.

32-bit (ARMv6, ARMv7)

Julia is successfully compiled on several variants of the following devices ARMv6 and ARMv7:

  • ARMv7 / Cortex A15 Samsung Chromebooks running Ubuntu Linux with Crouton;

  • Raspberry Pi;

  • Odroid.

Julia requires at least the armv6 and vfpv2 instruction sets. It is recommended to use armv7-a'. 'armv5 or settings for software operation with floating point are not supported.

Raspberry Pi 1 / Raspberry Pi Zero

If the type of ARM processor used in Raspberry Pi is not determined by LLVM, you must explicitly set the target CPU load by adding the following to Make.user:

JULIA_CPU_TARGET=arm1176jzf-s

You may need to increase the size of the swap file to complete the build. To do this, edit the /etc/dphys-swapfile file by changing the line:

CONF_SWAPSIZE=100

on:

CONF_SWAPSIZE=512

before restarting the swap file service:

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

Raspberry Pi 2

The type of ARM processor used in Raspberry Pi 2 is not defined by LLVM. Explicitly set the target CPU usage by adding the following to Make.user:

JULIA_CPU_TARGET=cortex-a7

Depending on the specific compiler and distribution, the build may fail due to an unsupported inline build. In this case, add MCPU=armv7-a to `Make.user'.

AArch64 (ARMv8)

Julia is expected to be built on ARMv8 processors. It is necessary to follow the general https://github.com/JuliaLang/julia/blob/master/README.md [assembly instructions]. It takes about 8 GB of RAM or a swap file to build Julia.

Known issues

Starting with Julia version 1.10 https://llvm.org/docs/JITLink.html [JITLink] is automatically enabled in this architecture for all operating systems when linking to LLVM 15 or later. Because of https://github.com/llvm/llvm-project/issues/63236 [LLVM Memory Manager errors] Non-standard workloads may generate too many memory mappings. On Linux, their number may exceed the value of the memory mapping limit (mmap) specified in the file /proc/sys/vm/max_map_count, which will result in the following error:

JIT session error: Cannot allocate memory

If this happens, ask the system administrator to increase the limit on memory mappings, for example with the following command:

sysctl -w vm.max_map_count=262144