# LLVM Embedded Toolchain for Arm

## About this Install Guide

| Reading time:   | 10 min        |
|------------------|---------------|
| Last updated:    | 22 Jun 2026   |
| Author:          | Ronan Synnott, Arm [LinkedIn](https://linkedin.com/in/ronansynnott)       |
| Official docs:   | [View](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm) |

This guide shows you how to install and use the tool with the most common configuration. For advanced options and complete reference information, see the official documentation. Some install guides also include optional next steps to help you explore related workflows or integrations.

The [LLVM Embedded Toolchain for Arm](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm) allows Cortex-M developers to build projects with the `clang` compiler.

[Pre-built binaries](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases) are available for Windows (x86_64), macOS (x86_64 and Apple Silicon), and Linux (x86_64 and AArch64) hosts.

## Install the LLVM Embedded Toolchain for Arm on Windows

To download the latest release from GitHub, copy and paste the following URL into your browser:

> **Note:** The following step uses LLVM Embedded Toolchain for Arm version 19.1.5. The same step works with other versions. Replace the file used in this step with the file for your version of choice. To find the latest version, see [LLVM Embedded Toolchain releases](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases).

```
https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-19.1.5/LLVM-ET-Arm-19.1.5-Windows-x86_64.zip
```

Unzip the download to a location of your choice on your host machine.

Open Windows `Control Panel` and add the LLVM `bin` directory to the `Path`.

Open a `Command Prompt` and [test your installation](#test).

## Install the LLVM Embedded Toolchain for Arm on macOS

To download the latest release from GitHub, copy and paste the following URL into your browser:

> **Note:** The following step uses LLVM Embedded Toolchain for Arm version 19.1.5. The same step works with other versions. Replace the file used in this step with the file for your version of choice. To find the latest version, see [LLVM Embedded Toolchain releases](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases).

```
https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-19.1.5/LLVM-ET-Arm-19.1.5-Darwin-universal.dmg
```

Install the toolchain by clicking the dmg file and following the instructions.

Add the LLVM `bin` directory to your `PATH`:

```
export PATH=/Applications/LLVM-ET-Arm-19.1.5-Darwin-universal/bin:$PATH
```

The toolchain binaries might be quarantined. Navigate to the `bin` directory and use the `xattr` command to remove the quarantine:

```
cd /Applications/LLVM-ET-Arm-19.1.5-Darwin-universal/bin
find . -type f -perm +0111 | xargs xattr -d com.apple.quarantine
```

You can now [test your installation](#test).

## Install the LLVM Embedded Toolchain for Arm on Linux

The following steps assume `Ubuntu Linux` on an `AArch64` host. Modify the filenames and paths as needed for other hosts.

Download the latest release using `wget`:

> **Note:** The following commands use LLVM Embedded Toolchain for Arm version 19.1.5. The same commands work with other versions. Replace the file used in these steps with the file for your version of choice. To find the latest version, see [LLVM Embedded Toolchain releases](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases).

```
wget https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-19.1.5/LLVM-ET-Arm-19.1.5-Linux-AArch64.tar.xz
```

Open a terminal application and use `tar` to extract the file:

```
tar xfJ LLVM-ET-Arm-19.1.5-Linux-AArch64.tar.xz -C $HOME
```

Add the LLVM `bin` directory to your `PATH`:

```
export PATH=$HOME/LLVM-ET-Arm-19.1.5-Linux-AArch64/bin:$PATH
```

## Test the LLVM Embedded Toolchain installation

You can now test your installation.

### Verify the clang installation

Use the `--version` option to verify the correct compiler is being invoked:

```
clang --version
```

The output is similar to:

```
__output__ clang version 19.1.5
__output__ Target: aarch64-unknown-linux-gnu
__output__ Thread model: posix
__output__ InstalledDir: /home/ubuntu/LLVM-ET-Arm-19.1.5-Linux-AArch64/bin
```

### Build a sample application with clang

Use a text editor to create an example source file with the name `hello.c` and the following code:

```
#include <stdio.h>

int main()
{
  printf("hello");
  return 0;
}
```

A number of compiler options are needed. For more information, see [Using the toolchain](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm#using-the-toolchain).

To build for `Armv6-M`, run:

```
clang --target=armv6m-none-eabi -fno-exceptions -fno-rtti -lcrt0-semihost -lsemihost -T picolibc.ld -o hello_v6m hello.c
```

To build for `Armv7-M`, run:

```
clang --target=armv7m-none-eabi -fno-exceptions -fno-rtti -lcrt0-semihost -lsemihost -T picolibc.ld -o hello_v7m hello.c
```

### Run the example applications

The applications can be run on [Fixed Virtual Platforms (FVP)](/install-guides/fm_fvp/fvp/).

> **Note:** There is no FVP release for macOS.

To run the `Armv6-M` example on `Cortex-M0` FVP:

```
FVP_MPS2_Cortex-M0 -a hello_v6m
```

To run the `Armv7-M` example on `Cortex-M3` FVP:

```
FVP_MPS2_Cortex-M3 -a hello_v7m
```

You’ll see the `hello` message on the console, as well as other diagnostic output from the FVP:

```
__output__ telnetterminal1: Listening for serial connection on port 5000
__output__ telnetterminal2: Listening for serial connection on port 5002
__output__ telnetterminal0: Listening for serial connection on port 5001
__output__ hello
__output__ Info: /OSCI/SystemC: Simulation stopped by user.
```

You’re now ready to use LLVM Embedded Toolchain for Arm.
