Platform Support
Support for different platforms ("targets") are organized into three tiers, each with a different set of guarantees. For more information on the policies for targets at each tier, see the Target Tier Policy.
Targets are identified by their "target triple" which is the string to inform the compiler what kind of output should be produced.
Component availability is tracked here.
Tier 1 with Host Tools
Tier 1 targets can be thought of as "guaranteed to work". The Rust project builds official binary releases for each tier 1 target, and automated testing ensures that each tier 1 target builds and passes tests after each change.
Tier 1 targets with host tools additionally support running tools like rustc
and cargo
natively on the target, and automated testing ensures that tests
pass for the host tools as well. This allows the target to be used as a
development platform, not just a compilation target. For the full requirements,
see Tier 1 with Host Tools in
the Target Tier Policy.
All tier 1 targets with host tools support the full standard library.
target | notes |
---|---|
aarch64-unknown-linux-gnu | ARM64 Linux (kernel 4.1, glibc 2.17+) 1 |
i686-pc-windows-gnu | 32-bit MinGW (Windows 7+) 2 3 |
i686-pc-windows-msvc | 32-bit MSVC (Windows 7+) 2 3 |
i686-unknown-linux-gnu | 32-bit Linux (kernel 3.2+, glibc 2.17+) 3 |
x86_64-apple-darwin | 64-bit macOS (10.12+, Sierra+) |
x86_64-pc-windows-gnu | 64-bit MinGW (Windows 7+) 2 |
x86_64-pc-windows-msvc | 64-bit MSVC (Windows 7+) 2 |
x86_64-unknown-linux-gnu | 64-bit Linux (kernel 3.2+, glibc 2.17+) |
Stack probes support is missing on
aarch64-unknown-linux-gnu
, but it's planned to be implemented in the near
future. The implementation is tracked on issue #77071.
Only Windows 10 currently undergoes automated testing. Earlier versions of Windows rely on testing and support from the community.
Due to limitations of the C ABI, floating-point support on i686
targets is non-compliant: floating-point return values are passed via an x87 register, so NaN payload bits can be lost. See issue #114479.
Tier 1
Tier 1 targets can be thought of as "guaranteed to work". The Rust project builds official binary releases for each tier 1 target, and automated testing ensures that each tier 1 target builds and passes tests after each change. For the full requirements, see Tier 1 target policy in the Target Tier Policy.
At this time, all Tier 1 targets are Tier 1 with Host Tools.
Tier 2 with Host Tools
Tier 2 targets can be thought of as "guaranteed to build". The Rust project
builds official binary releases of the standard library (or, in some cases,
only the core
library) for each tier 2 target, and automated builds
ensure that each tier 2 target can be used as build target after each change. Automated tests are
not always run so it's not guaranteed to produce a working build, but tier 2
targets often work to quite a good degree and patches are always welcome!
Tier 2 targets with host tools additionally support running tools like rustc
and cargo
natively on the target, and automated builds ensure that the host
tools build as well. This allows the target to be used as a development
platform, not just a compilation target. For the full requirements, see Tier 2
with Host Tools in the Target
Tier Policy.
All tier 2 targets with host tools support the full standard library.
NOTE: The rust-docs
component is not usually built for tier 2 targets,
so Rustup may install the documentation for a similar tier 1 target instead.
target | notes |
---|---|
aarch64-apple-darwin | ARM64 macOS (11.0+, Big Sur+) |
aarch64-pc-windows-msvc | ARM64 Windows MSVC |
aarch64-unknown-linux-musl | ARM64 Linux with MUSL |
arm-unknown-linux-gnueabi | ARMv6 Linux (kernel 3.2, glibc 2.17) |
arm-unknown-linux-gnueabihf | ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17) |
armv7-unknown-linux-gnueabihf | ARMv7-A Linux, hardfloat (kernel 3.2, glibc 2.17) |
loongarch64-unknown-linux-gnu | LoongArch64 Linux, LP64D ABI (kernel 5.19, glibc 2.36) |
powerpc-unknown-linux-gnu | PowerPC Linux (kernel 3.2, glibc 2.17) |
powerpc64-unknown-linux-gnu | PPC64 Linux (kernel 3.2, glibc 2.17) |
powerpc64le-unknown-linux-gnu | PPC64LE Linux (kernel 3.10, glibc 2.17) |
riscv64gc-unknown-linux-gnu | RISC-V Linux (kernel 4.20, glibc 2.29) |
s390x-unknown-linux-gnu | S390x Linux (kernel 3.2, glibc 2.17) |
x86_64-unknown-freebsd | 64-bit FreeBSD |
x86_64-unknown-illumos | illumos |
x86_64-unknown-linux-musl | 64-bit Linux with MUSL |
x86_64-unknown-netbsd | NetBSD/amd64 |
Tier 2 without Host Tools
Tier 2 targets can be thought of as "guaranteed to build". The Rust project
builds official binary releases of the standard library (or, in some cases,
only the core
library) for each tier 2 target, and automated builds
ensure that each tier 2 target can be used as build target after each change. Automated tests are
not always run so it's not guaranteed to produce a working build, but tier 2
targets often work to quite a good degree and patches are always welcome! For
the full requirements, see Tier 2 target
policy in the Target Tier Policy.
The std
column in the table below has the following meanings:
- ✓ indicates the full standard library is available.
- * indicates the target only supports
no_std
development.
NOTE: The rust-docs
component is not usually built for tier 2 targets,
so Rustup may install the documentation for a similar tier 1 target instead.
target | std | notes |
---|---|---|
aarch64-apple-ios | ✓ | ARM64 iOS |
aarch64-apple-ios-sim | ✓ | Apple iOS Simulator on ARM64 |
aarch64-fuchsia | ✓ | Alias for aarch64-unknown-fuchsia |
aarch64-unknown-fuchsia | ✓ | ARM64 Fuchsia |
aarch64-linux-android | ✓ | ARM64 Android |
aarch64-unknown-none-softfloat | * | Bare ARM64, softfloat |
aarch64-unknown-none | * | Bare ARM64, hardfloat |
aarch64-unknown-uefi | * | ARM64 UEFI |
arm-linux-androideabi | ✓ | ARMv6 Android |
arm-unknown-linux-musleabi | ✓ | ARMv6 Linux with MUSL |
arm-unknown-linux-musleabihf | ✓ | ARMv6 Linux with MUSL, hardfloat |
armebv7r-none-eabi | * | Bare ARMv7-R, Big Endian |
armebv7r-none-eabihf | * | Bare ARMv7-R, Big Endian, hardfloat |
armv5te-unknown-linux-gnueabi | ✓ | ARMv5TE Linux (kernel 4.4, glibc 2.23) |
armv5te-unknown-linux-musleabi | ✓ | ARMv5TE Linux with MUSL |
armv7-linux-androideabi | ✓ | ARMv7-A Android |
armv7-unknown-linux-gnueabi | ✓ | ARMv7-A Linux (kernel 4.15, glibc 2.27) |
armv7-unknown-linux-musleabi | ✓ | ARMv7-A Linux with MUSL |
armv7-unknown-linux-musleabihf | ✓ | ARMv7-A Linux with MUSL, hardfloat |
armv7a-none-eabi | * | Bare ARMv7-A |
armv7r-none-eabi | * | Bare ARMv7-R |
armv7r-none-eabihf | * | Bare ARMv7-R, hardfloat |
asmjs-unknown-emscripten | ✓ | asm.js via Emscripten |
i586-pc-windows-msvc | * | 32-bit Windows w/o SSE 4 |
i586-unknown-linux-gnu | ✓ | 32-bit Linux w/o SSE (kernel 3.2, glibc 2.17) 4 |
i586-unknown-linux-musl | ✓ | 32-bit Linux w/o SSE, MUSL 4 |
i686-linux-android | ✓ | 32-bit x86 Android 3 |
i686-unknown-freebsd | ✓ | 32-bit FreeBSD 3 |
i686-unknown-linux-musl | ✓ | 32-bit Linux with MUSL 3 |
i686-unknown-uefi | * | 32-bit UEFI |
loongarch64-unknown-none | * | |
loongarch64-unknown-none-softfloat | * | |
nvptx64-nvidia-cuda | * | --emit=asm generates PTX code that runs on NVIDIA GPUs |
riscv32i-unknown-none-elf | * | Bare RISC-V (RV32I ISA) |
riscv32imac-unknown-none-elf | * | Bare RISC-V (RV32IMAC ISA) |
riscv32imc-unknown-none-elf | * | Bare RISC-V (RV32IMC ISA) |
riscv64gc-unknown-none-elf | * | Bare RISC-V (RV64IMAFDC ISA) |
riscv64imac-unknown-none-elf | * | Bare RISC-V (RV64IMAC ISA) |
sparc64-unknown-linux-gnu | ✓ | SPARC Linux (kernel 4.4, glibc 2.23) |
sparcv9-sun-solaris | ✓ | SPARC Solaris 10/11, illumos |
thumbv6m-none-eabi | * | Bare ARMv6-M |
thumbv7em-none-eabi | * | Bare ARMv7E-M |
thumbv7em-none-eabihf | * | Bare ARMV7E-M, hardfloat |
thumbv7m-none-eabi | * | Bare ARMv7-M |
thumbv7neon-linux-androideabi | ✓ | Thumb2-mode ARMv7-A Android with NEON |
thumbv7neon-unknown-linux-gnueabihf | ✓ | Thumb2-mode ARMv7-A Linux with NEON (kernel 4.4, glibc 2.23) |
thumbv8m.base-none-eabi | * | Bare ARMv8-M Baseline |
thumbv8m.main-none-eabi | * | Bare ARMv8-M Mainline |
thumbv8m.main-none-eabihf | * | Bare ARMv8-M Mainline, hardfloat |
wasm32-unknown-emscripten | ✓ | WebAssembly via Emscripten |
wasm32-unknown-unknown | ✓ | WebAssembly |
wasm32-wasi | ✓ | WebAssembly with WASI |
wasm32-wasi-preview1-threads | ✓ | |
x86_64-apple-ios | ✓ | 64-bit x86 iOS |
x86_64-fortanix-unknown-sgx | ✓ | Fortanix ABI for 64-bit Intel SGX |
x86_64-fuchsia | ✓ | Alias for x86_64-unknown-fuchsia |
x86_64-unknown-fuchsia | ✓ | 64-bit x86 Fuchsia |
x86_64-linux-android | ✓ | 64-bit x86 Android |
x86_64-pc-solaris | ✓ | 64-bit Solaris 10/11, illumos |
x86_64-unknown-linux-gnux32 | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27) |
x86_64-unknown-none | * | Freestanding/bare-metal x86_64, softfloat |
x86_64-unknown-redox | ✓ | Redox OS |
x86_64-unknown-uefi | * | 64-bit UEFI |
Floating-point support on i586
targets is non-compliant: the x87
registers and instructions used for these targets do not provide IEEE-754-compliant behavior, in particular when it comes to rounding and NaN payload bits. See issue #114479.
Tier 3
Tier 3 targets are those which the Rust codebase has support for, but which the Rust project does not build or test automatically, so they may or may not work. Official builds are not available. For the full requirements, see Tier 3 target policy in the Target Tier Policy.
The std
column in the table below has the following meanings:
- ✓ indicates the full standard library is available.
- * indicates the target only supports
no_std
development. - ? indicates the standard library support is unknown or a work-in-progress.
The host
column indicates whether the codebase includes support for building
host tools.
target | std | host | notes |
---|---|---|---|
aarch64-apple-ios-macabi | ? | Apple Catalyst on ARM64 | |
aarch64-apple-tvos | ? | ARM64 tvOS | |
aarch64-apple-watchos-sim | ✓ | ARM64 Apple WatchOS Simulator | |
aarch64-kmc-solid_asp3 | ✓ | ARM64 SOLID with TOPPERS/ASP3 | |
aarch64-nintendo-switch-freestanding | * | ARM64 Nintendo Switch, Horizon | |
aarch64-pc-windows-gnullvm | ✓ | ✓ | |
aarch64-unknown-linux-ohos | ✓ | ARM64 OpenHarmony | |
aarch64-unknown-teeos | ? | ARM64 TEEOS | |
aarch64-unknown-nto-qnx710 | ✓ | ARM64 QNX Neutrino 7.1 RTOS | |
aarch64-unknown-freebsd | ✓ | ✓ | ARM64 FreeBSD |
aarch64-unknown-hermit | ✓ | ARM64 Hermit | |
aarch64-unknown-linux-gnu_ilp32 | ✓ | ✓ | ARM64 Linux (ILP32 ABI) |
aarch64-unknown-netbsd | ✓ | ✓ | ARM64 NetBSD |
aarch64-unknown-openbsd | ✓ | ✓ | ARM64 OpenBSD |
aarch64-unknown-redox | ? | ARM64 Redox OS | |
aarch64-uwp-windows-msvc | ? | ||
aarch64-wrs-vxworks | ? | ||
aarch64_be-unknown-linux-gnu_ilp32 | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI) |
aarch64_be-unknown-linux-gnu | ✓ | ✓ | ARM64 Linux (big-endian) |
aarch64_be-unknown-netbsd | ✓ | ✓ | ARM64 NetBSD (big-endian) |
arm64_32-apple-watchos | ✓ | ARM Apple WatchOS 64-bit with 32-bit pointers | |
armeb-unknown-linux-gnueabi | ✓ | ? | ARM BE8 the default ARM big-endian architecture since ARMv6. |
armv4t-none-eabi | * | Bare ARMv4T | |
armv4t-unknown-linux-gnueabi | ? | ARMv4T Linux | |
armv5te-none-eabi | * | Bare ARMv5TE | |
armv5te-unknown-linux-uclibceabi | ? | ARMv5TE Linux with uClibc | |
armv6-unknown-freebsd | ✓ | ✓ | ARMv6 FreeBSD |
armv6-unknown-netbsd-eabihf | ✓ | ✓ | ARMv6 NetBSD w/hard-float |
armv6k-nintendo-3ds | ? | ARMv6K Nintendo 3DS, Horizon (Requires devkitARM toolchain) | |
armv7-sony-vita-newlibeabihf | ? | ARMv7-A Cortex-A9 Sony PlayStation Vita (requires VITASDK toolchain) | |
armv7-unknown-linux-ohos | ✓ | ARMv7-A OpenHarmony | |
armv7-unknown-linux-uclibceabi | ✓ | ✓ | ARMv7-A Linux with uClibc, softfloat |
armv7-unknown-linux-uclibceabihf | ✓ | ? | ARMv7-A Linux with uClibc, hardfloat |
armv7-unknown-freebsd | ✓ | ✓ | ARMv7-A FreeBSD |
armv7-unknown-netbsd-eabihf | ✓ | ✓ | ARMv7-A NetBSD w/hard-float |
armv7-wrs-vxworks-eabihf | ? | ARMv7-A for VxWorks | |
armv7a-kmc-solid_asp3-eabi | ✓ | ARM SOLID with TOPPERS/ASP3 | |
armv7a-kmc-solid_asp3-eabihf | ✓ | ARM SOLID with TOPPERS/ASP3, hardfloat | |
armv7a-none-eabihf | * | Bare ARMv7-A, hardfloat | |
armv7k-apple-watchos | ✓ | ARMv7-A Apple WatchOS | |
armv7s-apple-ios | ✓ | ARMv7-A Apple-A6 Apple iOS | |
avr-unknown-gnu-atmega328 | * | AVR. Requires -Z build-std=core | |
bpfeb-unknown-none | * | BPF (big endian) | |
bpfel-unknown-none | * | BPF (little endian) | |
csky-unknown-linux-gnuabiv2 | ✓ | C-SKY abiv2 Linux(little endian) | |
hexagon-unknown-linux-musl | ? | ||
i386-apple-ios | ✓ | 32-bit x86 iOS 3 | |
i586-pc-nto-qnx700 | * | 32-bit x86 QNX Neutrino 7.0 RTOS 3 | |
i686-apple-darwin | ✓ | ✓ | 32-bit macOS (10.12+, Sierra+) 3 |
i686-pc-windows-msvc | * | 32-bit Windows XP support 3 | |
i686-pc-windows-gnullvm | ✓ | ✓ | 3 |
i686-unknown-haiku | ✓ | ✓ | 32-bit Haiku 3 |
i686-unknown-hurd-gnu | ✓ | ✓ | 32-bit GNU/Hurd 3 |
i686-unknown-netbsd | ✓ | ✓ | NetBSD/i386 with SSE2 3 |
i686-unknown-openbsd | ✓ | ✓ | 32-bit OpenBSD 3 |
i686-uwp-windows-gnu | ? | 3 | |
i686-uwp-windows-msvc | ? | 3 | |
i686-wrs-vxworks | ? | 3 | |
m68k-unknown-linux-gnu | ? | Motorola 680x0 Linux | |
mips-unknown-linux-gnu | ✓ | ✓ | MIPS Linux (kernel 4.4, glibc 2.23) |
mips-unknown-linux-musl | ✓ | MIPS Linux with musl libc | |
mips-unknown-linux-uclibc | ✓ | MIPS Linux with uClibc | |
mips64-openwrt-linux-musl | ? | MIPS64 for OpenWrt Linux MUSL | |
mips64-unknown-linux-gnuabi64 | ✓ | ✓ | MIPS64 Linux, N64 ABI (kernel 4.4, glibc 2.23) |
mips64-unknown-linux-muslabi64 | ✓ | MIPS64 Linux, N64 ABI, musl libc | |
mips64el-unknown-linux-gnuabi64 | ✓ | ✓ | MIPS64 (little endian) Linux, N64 ABI (kernel 4.4, glibc 2.23) |
mips64el-unknown-linux-muslabi64 | ✓ | MIPS64 (little endian) Linux, N64 ABI, musl libc | |
mipsel-unknown-linux-gnu | ✓ | ✓ | MIPS (little endian) Linux (kernel 4.4, glibc 2.23) |
mipsel-unknown-linux-musl | ✓ | MIPS (little endian) Linux with musl libc | |
mipsel-sony-psp | * | MIPS (LE) Sony PlayStation Portable (PSP) | |
mipsel-sony-psx | * | MIPS (LE) Sony PlayStation 1 (PSX) | |
mips-unknown-linux-gnu | MIPS Linux (kernel 4.4, glibc 2.23) | ||
mips64-unknown-linux-gnuabi64 | MIPS64 Linux, n64 ABI (kernel 4.4, glibc 2.23) | ||
mips64el-unknown-linux-gnuabi64 | MIPS64 (LE) Linux, n64 ABI (kernel 4.4, glibc 2.23) | ||
mipsel-unknown-linux-gnu | MIPS (LE) Linux (kernel 4.4, glibc 2.23) | ||
mipsel-unknown-linux-uclibc | ✓ | MIPS (LE) Linux with uClibc | |
mipsel-unknown-none | * | Bare MIPS (LE) softfloat | |
mipsisa32r6-unknown-linux-gnu | ? | 32-bit MIPS Release 6 Big Endian | |
mipsisa32r6el-unknown-linux-gnu | ? | 32-bit MIPS Release 6 Little Endian | |
mipsisa64r6-unknown-linux-gnuabi64 | ? | 64-bit MIPS Release 6 Big Endian | |
mipsisa64r6el-unknown-linux-gnuabi64 | ✓ | ✓ | 64-bit MIPS Release 6 Little Endian |
msp430-none-elf | * | 16-bit MSP430 microcontrollers | |
powerpc-unknown-linux-gnuspe | ✓ | PowerPC SPE Linux | |
powerpc-unknown-linux-musl | ? | ||
powerpc-unknown-netbsd | ✓ | ✓ | NetBSD 32-bit powerpc systems |
powerpc-unknown-openbsd | ? | ||
powerpc-wrs-vxworks-spe | ? | ||
powerpc-wrs-vxworks | ? | ||
powerpc64-unknown-freebsd | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2) |
powerpc64le-unknown-freebsd | PPC64LE FreeBSD | ||
powerpc-unknown-freebsd | PowerPC FreeBSD | ||
powerpc64-unknown-linux-musl | ? | ||
powerpc64-wrs-vxworks | ? | ||
powerpc64le-unknown-linux-musl | ? | ||
powerpc64-unknown-openbsd | ✓ | ✓ | OpenBSD/powerpc64 |
powerpc64-ibm-aix | ? | 64-bit AIX (7.2 and newer) | |
riscv32gc-unknown-linux-gnu | RISC-V Linux (kernel 5.4, glibc 2.33) | ||
riscv32gc-unknown-linux-musl | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches) | ||
riscv32im-unknown-none-elf | * | Bare RISC-V (RV32IM ISA) | |
riscv32imac-unknown-xous-elf | ? | RISC-V Xous (RV32IMAC ISA) | |
riscv32imc-esp-espidf | ✓ | RISC-V ESP-IDF | |
riscv32imac-esp-espidf | ✓ | RISC-V ESP-IDF | |
riscv64gc-unknown-hermit | ✓ | RISC-V Hermit | |
riscv64gc-unknown-freebsd | RISC-V FreeBSD | ||
riscv64gc-unknown-fuchsia | RISC-V Fuchsia | ||
riscv64gc-unknown-linux-musl | RISC-V Linux (kernel 4.20, musl 1.2.0) | ||
riscv64gc-unknown-netbsd | ✓ | ✓ | RISC-V NetBSD |
riscv64gc-unknown-openbsd | ✓ | ✓ | OpenBSD/riscv64 |
riscv64-linux-android | RISC-V 64-bit Android | ||
s390x-unknown-linux-musl | S390x Linux (kernel 3.2, MUSL) | ||
sparc-unknown-linux-gnu | ✓ | 32-bit SPARC Linux | |
sparc-unknown-none-elf | * | Bare 32-bit SPARC V7+ | |
sparc64-unknown-netbsd | ✓ | ✓ | NetBSD/sparc64 |
sparc64-unknown-openbsd | ✓ | ✓ | OpenBSD/sparc64 |
thumbv4t-none-eabi | * | Thumb-mode Bare ARMv4T | |
thumbv5te-none-eabi | * | Thumb-mode Bare ARMv5TE | |
thumbv7a-pc-windows-msvc | ? | ||
thumbv7a-uwp-windows-msvc | ✓ | ||
thumbv7neon-unknown-linux-musleabihf | ? | Thumb2-mode ARMv7-A Linux with NEON, MUSL | |
wasm64-unknown-unknown | ? | WebAssembly | |
x86_64-apple-ios-macabi | ✓ | Apple Catalyst on x86_64 | |
x86_64-apple-tvos | ? | x86 64-bit tvOS | |
x86_64-apple-watchos-sim | ✓ | x86 64-bit Apple WatchOS simulator | |
x86_64-pc-nto-qnx710 | ✓ | x86 64-bit QNX Neutrino 7.1 RTOS | |
x86_64-pc-windows-gnullvm | ✓ | ✓ | |
x86_64-pc-windows-msvc | * | 64-bit Windows XP support | |
x86_64-sun-solaris | ? | Deprecated target for 64-bit Solaris 10/11, illumos | |
x86_64-unikraft-linux-musl | ✓ | 64-bit Unikraft with musl | |
x86_64-unknown-dragonfly | ✓ | ✓ | 64-bit DragonFlyBSD |
x86_64-unknown-haiku | ✓ | ✓ | 64-bit Haiku |
x86_64-unknown-hermit | ✓ | x86_64 Hermit | |
x86_64-unknown-l4re-uclibc | ? | ||
x86_64-unknown-linux-ohos | ✓ | x86_64 OpenHarmony | |
x86_64-unknown-openbsd | ✓ | ✓ | 64-bit OpenBSD |
x86_64-uwp-windows-gnu | ✓ | ||
x86_64-uwp-windows-msvc | ✓ | ||
x86_64-wrs-vxworks | ? | ||
x86_64h-apple-darwin | ✓ | ✓ | macOS with late-gen Intel (at least Haswell) |