Auto merge of #75431 - ehuss:platform-support, r=Mark-Simulacrum
Move platform support to the rustc book. This moves the [Platform Support](https://forge.rust-lang.org/release/platform-support.html) page from the forge to the rustc book. There are several reasons for doing this: * The forge is not really oriented towards end-users (it mostly contains infrastructure, governance and policy, internal team pages, etc.). This platform support page is useful to user to know which targets are supported. * This page can now be updated in-sync with any PRs that add or remove a target, or change its status. * This is now automatically checked on CI to verify the list does not get out of sync. Currently it only checks the presence/absence of an entry, but more sophisticated checks could be added in the future. I'm not 100% certain this is the best location, but I think it fits. I'd like to see the rustc guide continue to grow, including things like linking information and more platform-specific details.
This commit is contained in:
commit
d69b0997d7
9 changed files with 344 additions and 5 deletions
|
@ -4624,6 +4624,10 @@ dependencies = [
|
||||||
"walkdir",
|
"walkdir",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tier-check"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.1.42"
|
version = "0.1.42"
|
||||||
|
|
|
@ -13,6 +13,7 @@ members = [
|
||||||
"src/tools/rustbook",
|
"src/tools/rustbook",
|
||||||
"src/tools/unstable-book-gen",
|
"src/tools/unstable-book-gen",
|
||||||
"src/tools/tidy",
|
"src/tools/tidy",
|
||||||
|
"src/tools/tier-check",
|
||||||
"src/tools/build-manifest",
|
"src/tools/build-manifest",
|
||||||
"src/tools/remote-test-client",
|
"src/tools/remote-test-client",
|
||||||
"src/tools/remote-test-server",
|
"src/tools/remote-test-server",
|
||||||
|
|
|
@ -404,6 +404,7 @@ impl<'a> Builder<'a> {
|
||||||
test::CrateLibrustc,
|
test::CrateLibrustc,
|
||||||
test::CrateRustdoc,
|
test::CrateRustdoc,
|
||||||
test::Linkcheck,
|
test::Linkcheck,
|
||||||
|
test::TierCheck,
|
||||||
test::Cargotest,
|
test::Cargotest,
|
||||||
test::Cargo,
|
test::Cargo,
|
||||||
test::Rls,
|
test::Rls,
|
||||||
|
|
|
@ -2043,3 +2043,47 @@ impl Step for Bootstrap {
|
||||||
run.builder.ensure(Bootstrap);
|
run.builder.ensure(Bootstrap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct TierCheck {
|
||||||
|
pub compiler: Compiler,
|
||||||
|
target: TargetSelection,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Step for TierCheck {
|
||||||
|
type Output = ();
|
||||||
|
const DEFAULT: bool = true;
|
||||||
|
const ONLY_HOSTS: bool = true;
|
||||||
|
|
||||||
|
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
|
||||||
|
run.path("src/tools/tier-check")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_run(run: RunConfig<'_>) {
|
||||||
|
let compiler = run.builder.compiler_for(run.builder.top_stage, run.host, run.host);
|
||||||
|
run.builder.ensure(TierCheck { compiler, target: run.host });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Tests the Platform Support page in the rustc book.
|
||||||
|
fn run(self, builder: &Builder<'_>) {
|
||||||
|
builder.ensure(compile::Std { compiler: self.compiler, target: self.target });
|
||||||
|
let mut cargo = tool::prepare_tool_cargo(
|
||||||
|
builder,
|
||||||
|
self.compiler,
|
||||||
|
Mode::ToolRustc,
|
||||||
|
self.target,
|
||||||
|
"run",
|
||||||
|
"src/tools/tier-check",
|
||||||
|
SourceType::InTree,
|
||||||
|
&[],
|
||||||
|
);
|
||||||
|
cargo.arg(builder.src.join("src/doc/rustc/src/platform-support.md"));
|
||||||
|
cargo.arg(&builder.rustc(self.compiler));
|
||||||
|
if builder.is_verbose() {
|
||||||
|
cargo.arg("--verbose");
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.info("platform support check");
|
||||||
|
try_run(builder, &mut cargo.into());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
- [Deny-by-default lints](lints/listing/deny-by-default.md)
|
- [Deny-by-default lints](lints/listing/deny-by-default.md)
|
||||||
- [Codegen options](codegen-options/index.md)
|
- [Codegen options](codegen-options/index.md)
|
||||||
- [JSON Output](json.md)
|
- [JSON Output](json.md)
|
||||||
|
- [Platform Support](platform-support.md)
|
||||||
- [Targets](targets/index.md)
|
- [Targets](targets/index.md)
|
||||||
- [Built-in Targets](targets/built-in.md)
|
- [Built-in Targets](targets/built-in.md)
|
||||||
- [Custom Targets](targets/custom.md)
|
- [Custom Targets](targets/custom.md)
|
||||||
|
|
223
src/doc/rustc/src/platform-support.md
Normal file
223
src/doc/rustc/src/platform-support.md
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
# Platform Support
|
||||||
|
|
||||||
|
<style type="text/css">
|
||||||
|
td code {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Support for different platforms 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 in the
|
||||||
|
tables below have the following meanings:
|
||||||
|
|
||||||
|
* std:
|
||||||
|
* ✓ indicates the full standard library is available.
|
||||||
|
* \* indicates the target only supports [`no_std`] development.
|
||||||
|
* ? indicates the standard library support is unknown or a work-in-progress.
|
||||||
|
* host: A ✓ indicates that `rustc` and `cargo` can run on the host platform.
|
||||||
|
|
||||||
|
[`no_std`]: https://rust-embedded.github.io/book/intro/no-std.html
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
target | std | host | notes
|
||||||
|
-------|-----|------|-------
|
||||||
|
`i686-pc-windows-gnu` | ✓ | ✓ | 32-bit MinGW (Windows 7+)
|
||||||
|
`i686-pc-windows-msvc` | ✓ | ✓ | 32-bit MSVC (Windows 7+)
|
||||||
|
`i686-unknown-linux-gnu` | ✓ | ✓ | 32-bit Linux (kernel 2.6.32+, glibc 2.11+)
|
||||||
|
`x86_64-apple-darwin` | ✓ | ✓ | 64-bit OSX (10.7+, Lion+)
|
||||||
|
`x86_64-pc-windows-gnu` | ✓ | ✓ | 64-bit MinGW (Windows 7+)
|
||||||
|
`x86_64-pc-windows-msvc` | ✓ | ✓ | 64-bit MSVC (Windows 7+)
|
||||||
|
`x86_64-unknown-linux-gnu` | ✓ | ✓ | 64-bit Linux (kernel 2.6.32+, glibc 2.11+)
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
target | std | host | notes
|
||||||
|
-------|-----|------|-------
|
||||||
|
`aarch64-apple-ios` | ✓[^apple] | | ARM64 iOS
|
||||||
|
`aarch64-fuchsia` | ✓ | | ARM64 Fuchsia
|
||||||
|
`aarch64-linux-android` | ✓ | | ARM64 Android
|
||||||
|
`aarch64-pc-windows-msvc` | ✓ | | ARM64 Windows MSVC
|
||||||
|
`aarch64-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (kernel 4.2, glibc 2.17)
|
||||||
|
`aarch64-unknown-linux-musl` | ✓ | | ARM64 Linux with MUSL
|
||||||
|
`aarch64-unknown-none` | * | | Bare ARM64, hardfloat
|
||||||
|
`aarch64-unknown-none-softfloat` | * | | Bare ARM64, softfloat
|
||||||
|
`arm-linux-androideabi` | ✓ | | ARMv7 Android
|
||||||
|
`arm-unknown-linux-gnueabi` | ✓ | ✓ | ARMv6 Linux (kernel 3.2, glibc 2.17)
|
||||||
|
`arm-unknown-linux-gnueabihf` | ✓ | ✓ | ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17)
|
||||||
|
`arm-unknown-linux-musleabi` | ✓ | | ARMv6 Linux with MUSL
|
||||||
|
`arm-unknown-linux-musleabihf` | ✓ | | ARMv6 Linux with MUSL, hardfloat
|
||||||
|
`armebv7r-none-eabi` | * | | Bare ARMv7-R, Big Endian
|
||||||
|
`armebv7r-none-eabihf` | * | | Bare ARMv7-R, Big Endian, hardfloat
|
||||||
|
`armv5te-unknown-linux-gnueabi` | ✓ | | ARMv5TE Linux (kernel 4.4, glibc 2.23)
|
||||||
|
`armv5te-unknown-linux-musleabi` | ✓ | | ARMv5TE Linux with MUSL
|
||||||
|
`armv7-linux-androideabi` | ✓ | | ARMv7a Android
|
||||||
|
`armv7a-none-eabi` | * | | Bare ARMv7-A
|
||||||
|
`armv7r-none-eabi` | * | | Bare ARMv7-R
|
||||||
|
`armv7r-none-eabihf` | * | | Bare ARMv7-R, hardfloat
|
||||||
|
`armv7-unknown-linux-gnueabi` | ✓ | | ARMv7 Linux (kernel 4.15, glibc 2.27)
|
||||||
|
`armv7-unknown-linux-gnueabihf` | ✓ | ✓ | ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17)
|
||||||
|
`armv7-unknown-linux-musleabi` | ✓ | | ARMv7 Linux, MUSL
|
||||||
|
`armv7-unknown-linux-musleabihf` | ✓ | | ARMv7 Linux with MUSL
|
||||||
|
`asmjs-unknown-emscripten` | ✓ | | asm.js via Emscripten
|
||||||
|
`i586-pc-windows-msvc` | ✓ | | 32-bit Windows w/o SSE
|
||||||
|
`i586-unknown-linux-gnu` | ✓ | | 32-bit Linux w/o SSE (kernel 4.4, glibc 2.23)
|
||||||
|
`i586-unknown-linux-musl` | ✓ | | 32-bit Linux w/o SSE, MUSL
|
||||||
|
`i686-linux-android` | ✓ | | 32-bit x86 Android
|
||||||
|
`i686-unknown-freebsd` | ✓ | ✓ | 32-bit FreeBSD
|
||||||
|
`i686-unknown-linux-musl` | ✓ | | 32-bit Linux with MUSL
|
||||||
|
`mips-unknown-linux-gnu` | ✓ | ✓ | MIPS Linux (kernel 4.4, glibc 2.23)
|
||||||
|
`mips-unknown-linux-musl` | ✓ | | MIPS Linux with MUSL
|
||||||
|
`mips64-unknown-linux-gnuabi64` | ✓ | ✓ | MIPS64 Linux, n64 ABI (kernel 4.4, glibc 2.23)
|
||||||
|
`mips64-unknown-linux-muslabi64` | ✓ | | MIPS64 Linux, n64 ABI, MUSL
|
||||||
|
`mips64el-unknown-linux-gnuabi64` | ✓ | ✓ | MIPS64 (LE) Linux, n64 ABI (kernel 4.4, glibc 2.23)
|
||||||
|
`mips64el-unknown-linux-muslabi64` | ✓ | | MIPS64 (LE) Linux, n64 ABI, MUSL
|
||||||
|
`mipsel-unknown-linux-gnu` | ✓ | ✓ | MIPS (LE) Linux (kernel 4.4, glibc 2.23)
|
||||||
|
`mipsel-unknown-linux-musl` | ✓ | | MIPS (LE) Linux with MUSL
|
||||||
|
`nvptx64-nvidia-cuda` | ✓ | | --emit=asm generates PTX code that [runs on NVIDIA GPUs]
|
||||||
|
`powerpc-unknown-linux-gnu` | ✓ | ✓ | PowerPC Linux (kernel 2.6.32, glibc 2.11)
|
||||||
|
`powerpc64-unknown-linux-gnu` | ✓ | ✓ | PPC64 Linux (kernel 2.6.32, glibc 2.11)
|
||||||
|
`powerpc64le-unknown-linux-gnu` | ✓ | ✓ | PPC64LE Linux (kernel 3.10, glibc 2.17)
|
||||||
|
`riscv32i-unknown-none-elf` | * | | Bare RISC-V (RV32I ISA)
|
||||||
|
`riscv32imac-unknown-none-elf` | * | | Bare RISC-V (RV32IMAC ISA)
|
||||||
|
`riscv32imc-unknown-none-elf` | * | | Bare RISC-V (RV32IMC ISA)
|
||||||
|
`riscv64gc-unknown-linux-gnu` | ✓ | ✓ | RISC-V Linux (kernel 4.20, glibc 2.29)
|
||||||
|
`riscv64gc-unknown-none-elf` | * | | Bare RISC-V (RV64IMAFDC ISA)
|
||||||
|
`riscv64imac-unknown-none-elf` | * | | Bare RISC-V (RV64IMAC ISA)
|
||||||
|
`s390x-unknown-linux-gnu` | ✓ | ✓ | S390x Linux (kernel 2.6.32, glibc 2.11)
|
||||||
|
`sparc64-unknown-linux-gnu` | ✓ | | SPARC Linux (kernel 4.4, glibc 2.23)
|
||||||
|
`sparcv9-sun-solaris` | ✓ | | SPARC 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-androideabi` | ✓ | | Thumb2-mode ARMv7a Android with NEON
|
||||||
|
`thumbv7neon-unknown-linux-gnueabihf` | ✓ | | Thumb2-mode ARMv7a Linux with NEON (kernel 4.4, glibc 2.23)
|
||||||
|
`thumbv8m.base-none-eabi` | * | | ARMv8-M Baseline
|
||||||
|
`thumbv8m.main-none-eabi` | * | | ARMv8-M Mainline
|
||||||
|
`thumbv8m.main-none-eabihf` | * | | ARMv8-M Baseline, hardfloat
|
||||||
|
`wasm32-unknown-emscripten` | ✓ | | WebAssembly via Emscripten
|
||||||
|
`wasm32-unknown-unknown` | ✓ | | WebAssembly
|
||||||
|
`wasm32-wasi` | ✓ | | WebAssembly with WASI
|
||||||
|
`x86_64-apple-ios` | ✓[^apple] | | 64-bit x86 iOS
|
||||||
|
`x86_64-fortanix-unknown-sgx` | ✓ | | [Fortanix ABI] for 64-bit Intel SGX
|
||||||
|
`x86_64-fuchsia` | ✓ | | 64-bit Fuchsia
|
||||||
|
`x86_64-linux-android` | ✓ | | 64-bit x86 Android
|
||||||
|
`x86_64-rumprun-netbsd` | ✓ | | 64-bit NetBSD Rump Kernel
|
||||||
|
`x86_64-sun-solaris` | ✓ | | 64-bit Solaris 10/11, illumos
|
||||||
|
`x86_64-unknown-cloudabi` | ✓ | | 64-bit CloudABI
|
||||||
|
`x86_64-unknown-freebsd` | ✓ | ✓ | 64-bit FreeBSD
|
||||||
|
`x86_64-unknown-illumos` | ✓ | ✓ | illumos
|
||||||
|
`x86_64-unknown-linux-gnux32` | ✓ | | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27)
|
||||||
|
`x86_64-unknown-linux-musl` | ✓ | ✓ | 64-bit Linux with MUSL
|
||||||
|
`x86_64-unknown-netbsd` | ✓ | ✓ | NetBSD/amd64
|
||||||
|
`x86_64-unknown-redox` | ✓ | | Redox OS
|
||||||
|
|
||||||
|
[Fortanix ABI]: https://edp.fortanix.com/
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
target | std | host | notes
|
||||||
|
-------|-----|------|-------
|
||||||
|
`aarch64-apple-darwin` | ? | | ARM64 macOS
|
||||||
|
`aarch64-apple-tvos` | *[^apple] | | ARM64 tvOS
|
||||||
|
`aarch64-unknown-cloudabi` | ✓ | | ARM64 CloudABI
|
||||||
|
`aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
|
||||||
|
`aarch64-unknown-hermit` | ? | |
|
||||||
|
`aarch64-unknown-netbsd` | ? | |
|
||||||
|
`aarch64-unknown-openbsd` | ✓ | ✓ | ARM64 OpenBSD
|
||||||
|
`aarch64-unknown-redox` | ? | | ARM64 Redox OS
|
||||||
|
`aarch64-uwp-windows-msvc` | ? | |
|
||||||
|
`aarch64-wrs-vxworks` | ? | |
|
||||||
|
`armv4t-unknown-linux-gnueabi` | ? | |
|
||||||
|
`armv6-unknown-freebsd` | ✓ | ✓ | ARMv6 FreeBSD
|
||||||
|
`armv6-unknown-netbsd-eabihf` | ? | |
|
||||||
|
`armv7-apple-ios` | ✓[^apple] | | ARMv7 iOS, Cortex-a8
|
||||||
|
`armv7-unknown-cloudabi-eabihf` | ✓ | | ARMv7 CloudABI, hardfloat
|
||||||
|
`armv7-unknown-freebsd` | ✓ | ✓ | ARMv7 FreeBSD
|
||||||
|
`armv7-unknown-netbsd-eabihf` | ? | |
|
||||||
|
`armv7-wrs-vxworks-eabihf` | ? | |
|
||||||
|
`armv7a-none-eabihf` | * | | ARM Cortex-A, hardfloat
|
||||||
|
`armv7s-apple-ios` | ✓[^apple] | |
|
||||||
|
`avr-unknown-unknown` | ? | | AVR
|
||||||
|
`hexagon-unknown-linux-musl` | ? | |
|
||||||
|
`i386-apple-ios` | ✓[^apple] | | 32-bit x86 iOS
|
||||||
|
`i686-apple-darwin` | ✓ | ✓ | 32-bit OSX (10.7+, Lion+)
|
||||||
|
`i686-pc-windows-msvc` | ✓ | | 32-bit Windows XP support
|
||||||
|
`i686-unknown-cloudabi` | ✓ | | 32-bit CloudABI
|
||||||
|
`i686-unknown-uefi` | ? | | 32-bit UEFI
|
||||||
|
`i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku
|
||||||
|
`i686-unknown-netbsd` | ✓ | | NetBSD/i386 with SSE2
|
||||||
|
`i686-unknown-openbsd` | ✓ | ✓ | 32-bit OpenBSD
|
||||||
|
`i686-uwp-windows-gnu` | ? | |
|
||||||
|
`i686-uwp-windows-msvc` | ? | |
|
||||||
|
`i686-wrs-vxworks` | ? | |
|
||||||
|
`mips-unknown-linux-uclibc` | ✓ | | MIPS Linux with uClibc
|
||||||
|
`mipsel-unknown-linux-uclibc` | ✓ | | MIPS (LE) Linux with uClibc
|
||||||
|
`mipsel-sony-psp` | * | | MIPS (LE) Sony PlayStation Portable (PSP)
|
||||||
|
`mipsisa32r6-unknown-linux-gnu` | ? | |
|
||||||
|
`mipsisa32r6el-unknown-linux-gnu` | ? | |
|
||||||
|
`mipsisa64r6-unknown-linux-gnuabi64` | ? | |
|
||||||
|
`mipsisa64r6el-unknown-linux-gnuabi64` | ? | |
|
||||||
|
`msp430-none-elf` | * | | 16-bit MSP430 microcontrollers
|
||||||
|
`powerpc-unknown-linux-gnuspe` | ✓ | | PowerPC SPE Linux
|
||||||
|
`powerpc-unknown-linux-musl` | ? | |
|
||||||
|
`powerpc-unknown-netbsd` | ? | |
|
||||||
|
`powerpc-wrs-vxworks` | ? | |
|
||||||
|
`powerpc-wrs-vxworks-spe` | ? | |
|
||||||
|
`powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
|
||||||
|
`powerpc64-unknown-linux-musl` | ? | |
|
||||||
|
`powerpc64-wrs-vxworks` | ? | |
|
||||||
|
`powerpc64le-unknown-linux-musl` | ? | |
|
||||||
|
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
||||||
|
`sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
|
||||||
|
`sparc64-unknown-openbsd` | ? | |
|
||||||
|
`thumbv7a-pc-windows-msvc` | ? | |
|
||||||
|
`thumbv7a-uwp-windows-msvc` | ✓ | |
|
||||||
|
`thumbv7neon-unknown-linux-musleabihf` | ? | | Thumb2-mode ARMv7a Linux with NEON, MUSL
|
||||||
|
`thumbv4t-none-eabi` | * | | ARMv4T T32
|
||||||
|
`x86_64-apple-ios-macabi` | ✓[^apple] | | Apple Catalyst
|
||||||
|
`x86_64-apple-tvos` | *[^apple] | | x86 64-bit tvOS
|
||||||
|
`x86_64-linux-kernel` | ? | | Linux kernel modules
|
||||||
|
`x86_64-pc-solaris` | ? | |
|
||||||
|
`x86_64-pc-windows-msvc` | ✓ | | 64-bit Windows XP support
|
||||||
|
`x86_64-unknown-dragonfly` | ✓ | ✓ | 64-bit DragonFlyBSD
|
||||||
|
`x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku
|
||||||
|
`x86_64-unknown-hermit` | ? | |
|
||||||
|
`x86_64-unknown-hermit-kernel` | ? | | HermitCore kernel
|
||||||
|
`x86_64-unknown-l4re-uclibc` | ? | |
|
||||||
|
`x86_64-unknown-openbsd` | ✓ | ✓ | 64-bit OpenBSD
|
||||||
|
`x86_64-unknown-uefi` | ? | |
|
||||||
|
`x86_64-uwp-windows-gnu` | ✓ | |
|
||||||
|
`x86_64-uwp-windows-msvc` | ✓ | |
|
||||||
|
`x86_64-wrs-vxworks` | ? | |
|
||||||
|
|
||||||
|
[runs on NVIDIA GPUs]: https://github.com/japaric-archived/nvptx#targets
|
||||||
|
[^apple]: These targets are only available on macOS.
|
|
@ -2,9 +2,14 @@
|
||||||
|
|
||||||
`rustc` ships with the ability to compile to many targets automatically, we
|
`rustc` ships with the ability to compile to many targets automatically, we
|
||||||
call these "built-in" targets, and they generally correspond to targets that
|
call these "built-in" targets, and they generally correspond to targets that
|
||||||
the team is supporting directly.
|
the team is supporting directly. To see the list of built-in targets, you can
|
||||||
|
run `rustc --print target-list`.
|
||||||
|
|
||||||
To see the list of built-in targets, you can run `rustc --print target-list`,
|
Typically, a target needs a compiled copy of the Rust standard library to
|
||||||
or look at [the API
|
work. If using [rustup], then check out the documentation on
|
||||||
docs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_target/spec/index.html#modules).
|
[Cross-compilation][rustup-cross] on how to download a pre-built standard
|
||||||
Each module there defines a builder for a particular target.
|
library built by the official Rust distributions. Most targets will need a
|
||||||
|
system linker, and possibly other things.
|
||||||
|
|
||||||
|
[rustup]: https://github.com/rust-lang/rustup
|
||||||
|
[rustup-cross]: https://github.com/rust-lang/rustup#cross-compilation
|
||||||
|
|
8
src/tools/tier-check/Cargo.toml
Normal file
8
src/tools/tier-check/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "tier-check"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Eric Huss"]
|
||||||
|
edition = "2018"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
|
[dependencies]
|
52
src/tools/tier-check/src/main.rs
Normal file
52
src/tools/tier-check/src/main.rs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
//! This is a script for validating the platform support page in the rustc book.
|
||||||
|
//!
|
||||||
|
//! The script takes two arguments, the path to the Platform Support source
|
||||||
|
//! page, and the second argument is the path to `rustc`.
|
||||||
|
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut args = std::env::args().skip(1);
|
||||||
|
let src = args.next().expect("expected source file as first argument");
|
||||||
|
let filename = std::path::Path::new(&src).file_name().unwrap().to_str().unwrap();
|
||||||
|
let rustc = args.next().expect("expected rustc as second argument");
|
||||||
|
let output = std::process::Command::new(rustc)
|
||||||
|
.arg("--print=target-list")
|
||||||
|
.output()
|
||||||
|
.expect("rustc should run");
|
||||||
|
if !output.status.success() {
|
||||||
|
eprintln!("rustc failed to run");
|
||||||
|
std::process::exit(0);
|
||||||
|
}
|
||||||
|
let stdout = std::str::from_utf8(&output.stdout).expect("utf8");
|
||||||
|
let target_list: HashSet<_> = stdout.lines().collect();
|
||||||
|
|
||||||
|
let doc_targets_md = std::fs::read_to_string(&src).expect("failed to read input source");
|
||||||
|
let doc_targets: HashSet<_> = doc_targets_md
|
||||||
|
.lines()
|
||||||
|
.filter(|line| line.starts_with('`') && line.contains('|'))
|
||||||
|
// These platforms only exist on macos.
|
||||||
|
.filter(|line| !line.contains("[^apple]") || cfg!(target_os = "macos"))
|
||||||
|
.map(|line| line.split('`').skip(1).next().expect("expected target code span"))
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let missing: Vec<_> = target_list.difference(&doc_targets).collect();
|
||||||
|
let extra: Vec<_> = doc_targets.difference(&target_list).collect();
|
||||||
|
for target in &missing {
|
||||||
|
eprintln!(
|
||||||
|
"error: target `{}` is missing from {}\n\
|
||||||
|
If this is a new target, please add it to {}.",
|
||||||
|
target, filename, src
|
||||||
|
);
|
||||||
|
}
|
||||||
|
for target in &extra {
|
||||||
|
eprintln!(
|
||||||
|
"error: target `{}` is in {}, but does not appear in the rustc target list\n\
|
||||||
|
If the target has been removed, please edit {} and remove the target.",
|
||||||
|
target, filename, src
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if !missing.is_empty() || !extra.is_empty() {
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue