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;
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