|
| 1 | +# Rust Platform Support |
| 2 | + |
| 3 | +The Rust compiler runs on, and compiles to, a great number of platforms, though |
| 4 | +not all platforms are equally supported. Rust's support levels are organized |
| 5 | +into three tiers, each with a different set of guarantees. |
| 6 | + |
| 7 | +Platforms are identified by their "target triple" which is the string to inform |
| 8 | +the compiler what kind of output should be produced. The columns below indicate |
| 9 | +whether the corresponding component works on the specified platform. |
| 10 | + |
| 11 | +## Tier 1 |
| 12 | +Tier 1 platforms can be thought of as "guaranteed to work". |
| 13 | +Specifically they will each satisfy the following requirements: |
| 14 | + |
| 15 | +* Official binary releases are provided for the platform. |
| 16 | +* Automated testing is set up to run tests for the platform. |
| 17 | +* Landing changes to the `rust-lang/rust` repository's master branch is gated on |
| 18 | + tests passing. |
| 19 | +* Documentation for how to use and how to build the platform is available. |
| 20 | + |
| 21 | +target | std | rustc | cargo | notes |
| 22 | +-------|-----|-------|-------|------- |
| 23 | +`i686-pc-windows-gnu` | ✓ | ✓ | ✓ | 32-bit MinGW (Windows 7+) |
| 24 | +`i686-pc-windows-msvc` | ✓ | ✓ | ✓ | 32-bit MSVC (Windows 7+) |
| 25 | +`i686-unknown-linux-gnu` | ✓ | ✓ | ✓ | 32-bit Linux (kernel 2.6.32+, glibc 2.11+) |
| 26 | +`x86_64-apple-darwin` | ✓ | ✓ | ✓ | 64-bit OSX (10.7+, Lion+) |
| 27 | +`x86_64-pc-windows-gnu` | ✓ | ✓ | ✓ | 64-bit MinGW (Windows 7+) |
| 28 | +`x86_64-pc-windows-msvc` | ✓ | ✓ | ✓ | 64-bit MSVC (Windows 7+) |
| 29 | +`x86_64-unknown-linux-gnu` | ✓ | ✓ | ✓ | 64-bit Linux (kernel 2.6.32+, glibc 2.11+) |
| 30 | + |
| 31 | +## Tier 2 |
| 32 | +Tier 2 platforms can be thought of as "guaranteed to build". Automated tests |
| 33 | +are not run so it's not guaranteed to produce a working build, but platforms |
| 34 | +often work to quite a good degree and patches are always welcome! |
| 35 | +Specifically, these platforms are required to have each of the following: |
| 36 | + |
| 37 | +* Official binary releases are provided for the platform. |
| 38 | +* Automated building is set up, but may not be running tests. |
| 39 | +* Landing changes to the `rust-lang/rust` repository's master branch is gated on |
| 40 | + platforms **building**. For some platforms only the standard library is |
| 41 | + compiled, but for others `rustc` and `cargo` are too. |
| 42 | + |
| 43 | +target | std | rustc | cargo | notes |
| 44 | +-------|-----|-------|-------|------- |
| 45 | +`aarch64-apple-ios` | ✓ | | | ARM64 iOS |
| 46 | +`aarch64-fuchsia` | ✓ | | | ARM64 Fuchsia |
| 47 | +`aarch64-linux-android` | ✓ | | | ARM64 Android |
| 48 | +`aarch64-pc-windows-msvc` | ✓ | | | ARM64 Windows MSVC |
| 49 | +`aarch64-unknown-linux-gnu` | ✓ | ✓ | ✓ | ARM64 Linux (kernel 4.2, glibc 2.17) |
| 50 | +`aarch64-unknown-linux-musl` | ✓ | | | ARM64 Linux with MUSL |
| 51 | +`aarch64-unknown-none` | * | | | Bare ARM64, hardfloat |
| 52 | +`aarch64-unknown-none-softfloat` | * | | | Bare ARM64, softfloat |
| 53 | +`arm-linux-androideabi` | ✓ | | | ARMv7 Android |
| 54 | +`arm-unknown-linux-gnueabi` | ✓ | ✓ | ✓ | ARMv6 Linux (kernel 3.2, glibc 2.17) |
| 55 | +`arm-unknown-linux-gnueabihf` | ✓ | ✓ | ✓ | ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17) |
| 56 | +`arm-unknown-linux-musleabi` | ✓ | | | ARMv6 Linux with MUSL |
| 57 | +`arm-unknown-linux-musleabihf` | ✓ | | | ARMv6 Linux with MUSL, hardfloat |
| 58 | +`armebv7r-none-eabi` | * | | | Bare ARMv7-R, Big Endian |
| 59 | +`armebv7r-none-eabihf` | * | | | Bare ARMv7-R, Big Endian, hardfloat |
| 60 | +`armv5te-unknown-linux-gnueabi` | ✓ | | | ARMv5TE Linux (kernel 4.4, glibc 2.23) |
| 61 | +`armv5te-unknown-linux-musleabi` | ✓ | | | ARMv5TE Linux with MUSL |
| 62 | +`armv7-linux-androideabi` | ✓ | | | ARMv7a Android |
| 63 | +`armv7a-none-eabi` | * | | | Bare ARMv7-A |
| 64 | +`armv7r-none-eabi` | * | | | Bare ARMv7-R |
| 65 | +`armv7r-none-eabihf` | * | | | Bare ARMv7-R, hardfloat |
| 66 | +`armv7-unknown-linux-gnueabi` | ✓ | | | ARMv7 Linux (kernel 4.15, glibc 2.27) |
| 67 | +`armv7-unknown-linux-gnueabihf` | ✓ | ✓ | ✓ | ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17) |
| 68 | +`armv7-unknown-linux-musleabi` | ✓ | | | ARMv7 Linux, MUSL |
| 69 | +`armv7-unknown-linux-musleabihf` | ✓ | | | ARMv7 Linux with MUSL |
| 70 | +`asmjs-unknown-emscripten` | ✓ | | | asm.js via Emscripten |
| 71 | +`i586-pc-windows-msvc` | ✓ | | | 32-bit Windows w/o SSE |
| 72 | +`i586-unknown-linux-gnu` | ✓ | | | 32-bit Linux w/o SSE (kernel 4.4, glibc 2.23) |
| 73 | +`i586-unknown-linux-musl` | ✓ | | | 32-bit Linux w/o SSE, MUSL |
| 74 | +`i686-linux-android` | ✓ | | | 32-bit x86 Android |
| 75 | +`i686-unknown-freebsd` | ✓ | ✓ | ✓ | 32-bit FreeBSD |
| 76 | +`i686-unknown-linux-musl` | ✓ | | | 32-bit Linux with MUSL |
| 77 | +`mips-unknown-linux-gnu` | ✓ | ✓ | ✓ | MIPS Linux (kernel 4.4, glibc 2.23) |
| 78 | +`mips-unknown-linux-musl` | ✓ | | | MIPS Linux with MUSL |
| 79 | +`mips64-unknown-linux-gnuabi64` | ✓ | ✓ | ✓ | MIPS64 Linux, n64 ABI (kernel 4.4, glibc 2.23) |
| 80 | +`mips64-unknown-linux-muslabi64` | ✓ | | | MIPS64 Linux, n64 ABI, MUSL |
| 81 | +`mips64el-unknown-linux-gnuabi64` | ✓ | ✓ | ✓ | MIPS64 (LE) Linux, n64 ABI (kernel 4.4, glibc 2.23) |
| 82 | +`mips64el-unknown-linux-muslabi64` | ✓ | | | MIPS64 (LE) Linux, n64 ABI, MUSL |
| 83 | +`mipsel-unknown-linux-gnu` | ✓ | ✓ | ✓ | MIPS (LE) Linux (kernel 4.4, glibc 2.23) |
| 84 | +`mipsel-unknown-linux-musl` | ✓ | | | MIPS (LE) Linux with MUSL |
| 85 | +`nvptx64-nvidia-cuda` | ✓ | | | --emit=asm generates PTX code that [runs on NVIDIA GPUs] |
| 86 | +`powerpc-unknown-linux-gnu` | ✓ | ✓ | ✓ | PowerPC Linux (kernel 2.6.32, glibc 2.11) |
| 87 | +`powerpc64-unknown-linux-gnu` | ✓ | ✓ | ✓ | PPC64 Linux (kernel 2.6.32, glibc 2.11) |
| 88 | +`powerpc64le-unknown-linux-gnu` | ✓ | ✓ | ✓ | PPC64LE Linux (kernel 3.10, glibc 2.17) |
| 89 | +`riscv32i-unknown-none-elf` | * | | | Bare RISC-V (RV32I ISA) |
| 90 | +`riscv32imac-unknown-none-elf` | * | | | Bare RISC-V (RV32IMAC ISA) |
| 91 | +`riscv32imc-unknown-none-elf` | * | | | Bare RISC-V (RV32IMC ISA) |
| 92 | +`riscv64gc-unknown-linux-gnu` | ✓ | ✓ | ✓ | RISC-V Linux (kernel 4.20, glibc 2.29) |
| 93 | +`riscv64gc-unknown-none-elf` | * | | | Bare RISC-V (RV64IMAFDC ISA) |
| 94 | +`riscv64imac-unknown-none-elf` | * | | | Bare RISC-V (RV64IMAC ISA) |
| 95 | +`s390x-unknown-linux-gnu` | ✓ | ✓ | ✓ | S390x Linux (kernel 2.6.32, glibc 2.11) |
| 96 | +`sparc64-unknown-linux-gnu` | ✓ | | | SPARC Linux (kernel 4.4, glibc 2.23) |
| 97 | +`sparcv9-sun-solaris` | ✓ | | | SPARC Solaris 10/11, illumos |
| 98 | +`thumbv6m-none-eabi` | * | | | Bare Cortex-M0, M0+, M1 |
| 99 | +`thumbv7em-none-eabi` | * | | | Bare Cortex-M4, M7 |
| 100 | +`thumbv7em-none-eabihf` | * | | | Bare Cortex-M4F, M7F, FPU, hardfloat |
| 101 | +`thumbv7m-none-eabi` | * | | | Bare Cortex-M3 |
| 102 | +`thumbv7neon-linux-androideabi` | ✓ | | | Thumb2-mode ARMv7a Android with NEON |
| 103 | +`thumbv7neon-unknown-linux-gnueabihf` | ✓ | | | Thumb2-mode ARMv7a Linux with NEON (kernel 4.4, glibc 2.23) |
| 104 | +`thumbv8m.base-none-eabi` | * | | | ARMv8-M Baseline |
| 105 | +`thumbv8m.main-none-eabi` | * | | | ARMv8-M Mainline |
| 106 | +`thumbv8m.main-none-eabihf` | * | | | ARMv8-M Baseline, hardfloat |
| 107 | +`wasm32-unknown-emscripten` | ✓ | | | WebAssembly via Emscripten |
| 108 | +`wasm32-unknown-unknown` | ✓ | | | WebAssembly |
| 109 | +`wasm32-wasi` | ✓ | | | WebAssembly with WASI |
| 110 | +`x86_64-apple-ios` | ✓ | | | 64-bit x86 iOS |
| 111 | +`x86_64-fortanix-unknown-sgx` | ✓ | | | [Fortanix ABI] for 64-bit Intel SGX |
| 112 | +`x86_64-fuchsia` | ✓ | | | 64-bit Fuchsia |
| 113 | +`x86_64-linux-android` | ✓ | | | 64-bit x86 Android |
| 114 | +`x86_64-rumprun-netbsd` | ✓ | | | 64-bit NetBSD Rump Kernel |
| 115 | +`x86_64-sun-solaris` | ✓ | | | 64-bit Solaris 10/11, illumos |
| 116 | +`x86_64-unknown-cloudabi` | ✓ | | | 64-bit CloudABI |
| 117 | +`x86_64-unknown-freebsd` | ✓ | ✓ | ✓ | 64-bit FreeBSD |
| 118 | +`x86_64-unknown-illumos` | ✓ | ✓ | ✓ | illumos |
| 119 | +`x86_64-unknown-linux-gnux32` | ✓ | | | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27) |
| 120 | +`x86_64-unknown-linux-musl` | ✓ | ✓ | ✓ | 64-bit Linux with MUSL |
| 121 | +`x86_64-unknown-netbsd` | ✓ | ✓ | ✓ | NetBSD/amd64 |
| 122 | +`x86_64-unknown-redox` | ✓ | | | Redox OS |
| 123 | + |
| 124 | +[Fortanix ABI]: https://edp.fortanix.com/ |
| 125 | + |
| 126 | +## Tier 3 |
| 127 | +Tier 3 platforms are those which the Rust codebase has support for, but which |
| 128 | +are not built or tested automatically, and may not work. Official builds are |
| 129 | +not available. |
| 130 | + |
| 131 | +target | std | rustc | cargo | notes |
| 132 | +-------|-----|-------|-------|------- |
| 133 | +`aarch64-apple-darwin` | ? | | | ARM64 macOS |
| 134 | +`aarch64-apple-tvos` | ** | | | ARM64 tvOS |
| 135 | +`aarch64-unknown-cloudabi` | ✓ | | | ARM64 CloudABI |
| 136 | +`aarch64-unknown-freebsd` | ✓ | ✓ | ✓ | ARM64 FreeBSD |
| 137 | +`aarch64-unknown-hermit` | ? | | | |
| 138 | +`aarch64-unknown-netbsd` | ? | | | |
| 139 | +`aarch64-unknown-openbsd` | ✓ | ✓ | ✓ | ARM64 OpenBSD |
| 140 | +`aarch64-unknown-redox` | ? | | | ARM64 Redox OS |
| 141 | +`aarch64-uwp-windows-msvc` | ? | | | |
| 142 | +`aarch64-wrs-vxworks` | ? | | | |
| 143 | +`armv4t-unknown-linux-gnueabi` | ? | | | |
| 144 | +`armv6-unknown-freebsd` | ✓ | ✓ | ✓ | ARMv6 FreeBSD |
| 145 | +`armv6-unknown-netbsd-eabihf` | ? | | | |
| 146 | +`armv7-apple-ios` | ✓ | | | RMv7 iOS, Cortex- |
| 147 | +`armv7-unknown-cloudabi-eabihf` | ✓ | | | ARMv7 CloudABI, hardfloat |
| 148 | +`armv7-unknown-freebsd` | ✓ | ✓ | ✓ | ARMv7 FreeBSD |
| 149 | +`armv7-unknown-netbsd-eabihf` | ? | | | |
| 150 | +`armv7-wrs-vxworks-eabihf` | ? | | | |
| 151 | +`armv7a-none-eabihf` | * | | | ARM Cortex-A, hardfloat |
| 152 | +`armv7s-apple-ios` | ✓ | | | |
| 153 | +`avr-unknown-unknown` | ? | | | AVR |
| 154 | +`hexagon-unknown-linux-musl` | ? | | | |
| 155 | +`i386-apple-ios` | ✓ | | | 32-bit x86 iOS |
| 156 | +`i686-apple-darwin` | ✓ | ✓ | ✓ | 32-bit OSX (10.7+, Lion+) |
| 157 | +`i686-pc-windows-msvc` | ✓ | | | 32-bit Windows XP support |
| 158 | +`i686-unknown-cloudabi` | ✓ | | | 32-bit CloudABI |
| 159 | +`i686-unknown-uefi` | ? | | | 32-bit UEFI |
| 160 | +`i686-unknown-haiku` | ✓ | ✓ | ✓ | 32-bit Haiku |
| 161 | +`i686-unknown-netbsd` | ✓ | | | NetBSD/i386 with SSE2 |
| 162 | +`i686-unknown-openbsd` | ✓ | ✓ | ✓ | 32-bit OpenBSD |
| 163 | +`i686-uwp-windows-gnu` | ? | | | |
| 164 | +`i686-uwp-windows-msvc` | ? | | | |
| 165 | +`i686-wrs-vxworks` | ? | | | |
| 166 | +`mips-unknown-linux-uclibc` | ✓ | | | MIPS Linux with uClibc |
| 167 | +`mipsel-unknown-linux-uclibc` | ✓ | | | MIPS (LE) Linux with uClibc |
| 168 | +`mipsel-sony-psp` | ** | | | MIPS (LE) Sony PlayStation Portable (PSP) |
| 169 | +`mipsisa32r6-unknown-linux-gnu` | ? | | | |
| 170 | +`mipsisa32r6el-unknown-linux-gnu` | ? | | | |
| 171 | +`mipsisa64r6-unknown-linux-gnuabi64` | ? | | | |
| 172 | +`mipsisa64r6el-unknown-linux-gnuabi64` | ? | | | |
| 173 | +`msp430-none-elf` | * | | | 16-bit MSP430 microcontrollers |
| 174 | +`powerpc-unknown-linux-gnuspe` | ✓ | | | PowerPC SPE Linux |
| 175 | +`powerpc-unknown-linux-musl` | ? | | | |
| 176 | +`powerpc-unknown-netbsd` | ? | | | |
| 177 | +`powerpc-wrs-vxworks` | ? | | | |
| 178 | +`powerpc-wrs-vxworks-spe` | ? | | | |
| 179 | +`powerpc64-unknown-freebsd` | ✓ | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2) |
| 180 | +`powerpc64-unknown-linux-musl` | ? | | | |
| 181 | +`powerpc64-wrs-vxworks` | ? | | | |
| 182 | +`powerpc64le-unknown-linux-musl` | ? | | | |
| 183 | +`sparc-unknown-linux-gnu` | ✓ | | | 32-bit SPARC Linux |
| 184 | +`sparc64-unknown-netbsd` | ✓ | ✓ | | NetBSD/sparc64 |
| 185 | +`sparc64-unknown-openbsd` | ? | | | |
| 186 | +`thumbv7a-pc-windows-msvc` | ? | | | |
| 187 | +`thumbv7a-uwp-windows-msvc` | ✓ | | | |
| 188 | +`thumbv7neon-unknown-linux-musleabihf` | ? | | | Thumb2-mode ARMv7a Linux with NEON, MUSL |
| 189 | +`thumbv4t-none-eabi` | * | | | ARMv4T T32 |
| 190 | +`x86_64-apple-ios-macabi` | ✓ | | | Apple Catalyst |
| 191 | +`x86_64-apple-tvos` | ** | | | x86 64-bit tvOS |
| 192 | +`x86_64-linux-kernel` | ? | | | Linux kernel modules |
| 193 | +`x86_64-pc-solaris` | ? | | | |
| 194 | +`x86_64-pc-windows-msvc` | ✓ | | | 64-bit Windows XP support |
| 195 | +`x86_64-unknown-dragonfly` | ✓ | ✓ | ✓ | 64-bit DragonFlyBSD |
| 196 | +`x86_64-unknown-haiku` | ✓ | ✓ | ✓ | 64-bit Haiku |
| 197 | +`x86_64-unknown-hermit` | ? | | | |
| 198 | +`x86_64-unknown-hermit-kernel` | ? | | | HermitCore kernel |
| 199 | +`x86_64-unknown-l4re-uclibc` | ? | | | |
| 200 | +`x86_64-unknown-openbsd` | ✓ | ✓ | ✓ | 64-bit OpenBSD |
| 201 | +`x86_64-unknown-uefi` | ? | | | |
| 202 | +`x86_64-uwp-windows-gnu` | ✓ | | | |
| 203 | +`x86_64-uwp-windows-msvc` | ✓ | | | |
| 204 | +`x86_64-wrs-vxworks` | ? | | | |
| 205 | + |
| 206 | + |
| 207 | +\* These targets only support `core`, not `alloc` or `std`. |
| 208 | + |
| 209 | +\*\* These targets only support `core` or `alloc`, not `std`. |
| 210 | + |
| 211 | +? These are targets that haven't yet been documented here. If you can shed some |
| 212 | + light on these platforms support, please create an issue or PR on the [Rust |
| 213 | + Forge repo]. |
| 214 | + |
| 215 | +But those aren't the only platforms Rust can compile to! Those are the ones with |
| 216 | +built-in target definitions and/or standard library support. When linking only |
| 217 | +to the core library, Rust can also target additional "bare metal" platforms in |
| 218 | +the x86, ARM, MIPS, and PowerPC families, though it may require defining custom |
| 219 | +target specifications to do so. |
| 220 | + |
| 221 | +[runs on NVIDIA GPUs]: https://github.com/japaric-archived/nvptx#targets |
| 222 | +[Rust Forge repo]: https://github.com/rust-lang/rust-forge |
0 commit comments