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.

targetnotes
aarch64-unknown-linux-gnuARM64 Linux (kernel 4.1, glibc 2.17+) 1
i686-pc-windows-gnu32-bit MinGW (Windows 7+) 2 3
i686-pc-windows-msvc32-bit MSVC (Windows 7+) 2 3
i686-unknown-linux-gnu32-bit Linux (kernel 3.2+, glibc 2.17+) 3
x86_64-apple-darwin64-bit macOS (10.12+, Sierra+)
x86_64-pc-windows-gnu64-bit MinGW (Windows 7+) 2
x86_64-pc-windows-msvc64-bit MSVC (Windows 7+) 2
x86_64-unknown-linux-gnu64-bit Linux (kernel 3.2+, glibc 2.17+)
1

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.

2

Only Windows 10 currently undergoes automated testing. Earlier versions of Windows rely on testing and support from the community.

3

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 target-specific code is not closely scrutinized by Rust team(s) when modifications are made. Bugs are possible in all code, but the level of quality control for these targets is likely to be lower. See library team policy for details on the review practices for standard library code.

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.

targetnotes
aarch64-apple-darwinARM64 macOS (11.0+, Big Sur+)
aarch64-pc-windows-msvcARM64 Windows MSVC
aarch64-unknown-linux-muslARM64 Linux with MUSL
arm-unknown-linux-gnueabiARMv6 Linux (kernel 3.2, glibc 2.17)
arm-unknown-linux-gnueabihfARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17)
armv7-unknown-linux-gnueabihfARMv7-A Linux, hardfloat (kernel 3.2, glibc 2.17)
loongarch64-unknown-linux-gnuLoongArch64 Linux, LP64D ABI (kernel 5.19, glibc 2.36)
powerpc-unknown-linux-gnuPowerPC Linux (kernel 3.2, glibc 2.17)
powerpc64-unknown-linux-gnuPPC64 Linux (kernel 3.2, glibc 2.17)
powerpc64le-unknown-linux-gnuPPC64LE Linux (kernel 3.10, glibc 2.17)
riscv64gc-unknown-linux-gnuRISC-V Linux (kernel 4.20, glibc 2.29)
s390x-unknown-linux-gnuS390x Linux (kernel 3.2, glibc 2.17)
x86_64-unknown-freebsd64-bit FreeBSD
x86_64-unknown-illumosillumos
x86_64-unknown-linux-musl64-bit Linux with MUSL
x86_64-unknown-netbsdNetBSD/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.

Tier 2 target-specific code is not closely scrutinized by Rust team(s) when modifications are made. Bugs are possible in all code, but the level of quality control for these targets is likely to be lower. See library team policy for details on the review practices for standard library code.

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.

