Rust Platform Support

The Rust compiler runs on, and compiles to, a great number of platforms, though not all platforms are equally supported. Rust's support levels are organized into three tiers, each with a different set of guarantees.

Platforms are identified by their "target triple" which is the string to inform the compiler what kind of output should be produced. The columns below indicate whether the corresponding component works on the specified platform.

Tier 1

Tier 1 platforms can be thought of as "guaranteed to work". Specifically they will each satisfy the following requirements:

  • Official binary releases are provided for the platform.
  • Automated testing is set up to run tests for the platform.
  • Landing changes to the rust-lang/rust repository's master branch is gated on tests passing.
  • Documentation for how to use and how to build the platform is available.
targetstdrustccargonotes
i686-apple-darwin32-bit OSX (10.7+, Lion+)
i686-pc-windows-gnu32-bit MinGW (Windows 7+)
i686-pc-windows-msvc32-bit MSVC (Windows 7+)
i686-unknown-linux-gnu32-bit Linux (2.6.18+)
x86_64-apple-darwin64-bit OSX (10.7+, Lion+)
x86_64-pc-windows-gnu64-bit MinGW (Windows 7+)
x86_64-pc-windows-msvc64-bit MSVC (Windows 7+)
x86_64-unknown-linux-gnu64-bit Linux (2.6.18+)

Tier 2

Tier 2 platforms can be thought of as "guaranteed to build". Automated tests are not run so it's not guaranteed to produce a working build, but platforms often work to quite a good degree and patches are always welcome! Specifically, these platforms are required to have each of the following:

  • Official binary releases are provided for the platform.
  • Automated building is set up, but may not be running tests.
  • Landing changes to the rust-lang/rust repository's master branch is gated on platforms building. For some platforms only the standard library is compiled, but for others rustc and cargo are too.
targetstdrustccargonotes
aarch64-apple-iosARM64 iOS
aarch64-fuchsiaARM64 Fuchsia
aarch64-linux-androidARM64 Android
aarch64-pc-windows-msvcARM64 Windows MSVC
aarch64-unknown-linux-gnuARM64 Linux
aarch64-unknown-linux-muslARM64 Linux with MUSL
arm-linux-androideabiARMv7 Android
arm-unknown-linux-gnueabiARMv6 Linux
arm-unknown-linux-gnueabihfARMv6 Linux, hardfloat
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
armv5te-unknown-linux-musleabiARMv5TE Linux with MUSL
armv7-apple-iosARMv7 iOS, Cortex-a8
armv7-linux-androideabiARMv7a Android
armv7-none-eabi*Bare ARMv7-R
armv7-none-eabihf*Bare ARMv7-R, hardfloat
armv7-unknown-linux-gnueabihfARMv7 Linux
armv7-unknown-linux-musleabihfARMv7 Linux with MUSL
asmjs-unknown-emscriptenasm.js via Emscripten
i386-apple-ios32-bit x86 iOS
i586-pc-windows-msvc32-bit Windows w/o SSE
i586-unknown-linux-gnu32-bit Linux w/o SSE
i586-unknown-linux-musl32-bit Linux w/o SSE, MUSL
i686-linux-android32-bit x86 Android
i686-unknown-freebsd32-bit FreeBSD
i686-unknown-linux-musl32-bit Linux with MUSL
mips-unknown-linux-gnuMIPS Linux
mips-unknown-linux-muslMIPS Linux with MUSL
mips64-unknown-linux-gnuabi64MIPS64 Linux, n64 ABI
mips64el-unknown-linux-gnuabi64MIPS64 (LE) Linux, n64 ABI
mipsel-unknown-linux-gnuMIPS (LE) Linux
mipsel-unknown-linux-muslMIPS (LE) Linux with MUSL
powerpc-unknown-linux-gnuPowerPC Linux
powerpc64-unknown-linux-gnuPPC64 Linux
powerpc64le-unknown-linux-gnuPPC64LE Linux
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)
s390x-unknown-linux-gnuS390x Linux
sparc64-unknown-linux-gnuSPARC Linux
sparcv9-sun-solarisSPARC Solaris 10/11, illumos
thumbv6m-none-eabi*Bare Cortex-M0, M0+, M1
thumbv7em-none-eabi*Bare Cortex-M4, M7
thumbv7em-none-eabihf*Bare Cortex-M4F, M7F, FPU, hardfloat
thumbv7m-none-eabi*Bare Cortex-M3
thumbv7neon-linux-androideabiThumb2-mode ARMv7a Android with NEON
thumbv7neon-unknown-linux-gnueabihfThumb2-mode ARMv7a Linux with NEON
wasm32-unknown-emscriptenWebAssembly via Emscripten
wasm32-unknown-unknownWebAssembly
wasm32-wasiWebAssembly with WASI
x86_64-apple-ios64-bit x86 iOS
x86_64-fortanix-unknown-sgxFortanix ABI for 64-bit Intel SGX
x86_64-fuchsia64-bit Fuchsia
x86_64-linux-android64-bit x86 Android
x86_64-rumprun-netbsd64-bit NetBSD Rump Kernel
x86_64-sun-solaris64-bit Solaris 10/11, illumos
x86_64-unknown-cloudabi64-bit CloudABI
x86_64-unknown-freebsd64-bit FreeBSD
x86_64-unknown-linux-gnux3264-bit Linux (x32 ABI)
x86_64-unknown-linux-musl64-bit Linux with MUSL
x86_64-unknown-netbsdNetBSD/amd64
x86_64-unknown-redoxRedox OS

