Arm Toolchain for Embedded (ATfE)
- Arm Toolchain for Embedded (ATfE) is a C and C++ toolchain from Arm based
on the free and open-source LLVM Compiler Infrastructure and the Picolib C library for baremetal targets.
- ATfE is fined-tuned with a particular focus on performance for newer
ARM products (post 2024) like 64-bit Arm Architectures (AArch64), or the M-Profile Vector Extension (MVE, a 32-bit Armv8.1-M extension).
Installation
Download and install a Arm toolchain for embedded build for your operating system and extract it on your file system.
Set these environment variables:
Set
ZEPHYR_TOOLCHAIN_VARIANT
tollvm
.Set
LLVM_TOOLCHAIN_PATH
to the toolchain installation directory.
To check that you have set these variables correctly in your current environment, follow these example shell sessions (the
LLVM_TOOLCHAIN_PATH
values may be different on your system):echo $ZEPHYR_TOOLCHAIN_VARIANT llvm echo $LLVM_TOOLCHAIN_PATH /home/you/Downloads/ATfE
echo $ZEPHYR_TOOLCHAIN_VARIANT llvm echo $LLVM_TOOLCHAIN_PATH /home/you/Downloads/ATfE
> echo %ZEPHYR_TOOLCHAIN_VARIANT% llvm > echo %LLVM_TOOLCHAIN_PATH% C:\ATfE
You can also set
ZEPHYR_TOOLCHAIN_VARIANT
andLLVM_TOOLCHAIN_PATH
as CMake variables when generating a build system for a Zephyr application, like so:west build … – -DZEPHYR_TOOLCHAIN_VARIANT=llvm -DLLVM_TOOLCHAIN_PATH=…
Toolchain settings
- Because LLVM is widely compatible with GNU tools, When builiding with any
LLVM toolchain, you have to specify some settings to let the compiler know what tools to use:
- Linker:
Set
CONFIG_LLVM_USE_LLD=y
to use LLVM linker. setCONFIG_LLVM_USE_LD=y
to use the GNU LD linker.- Runtime library:
Set
CONFIG_COMPILER_RT_RTLIB=y
to use LLVM runtime library. SetCONFIG_LIBGCC_RTLIB=y
to use LibGCC runtime library.
west build ... -- -DZEPHYR_TOOLCHAIN_VARIANT=llvm -DLLVM_TOOLCHAIN_PATH=... -DCONFIG_LLVM_USE_LLD=y -DCONFIG_COMPILER_RT_RTLIB=y