targetstdnotes
aarch64-apple-iosARM64 iOS
aarch64-apple-ios-simApple iOS Simulator on ARM64
aarch64-fuchsiaAlias for aarch64-unknown-fuchsia
aarch64-unknown-fuchsiaARM64 Fuchsia
aarch64-linux-androidARM64 Android
aarch64-unknown-none-softfloat*Bare ARM64, softfloat
aarch64-unknown-none*Bare ARM64, hardfloat
aarch64-unknown-uefi*ARM64 UEFI
arm-linux-androideabiARMv6 Android
arm-unknown-linux-musleabiARMv6 Linux with MUSL
arm-unknown-linux-musleabihfARMv6 Linux with MUSL, hardfloat
armebv7r-none-eabi*Bare ARMv7-R, Big Endian
armebv7r-none-eabihf*Bare ARMv7-R, Big Endian, hardfloat
armv5te-unknown-linux-gnueabiARMv5TE Linux (kernel 4.4, glibc 2.23)
armv5te-unknown-linux-musleabiARMv5TE Linux with MUSL
armv7-linux-androideabiARMv7-A Android
armv7-unknown-linux-gnueabiARMv7-A Linux (kernel 4.15, glibc 2.27)
armv7-unknown-linux-musleabiARMv7-A Linux with MUSL
armv7-unknown-linux-musleabihfARMv7-A Linux with MUSL, hardfloat
armv7a-none-eabi*Bare ARMv7-A
armv7r-none-eabi*Bare ARMv7-R
armv7r-none-eabihf*Bare ARMv7-R, hardfloat
i586-pc-windows-msvc*32-bit Windows w/o SSE 4
i586-unknown-linux-gnu32-bit Linux w/o SSE (kernel 3.2, glibc 2.17) 4
i586-unknown-linux-musl32-bit Linux w/o SSE, MUSL 4
i686-linux-android32-bit x86 Android 3
i686-unknown-freebsd32-bit FreeBSD 3
i686-unknown-linux-musl32-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
riscv32imac-unknown-none-elf*Bare RISC-V (RV32IMAC ISA)
riscv32i-unknown-none-elf*Bare RISC-V (RV32I ISA)
riscv32im-unknown-none-elf*
riscv32imc-unknown-none-elf*Bare RISC-V (RV32IMC ISA)
riscv32imafc-unknown-none-elf*Bare RISC-V (RV32IMAFC ISA)
riscv64gc-unknown-none-elf*Bare RISC-V (RV64IMAFDC ISA)
riscv64imac-unknown-none-elf*Bare RISC-V (RV64IMAC ISA)
sparc64-unknown-linux-gnuSPARC Linux (kernel 4.4, glibc 2.23)
sparcv9-sun-solarisSPARC Solaris 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-androideabiThumb2-mode ARMv7-A Android with NEON
thumbv7neon-unknown-linux-gnueabihfThumb2-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-emscriptenWebAssembly via Emscripten
wasm32-unknown-unknownWebAssembly
wasm32-wasiWebAssembly with WASI
wasm32-wasi-preview1-threads
x86_64-apple-ios64-bit x86 iOS
x86_64-fortanix-unknown-sgxFortanix ABI for 64-bit Intel SGX
x86_64-fuchsiaAlias for x86_64-unknown-fuchsia
x86_64-unknown-fuchsia64-bit x86 Fuchsia
x86_64-linux-android64-bit x86 Android
x86_64-pc-solaris64-bit Solaris 11, illumos
x86_64-unknown-linux-gnux3264-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27)
x86_64-unknown-none*Freestanding/bare-metal x86_64, softfloat
x86_64-unknown-redoxRedox OS
x86_64-unknown-uefi*64-bit UEFI
4

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.

Tier 3 target-specific code is not closely scrutinized by Rust team(s) when modifications are made. Bugs are possible in all code, but the level of quality control for these targets is likely to be lower. See library team policy for details on the review practices for standard library code.

The host column indicates whether the codebase includes support for building host tools.