Tier 2.5

Tier 2.5 platforms can be thought of as "guaranteed to build", but without builds available through rustup. Automated tests are not run so it's not guaranteed to produce a working build, but platforms often work to quite a good degree and patches are always welcome! Specifically, these platforms are required to have each of the following:

  • Automated building is set up, but may not be running tests.
  • Landing changes to the rust-lang/rust repository's master branch is gated on platforms building. For some platforms only the standard library is compiled, but for others rustc and cargo are too.

This status is accidental: no new platforms should reach this state

targetstdrustccargonotes
aarch64-unknown-cloudabiARM64 CloudABI
armv7-unknown-cloudabi-eabihfARMv7 CloudABI, hardfloat
i686-unknown-cloudabi32-bit CloudABI
powerpc-unknown-linux-gnuspePowerPC SPE Linux
sparc-unknown-linux-gnu32-bit SPARC Linux

Tier 3

Tier 3 platforms are those which the Rust codebase has support for, but which are not built or tested automatically, and may not work. Official builds are not available.

targetstdrustccargonotes
aarch64-unknown-freebsd?
aarch64-unknown-hermit?
aarch64-unknown-netbsd?
aarch64-unknown-none?
aarch64-unknown-openbsdARM64 OpenBSD
aarch64-unknown-redox?
aarch64-uwp-windows-msvc?
aarch64-wrs-vxworks?
armv4t-unknown-linux-gnueabi?
armv6-unknown-freebsd?
armv6-unknown-netbsd-eabihf?
armv7-unknown-freebsd?
armv7-unknown-netbsd-eabihf?
armv7-wrs-vxworks-eabihf?
hexagon-unknown-linux-musl?
i686-pc-windows-msvc32-bit Windows XP support
i686-unknown-dragonfly?
i686-unknown-haiku32-bit Haiku
i686-unknown-netbsdNetBSD/i386 with SSE2
i686-unknown-openbsd32-bit OpenBSD
i686-uwp-windows-gnu?
i686-uwp-windows-msvc?
i686-wrs-vxworks?
mips-unknown-linux-uclibcMIPS Linux with uClibc
mips64-unknown-linux-muslabi64?
mips64el-unknown-linux-muslabi64?
mipsel-unknown-linux-uclibcMIPS (LE) Linux with uClibc
mipsisa32r6-unknown-linux-gnu?
mipsisa32r6el-unknown-linux-gnu?
mipsisa64r6-unknown-linux-gnuabi64?
mipsisa64r6el-unknown-linux-gnuabi64?
msp430-none-elf*16-bit MSP430 microcontrollers
nvptx64-nvidia-cuda**--emit=asm generates PTX code that runs on NVIDIA GPUs
nvptx64-nvidia-cuda**--emit=asm generates PTX code that runs on NVIDIA GPUs
powerpc-unknown-linux-musl?
powerpc-unknown-netbsd?
powerpc-wrs-vxworks?
powerpc-wrs-vxworks-spe?
powerpc64-unknown-freebsd?
powerpc64-unknown-linux-musl?
powerpc64-wrs-vxworks?
powerpc64le-unknown-linux-musl?
riscv32i-unknown-none-elf?
sparc64-unknown-netbsdNetBSD/sparc64
sparc64-unknown-openbsd?
thumbv7a-pc-windows-msvc?
thumbv8m.base-none-eabi?
thumbv8m.main-none-eabi?
thumbv8m.main-none-eabihf?
wasm32-experimental-emscripten?
x86_64-pc-solaris?
x86_64-pc-windows-msvc64-bit Windows XP support
x86_64-unknown-bitrig64-bit Bitrig
x86_64-unknown-dragonfly64-bit DragonFlyBSD
x86_64-unknown-haiku64-bit Haiku
x86_64-unknown-hermit?
x86_64-unknown-l4re-uclibc?
x86_64-unknown-openbsd64-bit OpenBSD
x86_64-unknown-uefi?
x86_64-uwp-windows-gnu
x86_64-uwp-windows-msvc
x86_64-wrs-vxworks?

* These are bare-metal microcontroller targets that only have access to the core library, not std.

** There’s backend support for these targets but no target built into rustc (yet). You’ll have to write your own target specification file (see the links in the table). These targets only support the core library.

? These are targets that haven't yet been documented here. If you can shed some light on these platforms support, please create an issue or PR on the Rust Forge repo.

But those aren't the only platforms Rust can compile to! Those are the ones with built-in target definitions and/or standard library support. When linking only to the core library, Rust can also target additional "bare metal" platforms in the x86, ARM, MIPS, and PowerPC families, though it may require defining custom target specifications to do so.