]> git.lizzy.rs Git - rust.git/blob - src/doc/rustc/src/platform-support.md
Rollup merge of #89999 - talagrand:GetTempPath2, r=m-ou-se
[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` | ? |  |
208 `aarch64-unknown-uefi` | * |  | ARM64 UEFI
209 `aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
210 `aarch64-unknown-netbsd` | ✓ | ✓ |
211 `aarch64-unknown-openbsd` | ✓ | ✓ | ARM64 OpenBSD
212 `aarch64-unknown-redox` | ? |  | ARM64 Redox OS
213 `aarch64-uwp-windows-msvc` | ? |  |
214 `aarch64-wrs-vxworks` | ? |  |
215 `aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
216 `aarch64_be-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (big-endian)
217 `armv4t-unknown-linux-gnueabi` | ? |  |
218 `armv5te-unknown-linux-uclibceabi` | ? |  | ARMv5TE Linux with uClibc
219 `armv6-unknown-freebsd` | ✓ | ✓ | ARMv6 FreeBSD
220 `armv6-unknown-netbsd-eabihf` | ? |  |
221 `armv6k-nintendo-3ds` | * |  | ARMv6K Nintendo 3DS, Horizon (Requires devkitARM toolchain)
222 `armv7-apple-ios` | ✓ |  | ARMv7 iOS, Cortex-a8
223 `armv7-unknown-linux-uclibceabihf` | ✓ | ? | ARMv7 Linux uClibc
224 `armv7-unknown-freebsd` | ✓ | ✓ | ARMv7 FreeBSD
225 `armv7-unknown-netbsd-eabihf` | ✓ | ✓ |
226 `armv7-wrs-vxworks-eabihf` | ? |  |
227 [`armv7a-kmc-solid_asp3-eabi`](platform-support/kmc-solid.md) | ✓ |  | ARM SOLID with TOPPERS/ASP3
228 [`armv7a-kmc-solid_asp3-eabihf`](platform-support/kmc-solid.md) | ✓ |  | ARM SOLID with TOPPERS/ASP3, hardfloat
229 `armv7a-none-eabihf` | * | | ARM Cortex-A, hardfloat
230 `armv7s-apple-ios` | ✓ |  |
231 `avr-unknown-gnu-atmega328` | * |  | AVR. Requires `-Z build-std=core`
232 `bpfeb-unknown-none` | * |  | BPF (big endian)
233 `bpfel-unknown-none` | * |  | BPF (little endian)
234 `hexagon-unknown-linux-musl` | ? |  |
235 `i386-apple-ios` | ✓ |  | 32-bit x86 iOS
236 `i686-apple-darwin` | ✓ | ✓ | 32-bit macOS (10.7+, Lion+)
237 `i686-pc-windows-msvc` | ✓ |  | 32-bit Windows XP support
238 `i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku
239 `i686-unknown-netbsd` | ✓ | ✓ | NetBSD/i386 with SSE2
240 `i686-unknown-openbsd` | ✓ | ✓ | 32-bit OpenBSD
241 `i686-unknown-uefi` | * |  | 32-bit UEFI
242 `i686-uwp-windows-gnu` | ? |  |
243 `i686-uwp-windows-msvc` | ? |  |
244 `i686-wrs-vxworks` | ? |  |
245 `m68k-unknown-linux-gnu` | ? |  | Motorola 680x0 Linux
246 `mips-unknown-linux-uclibc` | ✓ |  | MIPS Linux with uClibc
247 `mipsel-sony-psp` | * |  | MIPS (LE) Sony PlayStation Portable (PSP)
248 `mipsel-unknown-linux-uclibc` | ✓ |  | MIPS (LE) Linux with uClibc
249 `mipsel-unknown-none` | * |  | Bare MIPS (LE) softfloat
250 `mipsisa32r6-unknown-linux-gnu` | ? |  |
251 `mipsisa32r6el-unknown-linux-gnu` | ? |  |
252 `mipsisa64r6-unknown-linux-gnuabi64` | ? |  |
253 `mipsisa64r6el-unknown-linux-gnuabi64` | ? |  |
254 `msp430-none-elf` | * |  | 16-bit MSP430 microcontrollers
255 `powerpc-unknown-linux-gnuspe` | ✓ |  | PowerPC SPE Linux
256 `powerpc-unknown-linux-musl` | ? |  |
257 `powerpc-unknown-netbsd` | ✓ | ✓ |
258 `powerpc-unknown-openbsd` | ? |  |
259 `powerpc-wrs-vxworks-spe` | ? |  |
260 `powerpc-wrs-vxworks` | ? |  |
261 `powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
262 `powerpc64le-unknown-freebsd` |   |   | PPC64LE FreeBSD
263 `powerpc-unknown-freebsd` |   |   | PowerPC FreeBSD
264 `powerpc64-unknown-linux-musl` | ? |  |
265 `powerpc64-wrs-vxworks` | ? |  |
266 `powerpc64le-unknown-linux-musl` | ? |  |
267 `riscv32gc-unknown-linux-gnu` |   |   | RISC-V Linux (kernel 5.4, glibc 2.33)
268 `riscv32gc-unknown-linux-musl` |   |   | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
269 `riscv32imc-esp-espidf` | ✓ |  | RISC-V ESP-IDF
270 `riscv64gc-unknown-freebsd` |   |   | RISC-V FreeBSD
271 `riscv64gc-unknown-linux-musl` |   |   | RISC-V Linux (kernel 4.20, musl 1.2.0)
272 `s390x-unknown-linux-musl` |  |  | S390x Linux (kernel 2.6.32, MUSL)
273 `sparc-unknown-linux-gnu` | ✓ |  | 32-bit SPARC Linux
274 `sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
275 `sparc64-unknown-openbsd` | ? |  |
276 `thumbv4t-none-eabi` | * |  | ARMv4T T32
277 `thumbv7a-pc-windows-msvc` | ? |  |
278 `thumbv7a-uwp-windows-msvc` | ✓ |  |
279 `thumbv7neon-unknown-linux-musleabihf` | ? |  | Thumb2-mode ARMv7a Linux with NEON, MUSL
280 [`wasm64-unknown-unknown`](platform-support/wasm64-unknown-unknown.md) | ? |  | WebAssembly
281 `x86_64-apple-ios-macabi` | ✓ |  | Apple Catalyst on x86_64
282 `x86_64-apple-tvos` | * | | x86 64-bit tvOS
283 `x86_64-pc-windows-msvc` | ✓ |  | 64-bit Windows XP support
284 `x86_64-sun-solaris` | ? |  | Deprecated target for 64-bit Solaris 10/11, illumos
285 `x86_64-unknown-dragonfly` | ✓ | ✓ | 64-bit DragonFlyBSD
286 `x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku
287 `x86_64-unknown-hermit` | ? |  |
288 `x86_64-unknown-l4re-uclibc` | ? |  |
289 [`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * |  | Freestanding/bare-metal x86_64, softfloat
290 `x86_64-unknown-none-hermitkernel` | ? |  | HermitCore kernel
291 `x86_64-unknown-none-linuxkernel` | * |  | Linux kernel modules
292 `x86_64-unknown-openbsd` | ✓ | ✓ | 64-bit OpenBSD
293 `x86_64-unknown-uefi` | * |  | 64-bit UEFI
294 `x86_64-uwp-windows-gnu` | ✓ |  |
295 `x86_64-uwp-windows-msvc` | ✓ |  |
296 `x86_64-wrs-vxworks` | ? |  |
297
298 [runs on NVIDIA GPUs]: https://github.com/japaric-archived/nvptx#targets