Skip to content

Targets and Tiers ​

The hosts xclang runs on, the targets it builds for, and how each is tested. How to build for another target is in cross-compiling.

Hosts ​

A host is a machine the toolchain runs on. Each has its own archive, and every archive carries every target. The "tested on" column names the GitHub-hosted runner.

hostarchive built ontested on
x86_64-unknown-linux-gnuLinux x64ubuntu-24.04
aarch64-unknown-linux-gnuLinux x64, cross-compiledubuntu-24.04-arm
x86_64-w64-mingw32Linux x64, cross-compiled; the toolchain is a MinGW programwindows-2025
aarch64-w64-mingw32Linux x64, cross-compiledwindows-11-arm
aarch64-apple-darwinmacOS arm64macos-15
x86_64-apple-darwinmacOS arm64, cross-compiledmacos-15-intel

Targets ​

targetalso spelledC runtimeruns onbuilds on
x86_64-unknown-linux-gnux86_64-pc-linux-gnu, x86_64-linux-gnu (Bazel)glibc 2.17glibc 2.17 or laterevery host
aarch64-unknown-linux-gnuaarch64-pc-linux-gnu, aarch64-linux-gnu (Bazel)glibc 2.17glibc 2.17 or laterevery host
x86_64-w64-mingw32x86_64-w64-windows-gnu, x86_64-pc-windows-gnumingw-w64 with UCRTWindows 10 or laterevery host
aarch64-w64-mingw32aarch64-w64-windows-gnu, aarch64-pc-windows-gnumingw-w64 with UCRTWindows 10 or laterevery host
aarch64-apple-darwinarm64-apple-darwin, arm64-apple-macos, aarch64-apple-macosx, ...the SDK's libSystemmacOS 13.0 or latermacOS hosts; Linux and Windows hosts with the SDK xclang fetches
x86_64-apple-darwinx86_64-apple-macos, x86_64-apple-macosxthe SDK's libSystemmacOS 13.0 or latermacOS hosts; Linux and Windows hosts with the SDK xclang fetches
x86_64-pc-windows-msvcx86_64-unknown-windows-msvcMicrosoft's CRT and STL, the hybrid CRTWindows 10 or laterevery host, with the SDK xclang fetches
aarch64-pc-windows-msvcaarch64-unknown-windows-msvcMicrosoft's CRT and STL, the hybrid CRTWindows 10 or laterevery host, with the SDK xclang fetches

All six are tier 1. The macOS targets need Apple's SDK, which comes from Xcode on macOS hosts (macOS). On Linux and Windows hosts they build with the SDK the user fetches from Apple (macOS), and CI runs those programs on arm64 and x64 Macs. The MSVC targets are tier 1 too: CI runs their programs on Windows x64 and arm64 runners (MSVC targets).

What Each Target Has ​

LinuxWindows (MinGW)macOSWindows (MSVC)
C++ librarylibc++, libc++abi, staticlibc++, libc++abi, staticlibc++, libc++abi, static (not the system's libc++.dylib)Microsoft's STL, static
unwinderlibunwind, staticlibunwind, staticthe system's (libSystem)the VC runtime's, static
compiler-rt builtins, profileSupportedSupportedSupportedSupported
ASan, TSan, LSan, UBSan, libFuzzerSupportedConsideredSupportedSupported: UBSan; ASan and libFuzzer for x64
ASan libc++SupportedConsideredSupportednone: the STL
linkerld.lldld.lld (MinGW driver)ld64.lld; -fuse-ld=ld for Apple's, without LTOlld-link

Sanitizers for the MinGW targets are considered; those of the MSVC targets are in sanitizers.

Tiers ​

Each target has a tier, as Rust's targets do. The tier says how a target is tested, and so how much a release promises about it.

  • Tier 1: built for every release, and its tests run on a GitHub-hosted runner of the target itself; a failure stops the release.
  • Tier 2: built for every release, and its tests run under emulation or virtualization: qemu, a virtual machine, Android's emulator, Apple's simulators.
  • Tier 3: programs are compiled and linked for it, not run.

For today's six, that means programs built on every host run on a runner of their target, with no emulator (testing).

Not Yet Supported ​

status
Sanitizers for MinGW targetsConsidered

Every other target, with its planned tier and its status, is in the roadmap.