Arm Toolchain for Embedded (ATfE)

  1. LLVM toolchain by ARM

    1. 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.

    2. 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).

  2. Installation

    1. Download and install a Arm toolchain for embedded build for your operating system and extract it on your file system.

    2. Set these environment variables:

    3. 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
      
    4. You can also set ZEPHYR_TOOLCHAIN_VARIANT and LLVM_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=…

  3. Toolchain settings

    1. 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:

    2. Linker: Set CONFIG_LLVM_USE_LLD=y to use LLVM linker. set CONFIG_LLVM_USE_LD=y to use the GNU LD linker.

    3. Runtime library: Set CONFIG_COMPILER_RT_RTLIB=y to use LLVM runtime library. Set CONFIG_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