targetstdhostnotes
arm64e-apple-iosARM64e Apple iOS
arm64e-apple-darwinARM64e Apple Darwin
aarch64-apple-ios-macabi?Apple Catalyst on ARM64
aarch64-apple-tvos?ARM64 tvOS
aarch64-apple-tvos-sim?ARM64 tvOS Simulator
aarch64-apple-watchosARM64 Apple WatchOS
aarch64-apple-watchos-simARM64 Apple WatchOS Simulator
aarch64-kmc-solid_asp3ARM64 SOLID with TOPPERS/ASP3
aarch64-nintendo-switch-freestanding*ARM64 Nintendo Switch, Horizon
aarch64-pc-windows-gnullvm
aarch64-unknown-linux-ohosARM64 OpenHarmony
aarch64-unknown-teeos?ARM64 TEEOS
aarch64-unknown-nto-qnx710ARM64 QNX Neutrino 7.1 RTOS
aarch64-unknown-freebsdARM64 FreeBSD
aarch64-unknown-hermitARM64 Hermit
aarch64-unknown-illumosARM64 illumos
aarch64-unknown-linux-gnu_ilp32ARM64 Linux (ILP32 ABI)
aarch64-unknown-netbsdARM64 NetBSD
aarch64-unknown-openbsdARM64 OpenBSD
aarch64-unknown-redox?ARM64 Redox OS
aarch64-uwp-windows-msvc?
aarch64-wrs-vxworks?
aarch64_be-unknown-linux-gnu_ilp32ARM64 Linux (big-endian, ILP32 ABI)
aarch64_be-unknown-linux-gnuARM64 Linux (big-endian)
aarch64_be-unknown-netbsdARM64 NetBSD (big-endian)
arm64_32-apple-watchosARM 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-freebsdARMv6 FreeBSD
armv6-unknown-netbsd-eabihfARMv6 NetBSD w/hard-float
armv6k-nintendo-3ds?ARMv6K Nintendo 3DS, Horizon (Requires devkitARM toolchain)
armv7-sony-vita-newlibeabihfARMv7-A Cortex-A9 Sony PlayStation Vita (requires VITASDK toolchain)
armv7-unknown-linux-ohosARMv7-A OpenHarmony
armv7-unknown-linux-uclibceabiARMv7-A Linux with uClibc, softfloat
armv7-unknown-linux-uclibceabihf?ARMv7-A Linux with uClibc, hardfloat
armv7-unknown-freebsdARMv7-A FreeBSD
armv7-unknown-netbsd-eabihfARMv7-A NetBSD w/hard-float
armv7-wrs-vxworks-eabihf?ARMv7-A for VxWorks
armv7a-kmc-solid_asp3-eabiARM SOLID with TOPPERS/ASP3
armv7a-kmc-solid_asp3-eabihfARM SOLID with TOPPERS/ASP3, hardfloat
armv7a-none-eabihf*Bare ARMv7-A, hardfloat
armv7k-apple-watchosARMv7-A Apple WatchOS
armv7s-apple-iosARMv7-A Apple-A6 Apple iOS
armv8r-none-eabihf*Bare ARMv8-R, hardfloat
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-gnuabiv2C-SKY abiv2 Linux (little endian)
csky-unknown-linux-gnuabiv2hfC-SKY abiv2 Linux, hardfloat (little endian)
hexagon-unknown-none-elf*Bare Hexagon (v60+, HVX)
hexagon-unknown-linux-musl?
i386-apple-ios32-bit x86 iOS 3
i586-pc-nto-qnx700*32-bit x86 QNX Neutrino 7.0 RTOS 3
i586-unknown-netbsd32-bit x86, restricted to Pentium
i686-apple-darwin32-bit macOS (10.12+, Sierra+) 3
i686-pc-windows-msvc*32-bit Windows XP support 3
i686-pc-windows-gnullvm3
i686-unknown-haiku32-bit Haiku 3
i686-unknown-hurd-gnu32-bit GNU/Hurd 3
i686-unknown-netbsdNetBSD/i386 with SSE2 3
i686-unknown-openbsd32-bit OpenBSD 3
i686-uwp-windows-gnu?3
i686-uwp-windows-msvc?3
i686-win7-windows-msvc32-bit Windows 7 support 3
i686-wrs-vxworks?3
m68k-unknown-linux-gnu?Motorola 680x0 Linux
mips-unknown-linux-gnuMIPS Linux (kernel 4.4, glibc 2.23)
mips-unknown-linux-muslMIPS Linux with musl libc
mips-unknown-linux-uclibcMIPS Linux with uClibc
mips64-openwrt-linux-musl?MIPS64 for OpenWrt Linux MUSL
mips64-unknown-linux-gnuabi64MIPS64 Linux, N64 ABI (kernel 4.4, glibc 2.23)
mips64-unknown-linux-muslabi64MIPS64 Linux, N64 ABI, musl libc
mips64el-unknown-linux-gnuabi64MIPS64 (little endian) Linux, N64 ABI (kernel 4.4, glibc 2.23)
mips64el-unknown-linux-muslabi64MIPS64 (little endian) Linux, N64 ABI, musl libc
mipsel-unknown-linux-gnuMIPS (little endian) Linux (kernel 4.4, glibc 2.23)
mipsel-unknown-linux-muslMIPS (little endian) Linux with musl libc
mipsel-unknown-netbsd32-bit MIPS (LE), requires mips32 cpu support
mipsel-sony-psp*MIPS (LE) Sony PlayStation Portable (PSP)
mipsel-sony-psx*MIPS (LE) Sony PlayStation 1 (PSX)
mipsel-unknown-linux-uclibcMIPS (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-gnuabi6464-bit MIPS Release 6 Little Endian
msp430-none-elf*16-bit MSP430 microcontrollers
powerpc-unknown-linux-gnuspePowerPC SPE Linux
powerpc-unknown-linux-musl?
powerpc-unknown-netbsdNetBSD 32-bit powerpc systems
powerpc-unknown-openbsd?
powerpc-wrs-vxworks-spe?
powerpc-wrs-vxworks?
powerpc64-unknown-freebsdPPC64 FreeBSD (ELFv1 and ELFv2)
powerpc64le-unknown-freebsdPPC64LE FreeBSD
powerpc-unknown-freebsdPowerPC FreeBSD
powerpc64-unknown-linux-musl?
powerpc64-wrs-vxworks?
powerpc64le-unknown-linux-musl?
powerpc64-unknown-openbsdOpenBSD/powerpc64
powerpc64-ibm-aix?64-bit AIX (7.2 and newer)
riscv32gc-unknown-linux-gnuRISC-V Linux (kernel 5.4, glibc 2.33)
riscv32gc-unknown-linux-muslRISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
riscv32im-risc0-zkvm-elf?RISC Zero's zero-knowledge Virtual Machine (RV32IM ISA)
riscv32imac-unknown-xous-elf?RISC-V Xous (RV32IMAC ISA)
riscv32imc-esp-espidfRISC-V ESP-IDF
riscv32imac-esp-espidfRISC-V ESP-IDF
riscv32imafc-esp-espidfRISC-V ESP-IDF
riscv64gc-unknown-hermitRISC-V Hermit
riscv64gc-unknown-freebsdRISC-V FreeBSD
riscv64gc-unknown-fuchsiaRISC-V Fuchsia
riscv64gc-unknown-linux-muslRISC-V Linux (kernel 4.20, musl 1.2.0)
riscv64gc-unknown-netbsdRISC-V NetBSD
riscv64gc-unknown-openbsdOpenBSD/riscv64
riscv64-linux-androidRISC-V 64-bit Android
s390x-unknown-linux-muslS390x Linux (kernel 3.2, MUSL)
sparc-unknown-linux-gnu32-bit SPARC Linux
sparc-unknown-none-elf*Bare 32-bit SPARC V7+
sparc64-unknown-netbsdNetBSD/sparc64
sparc64-unknown-openbsdOpenBSD/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-macabiApple Catalyst on x86_64
x86_64-apple-tvos?x86 64-bit tvOS
x86_64-apple-watchos-simx86 64-bit Apple WatchOS simulator
x86_64-pc-nto-qnx710x86 64-bit QNX Neutrino 7.1 RTOS
x86_64-pc-windows-gnullvm
x86_64-pc-windows-msvc*64-bit Windows XP support
x86_64-unikraft-linux-musl64-bit Unikraft with musl
x86_64-unknown-dragonfly64-bit DragonFlyBSD
x86_64-unknown-haiku64-bit Haiku
x86_64-unknown-hermitx86_64 Hermit
x86_64-unknown-l4re-uclibc?
x86_64-unknown-linux-ohosx86_64 OpenHarmony
x86_64-unknown-openbsd64-bit OpenBSD
x86_64-uwp-windows-gnu
x86_64-uwp-windows-msvc
x86_64-win7-windows-msvc64-bit Windows 7 support
x86_64-wrs-vxworks?
x86_64h-apple-darwinmacOS with late-gen Intel (at least Haswell)