Skip to content

Commit 1902983

Browse files
committed
Move forge platform-support to the rustc book.
1 parent cbe7c5c commit 1902983

File tree

2 files changed

+223
-0
lines changed

2 files changed

+223
-0
lines changed

src/doc/rustc/src/SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- [Deny-by-default lints](lints/listing/deny-by-default.md)
1212
- [Codegen options](codegen-options/index.md)
1313
- [JSON Output](json.md)
14+
- [Platform Support](platform-support.md)
1415
- [Targets](targets/index.md)
1516
- [Built-in Targets](targets/built-in.md)
1617
- [Custom Targets](targets/custom.md)

src/doc/rustc/src/platform-support.md

+222
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
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

Comments
 (0)