]> git.lizzy.rs Git - rust.git/blob - src/doc/rustc/src/platform-support.md
Rollup merge of #93757 - jackh726:gat-bug-tests, r=nikomatsakis
[rust.git] / src / doc / rustc / src / platform-support.md
1 # Platform Support
2
3 <style type="text/css">
4     td code {
5         white-space: nowrap;
6     }
7 </style>
8
9 Support for different platforms ("targets") are organized into three tiers,
10 each with a different set of guarantees. For more information on the policies
11 for targets at each tier, see the [Target Tier Policy](target-tier-policy.md).
12
13 Targets are identified by their "target triple" which is the string to inform
14 the compiler what kind of output should be produced.
15
16 ## Tier 1 with Host Tools
17
18 Tier 1 targets can be thought of as "guaranteed to work". The Rust project
19 builds official binary releases for each tier 1 target, and automated testing
20 ensures that each tier 1 target builds and passes tests after each change.
21
22 Tier 1 targets with host tools additionally support running tools like `rustc`
23 and `cargo` natively on the target, and automated testing ensures that tests
24 pass for the host tools as well. This allows the target to be used as a
25 development platform, not just a compilation target. For the full requirements,
26 see [Tier 1 with Host Tools](target-tier-policy.md#tier-1-with-host-tools) in
27 the Target Tier Policy.
28
29 All tier 1 targets with host tools support the full standard library.
30
31 target | notes
32 -------|-------
33 `aarch64-unknown-linux-gnu` | ARM64 Linux (kernel 4.2, glibc 2.17+) [^missing-stack-probes]
34 `i686-pc-windows-gnu` | 32-bit MinGW (Windows 7+)
35 `i686-pc-windows-msvc` | 32-bit MSVC (Windows 7+)
36 `i686-unknown-linux-gnu` | 32-bit Linux (kernel 2.6.32+, glibc 2.11+)
37 `x86_64-apple-darwin` | 64-bit macOS (10.7+, Lion+)
38 `x86_64-pc-windows-gnu` | 64-bit MinGW (Windows 7+)
39 `x86_64-pc-windows-msvc` | 64-bit MSVC (Windows 7+)
40 `x86_64-unknown-linux-gnu` | 64-bit Linux (kernel 2.6.32+, glibc 2.11+)
41
42 [^missing-stack-probes]: Stack probes support is missing on
43   `aarch64-unknown-linux-gnu`, but it's planned to be implemented in the near
44   future. The implementation is tracked on [issue #77071][77071].
45
46 [77071]: https://github.com/rust-lang/rust/issues/77071
47
48 ## Tier 1
49
50 Tier 1 targets can be thought of as "guaranteed to work". The Rust project
51 builds official binary releases for each tier 1 target, and automated testing
52 ensures that each tier 1 target builds and passes tests after each change. For
53 the full requirements, see [Tier 1 target
54 policy](target-tier-policy.md#tier-1-target-policy) in the Target Tier Policy.
55
56 At this time, all Tier 1 targets are [Tier 1 with Host
57 Tools](#tier-1-with-host-tools).
58
59 ## Tier 2 with Host Tools
60
61 Tier 2 targets can be thought of as "guaranteed to build". The Rust project
62 builds official binary releases for each tier 2 target, and automated builds
63 ensure that each tier 2 target builds after each change. Automated tests are
64 not always run so it's not guaranteed to produce a working build, but tier 2
65 targets often work to quite a good degree and patches are always welcome!
66
67 Tier 2 targets with host tools additionally support running tools like `rustc`
68 and `cargo` natively on the target, and automated builds ensure that the host
69 tools build as well. This allows the target to be used as a development
70 platform, not just a compilation target. For the full requirements, see [Tier 2
71 with Host Tools](target-tier-policy.md#tier-2-with-host-tools) in the Target
72 Tier Policy.
73
74 All tier 2 targets with host tools support the full standard library.
75
76 **NOTE:** Tier 2 targets currently do not build the `rust-docs` component.
77
78 target | notes
79 -------|-------
80 `aarch64-apple-darwin` | ARM64 macOS (11.0+, Big Sur+)
81 `aarch64-pc-windows-msvc` | ARM64 Windows MSVC
82 `aarch64-unknown-linux-musl` | ARM64 Linux with MUSL
83 `arm-unknown-linux-gnueabi` | ARMv6 Linux (kernel 3.2, glibc 2.17)
84 `arm-unknown-linux-gnueabihf` | ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17)
85 `armv7-unknown-linux-gnueabihf` | ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17)
86 `mips-unknown-linux-gnu` | MIPS Linux (kernel 4.4, glibc 2.23)
87 `mips64-unknown-linux-gnuabi64` | MIPS64 Linux, n64 ABI (kernel 4.4, glibc 2.23)
88 `mips64el-unknown-linux-gnuabi64` | MIPS64 (LE) Linux, n64 ABI (kernel 4.4, glibc 2.23)
89 `mipsel-unknown-linux-gnu` | MIPS (LE) Linux (kernel 4.4, glibc 2.23)
90 `powerpc-unknown-linux-gnu` | PowerPC Linux (kernel 2.6.32, glibc 2.11)
91 `powerpc64-unknown-linux-gnu` | PPC64 Linux (kernel 2.6.32, glibc 2.11)
92 `powerpc64le-unknown-linux-gnu` | PPC64LE Linux (kernel 3.10, glibc 2.17)
93 `riscv64gc-unknown-linux-gnu` | RISC-V Linux (kernel 4.20, glibc 2.29)
94 `s390x-unknown-linux-gnu` | S390x Linux (kernel 2.6.32, glibc 2.11)
95 `x86_64-unknown-freebsd` | 64-bit FreeBSD
96 `x86_64-unknown-illumos` | illumos
97 `x86_64-unknown-linux-musl` | 64-bit Linux with MUSL
98 `x86_64-unknown-netbsd` | NetBSD/amd64
99
100 ## Tier 2
101
102 Tier 2 targets can be thought of as "guaranteed to build". The Rust project
103 builds official binary releases for each tier 2 target, and automated builds
104 ensure that each tier 2 target builds after each change. Automated tests are
105 not always run so it's not guaranteed to produce a working build, but tier 2
106 targets often work to quite a good degree and patches are always welcome! For
107 the full requirements, see [Tier 2 target
108 policy](target-tier-policy.md#tier-2-target-policy) in the Target Tier Policy.
109
110 The `std` column in the table below has the following meanings:
111
112 * ✓ indicates the full standard library is available.
113 * \* indicates the target only supports [`no_std`] development.
114
115 [`no_std`]: https://rust-embedded.github.io/book/intro/no-std.html
116
117 **NOTE:** Tier 2 targets currently do not build the `rust-docs` component.
118
119 target | std | notes
120 -------|:---:|-------
121 `aarch64-apple-ios` | ✓ | ARM64 iOS
122 [`aarch64-apple-ios-sim`](platform-support/aarch64-apple-ios-sim.md) | ✓ | Apple iOS Simulator on ARM64
123 `aarch64-fuchsia` | ✓ | ARM64 Fuchsia
124 `aarch64-linux-android` | ✓ | ARM64 Android
125 `aarch64-unknown-none-softfloat` | * | Bare ARM64, softfloat
126 `aarch64-unknown-none` | * | Bare ARM64, hardfloat
127 `arm-linux-androideabi` | ✓ | ARMv7 Android
128 `arm-unknown-linux-musleabi` | ✓ | ARMv6 Linux with MUSL
129 `arm-unknown-linux-musleabihf` | ✓ | ARMv6 Linux with MUSL, hardfloat
130 `armebv7r-none-eabi` | * | Bare ARMv7-R, Big Endian
131 `armebv7r-none-eabihf` | * | Bare ARMv7-R, Big Endian, hardfloat
132 `armv5te-unknown-linux-gnueabi` | ✓ | ARMv5TE Linux (kernel 4.4, glibc 2.23)
133 `armv5te-unknown-linux-musleabi` | ✓ | ARMv5TE Linux with MUSL
134 `armv7-linux-androideabi` | ✓ | ARMv7a Android
135 `armv7-unknown-linux-gnueabi` | ✓ |ARMv7 Linux (kernel 4.15, glibc 2.27)
136 `armv7-unknown-linux-musleabi` | ✓ |ARMv7 Linux with MUSL
137 `armv7-unknown-linux-musleabihf` | ✓ | ARMv7 Linux with MUSL, hardfloat
138 `armv7a-none-eabi` | * | Bare ARMv7-A
139 `armv7r-none-eabi` | * | Bare ARMv7-R
140 `armv7r-none-eabihf` | * | Bare ARMv7-R, hardfloat
141 `asmjs-unknown-emscripten` | ✓ | asm.js via Emscripten
142 `i586-pc-windows-msvc` | ✓ | 32-bit Windows w/o SSE
143 `i586-unknown-linux-gnu` | ✓ | 32-bit Linux w/o SSE (kernel 4.4, glibc 2.23)
144 `i586-unknown-linux-musl` | ✓ | 32-bit Linux w/o SSE, MUSL
145 `i686-linux-android` | ✓ | 32-bit x86 Android
146 `i686-unknown-freebsd` | ✓ | 32-bit FreeBSD
147 `i686-unknown-linux-musl` | ✓ | 32-bit Linux with MUSL
148 `mips-unknown-linux-musl` | ✓ | MIPS Linux with MUSL
149 `mips64-unknown-linux-muslabi64` | ✓ | MIPS64 Linux, n64 ABI, MUSL
150 `mips64el-unknown-linux-muslabi64` | ✓ | MIPS64 (LE) Linux, n64 ABI, MUSL
151 `mipsel-unknown-linux-musl` | ✓ | MIPS (LE) Linux with MUSL
152 `nvptx64-nvidia-cuda` | * | --emit=asm generates PTX code that [runs on NVIDIA GPUs]
153 `riscv32i-unknown-none-elf` | * | Bare RISC-V (RV32I ISA)
154 `riscv32imac-unknown-none-elf` | * | Bare RISC-V (RV32IMAC ISA)
155 `riscv32imc-unknown-none-elf` | * | Bare RISC-V (RV32IMC ISA)
156 `riscv64gc-unknown-none-elf` | * | Bare RISC-V (RV64IMAFDC ISA)
157 `riscv64imac-unknown-none-elf` | * | Bare RISC-V (RV64IMAC ISA)
158 `sparc64-unknown-linux-gnu` | ✓ | SPARC Linux (kernel 4.4, glibc 2.23)
159 `sparcv9-sun-solaris` | ✓ | SPARC Solaris 10/11, illumos
160 `thumbv6m-none-eabi` | * | Bare Cortex-M0, M0+, M1
161 `thumbv7em-none-eabi` | * | Bare Cortex-M4, M7
162 `thumbv7em-none-eabihf` | * | Bare Cortex-M4F, M7F, FPU, hardfloat
163 `thumbv7m-none-eabi` | * | Bare Cortex-M3
164 `thumbv7neon-linux-androideabi` | ✓ | Thumb2-mode ARMv7a Android with NEON
165 `thumbv7neon-unknown-linux-gnueabihf` | ✓ | Thumb2-mode ARMv7a Linux with NEON (kernel 4.4, glibc 2.23)
166 `thumbv8m.base-none-eabi` | * | ARMv8-M Baseline
167 `thumbv8m.main-none-eabi` | * | ARMv8-M Mainline
168 `thumbv8m.main-none-eabihf` | * | ARMv8-M Mainline, hardfloat
169 `wasm32-unknown-emscripten` | ✓ | WebAssembly via Emscripten
170 `wasm32-unknown-unknown` | ✓ | WebAssembly
171 `wasm32-wasi` | ✓ | WebAssembly with WASI
172 `x86_64-apple-ios` | ✓ | 64-bit x86 iOS
173 `x86_64-fortanix-unknown-sgx` | ✓ | [Fortanix ABI] for 64-bit Intel SGX
174 `x86_64-fuchsia` | ✓ | 64-bit Fuchsia
175 `x86_64-linux-android` | ✓ | 64-bit x86 Android
176 `x86_64-pc-solaris` | ✓ | 64-bit Solaris 10/11, illumos
177 `x86_64-unknown-linux-gnux32` | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27)
178 `x86_64-unknown-redox` | ✓ | Redox OS
179
180 [Fortanix ABI]: https://edp.fortanix.com/
181
182 ## Tier 3
183
184 Tier 3 targets are those which the Rust codebase has support for, but which the
185 Rust project does not build or test automatically, so they may or may not work.
186 Official builds are not available. For the full requirements, see [Tier 3
187 target policy](target-tier-policy.md#tier-3-target-policy) in the Target Tier
188 Policy.
189
190 The `std` column in the table below has the following meanings:
191
192 * ✓ indicates the full standard library is available.
193 * \* indicates the target only supports [`no_std`] development.
194 * ? indicates the standard library support is unknown or a work-in-progress.
195
196 [`no_std`]: https://rust-embedded.github.io/book/intro/no-std.html
197
198 The `host` column indicates whether the codebase includes support for building
199 host tools.
200
201 target | std | host | notes
202 -------|:---:|:----:|-------
203 `aarch64-apple-ios-macabi` | ? |  | Apple Catalyst on ARM64
204 `aarch64-apple-tvos` | * |  | ARM64 tvOS
205 [`aarch64-kmc-solid_asp3`](platform-support/kmc-solid.md) | ✓ |  | ARM64 SOLID with TOPPERS/ASP3
206 `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
207 `aarch64-unknown-hermit` | ✓ |  | ARM64 HermitCore
208 [`aarch64-unknown-none-hermitkernel`](platform-support/aarch64-unknown-none-hermitkernel.md) | * |  | ARM64 HermitCore kernel
209 `aarch64-unknown-uefi` | * |  | ARM64 UEFI
210 `aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
211 `aarch64-unknown-netbsd` | ✓ | ✓ |
212 [`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD
213 `aarch64-unknown-redox` | ? |  | ARM64 Redox OS
214 `aarch64-uwp-windows-msvc` | ? |  |
215 `aarch64-wrs-vxworks` | ? |  |
216 `aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
217 `aarch64_be-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (big-endian)
218 `armv4t-unknown-linux-gnueabi` | ? |  |
219 `armv5te-unknown-linux-uclibceabi` | ? |  | ARMv5TE Linux with uClibc
220 `armv6-unknown-freebsd` | ✓ | ✓ | ARMv6 FreeBSD
221 `armv6-unknown-netbsd-eabihf` | ? |  |
222 `armv6k-nintendo-3ds` | * |  | ARMv6K Nintendo 3DS, Horizon (Requires devkitARM toolchain)
223 `armv7-apple-ios` | ✓ |  | ARMv7 iOS, Cortex-a8
224 [`armv7-unknown-linux-uclibceabi`](platform-support/armv7-unknown-linux-uclibceabi.md) | ✓ | ✓ | ARMv7 Linux with uClibc, softfloat
225 [`armv7-unknown-linux-uclibceabihf`](platform-support/armv7-unknown-linux-uclibceabihf.md) | ✓ | ? | ARMv7 Linux with uClibc, hardfloat
226 `armv7-unknown-freebsd` | ✓ | ✓ | ARMv7 FreeBSD
227 `armv7-unknown-netbsd-eabihf` | ✓ | ✓ |
228 `armv7-wrs-vxworks-eabihf` | ? |  |
229 [`armv7a-kmc-solid_asp3-eabi`](platform-support/kmc-solid.md) | ✓ |  | ARM SOLID with TOPPERS/ASP3
230 [`armv7a-kmc-solid_asp3-eabihf`](platform-support/kmc-solid.md) | ✓ |  | ARM SOLID with TOPPERS/ASP3, hardfloat
231 `armv7a-none-eabihf` | * | | ARM Cortex-A, hardfloat
232 `armv7s-apple-ios` | ✓ |  |
233 `avr-unknown-gnu-atmega328` | * |  | AVR. Requires `-Z build-std=core`
234 `bpfeb-unknown-none` | * |  | BPF (big endian)
235 `bpfel-unknown-none` | * |  | BPF (little endian)
236 `hexagon-unknown-linux-musl` | ? |  |
237 `i386-apple-ios` | ✓ |  | 32-bit x86 iOS
238 `i686-apple-darwin` | ✓ | ✓ | 32-bit macOS (10.7+, Lion+)
239 `i686-pc-windows-msvc` | ✓ |  | 32-bit Windows XP support
240 `i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku
241 `i686-unknown-netbsd` | ✓ | ✓ | NetBSD/i386 with SSE2
242 [`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD
243 `i686-unknown-uefi` | * |  | 32-bit UEFI
244 `i686-uwp-windows-gnu` | ? |  |
245 `i686-uwp-windows-msvc` | ? |  |
246 `i686-wrs-vxworks` | ? |  |
247 `m68k-unknown-linux-gnu` | ? |  | Motorola 680x0 Linux
248 `mips-unknown-linux-uclibc` | ✓ |  | MIPS Linux with uClibc
249 `mips64-openwrt-linux-musl` | ? |  | MIPS64 for OpenWrt Linux MUSL
250 `mipsel-sony-psp` | * |  | MIPS (LE) Sony PlayStation Portable (PSP)
251 `mipsel-unknown-linux-uclibc` | ✓ |  | MIPS (LE) Linux with uClibc
252 `mipsel-unknown-none` | * |  | Bare MIPS (LE) softfloat
253 `mipsisa32r6-unknown-linux-gnu` | ? |  |
254 `mipsisa32r6el-unknown-linux-gnu` | ? |  |
255 `mipsisa64r6-unknown-linux-gnuabi64` | ? |  |
256 `mipsisa64r6el-unknown-linux-gnuabi64` | ? |  |
257 `msp430-none-elf` | * |  | 16-bit MSP430 microcontrollers
258 `powerpc-unknown-linux-gnuspe` | ✓ |  | PowerPC SPE Linux
259 `powerpc-unknown-linux-musl` | ? |  |
260 `powerpc-unknown-netbsd` | ✓ | ✓ |
261 `powerpc-unknown-openbsd` | ? |  |
262 `powerpc-wrs-vxworks-spe` | ? |  |
263 `powerpc-wrs-vxworks` | ? |  |
264 `powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
265 `powerpc64le-unknown-freebsd` |   |   | PPC64LE FreeBSD
266 `powerpc-unknown-freebsd` |   |   | PowerPC FreeBSD
267 `powerpc64-unknown-linux-musl` | ? |  |
268 `powerpc64-wrs-vxworks` | ? |  |
269 `powerpc64le-unknown-linux-musl` | ? |  |
270 `riscv32gc-unknown-linux-gnu` |   |   | RISC-V Linux (kernel 5.4, glibc 2.33)
271 `riscv32gc-unknown-linux-musl` |   |   | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
272 `riscv32imc-esp-espidf` | ✓ |  | RISC-V ESP-IDF
273 `riscv64gc-unknown-freebsd` |   |   | RISC-V FreeBSD
274 `riscv64gc-unknown-linux-musl` |   |   | RISC-V Linux (kernel 4.20, musl 1.2.0)
275 `s390x-unknown-linux-musl` |  |  | S390x Linux (kernel 2.6.32, MUSL)
276 `sparc-unknown-linux-gnu` | ✓ |  | 32-bit SPARC Linux
277 `sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
278 [`sparc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/sparc64
279 `thumbv4t-none-eabi` | * |  | ARMv4T T32
280 `thumbv7a-pc-windows-msvc` | ? |  |
281 `thumbv7a-uwp-windows-msvc` | ✓ |  |
282 `thumbv7neon-unknown-linux-musleabihf` | ? |  | Thumb2-mode ARMv7a Linux with NEON, MUSL
283 [`wasm64-unknown-unknown`](platform-support/wasm64-unknown-unknown.md) | ? |  | WebAssembly
284 `x86_64-apple-ios-macabi` | ✓ |  | Apple Catalyst on x86_64
285 `x86_64-apple-tvos` | * | | x86 64-bit tvOS
286 `x86_64-pc-windows-msvc` | ✓ |  | 64-bit Windows XP support
287 `x86_64-sun-solaris` | ? |  | Deprecated target for 64-bit Solaris 10/11, illumos
288 `x86_64-unknown-dragonfly` | ✓ | ✓ | 64-bit DragonFlyBSD
289 `x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku
290 `x86_64-unknown-hermit` | ✓ |  | HermitCore
291 `x86_64-unknown-l4re-uclibc` | ? |  |
292 [`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * |  | Freestanding/bare-metal x86_64, softfloat
293 `x86_64-unknown-none-hermitkernel` | * |  | HermitCore kernel
294 `x86_64-unknown-none-linuxkernel` | * |  | Linux kernel modules
295 [`x86_64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 64-bit OpenBSD
296 `x86_64-unknown-uefi` | * |  | 64-bit UEFI
297 `x86_64-uwp-windows-gnu` | ✓ |  |
298 `x86_64-uwp-windows-msvc` | ✓ |  |
299 `x86_64-wrs-vxworks` | ? |  |
300
301 [runs on NVIDIA GPUs]: https://github.com/japaric-archived/nvptx#targets