-
Notifications
You must be signed in to change notification settings - Fork 13k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Various Redox OS fixes and add i686 Redox OS target #126192
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target}; | ||
|
||
pub fn target() -> Target { | ||
let mut base = base::redox::opts(); | ||
base.cpu = "pentiumpro".into(); | ||
base.plt_by_default = false; | ||
base.max_atomic_width = Some(64); | ||
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m32"]); | ||
// don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved | ||
base.stack_probes = StackProbeType::Call; | ||
|
||
Target { | ||
llvm_target: "i686-unknown-redox".into(), | ||
metadata: crate::spec::TargetMetadata { | ||
description: None, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why no metadata? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The x86_64 target didn't have it either at least when I made this PR. |
||
tier: None, | ||
host_tools: None, | ||
std: None, | ||
}, | ||
pointer_width: 32, | ||
data_layout: | ||
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128" | ||
.into(), | ||
arch: "x86".into(), | ||
options: base, | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -203,7 +203,7 @@ target | std | notes | |
`x86_64-unknown-linux-gnux32` | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27) | ||
[`x86_64-unknown-linux-ohos`](platform-support/openharmony.md) | ✓ | x86_64 OpenHarmony | ||
[`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * | Freestanding/bare-metal x86_64, softfloat | ||
`x86_64-unknown-redox` | ✓ | Redox OS | ||
[`x86_64-unknown-redox`](platform-support/redox.md) | ✓ | Redox OS | ||
[`x86_64-unknown-uefi`](platform-support/unknown-uefi.md) | ? | 64-bit UEFI | ||
|
||
[^x86_32-floats-x87]: Floating-point support on `i586` targets is non-compliant: the `x87` registers and instructions used for these targets do not provide IEEE-754-compliant behavior, in particular when it comes to rounding and NaN payload bits. See [issue #114479][x86-32-float-issue]. | ||
|
@@ -258,7 +258,7 @@ target | std | host | notes | |
`aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI) | ||
[`aarch64-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | ARM64 NetBSD | ||
[`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD | ||
`aarch64-unknown-redox` | ? | | ARM64 Redox OS | ||
[`aarch64-unknown-redox`](platform-support/redox.md) | ✓ | | ARM64 Redox OS | ||
`aarch64-uwp-windows-msvc` | ✓ | | | ||
`aarch64-wrs-vxworks` | ? | | | ||
`aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI) | ||
|
@@ -300,6 +300,7 @@ target | std | host | notes | |
[`i686-unknown-hurd-gnu`](platform-support/hurd.md) | ✓ | ✓ | 32-bit GNU/Hurd [^x86_32-floats-return-ABI] | ||
[`i686-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/i386 with SSE2 [^x86_32-floats-return-ABI] | ||
[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD [^x86_32-floats-return-ABI] | ||
[`i686-unknown-redox`](platform-support/redox.md) | ✓ | | i686 Redox OS | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When adding an x86-32 target, please always add the appropriate footnote for the float issues on that target. |
||
`i686-uwp-windows-gnu` | ✓ | | [^x86_32-floats-return-ABI] | ||
`i686-uwp-windows-msvc` | ✓ | | [^x86_32-floats-return-ABI] | ||
[`i686-win7-windows-msvc`](platform-support/win7-windows-msvc.md) | ✓ | | 32-bit Windows 7 support [^x86_32-floats-return-ABI] | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
# `*-unknown-redox` | ||
|
||
**Tier: 2/3** | ||
|
||
Targets for the [Redox OS](https://redox-os.org/) operating | ||
system. | ||
|
||
Target triplets available so far: | ||
|
||
- `x86_64-unknown-redox` (tier 2) | ||
- `aarch64-unknown-redox` (tier 3) | ||
- `i686-unknown-redox` (tier 3) | ||
|
||
## Target maintainers | ||
|
||
- Jeremy Soller ([@jackpot51](https://github.com/jackpot51)) | ||
|
||
## Requirements | ||
|
||
These targets are natively compiled and can be cross-compiled. Std is fully supported. | ||
|
||
The targets are only expected to work with the latest version of Redox OS as the ABI is not yet stable. | ||
|
||
`extern "C"` uses the official calling convention of the respective architectures. | ||
|
||
Redox OS binaries use ELF as file format. | ||
|
||
## Building the target | ||
|
||
You can build Rust with support for the targets by adding it to the `target` list in `config.toml`. In addition a copy of [relibc] needs to be present in the linker search path. | ||
|
||
```toml | ||
[build] | ||
build-stage = 1 | ||
target = [ | ||
"<HOST_TARGET>", | ||
"x86_64-unknown-redox", | ||
"aarch64-unknown-redox", | ||
"i686-unknown-redox", | ||
] | ||
``` | ||
|
||
[relibc]: https://gitlab.redox-os.org/redox-os/relibc | ||
|
||
## Building Rust programs and testing | ||
|
||
Rust does not yet ship pre-compiled artifacts for Redox OS except for x86_64-unknown-redox. | ||
|
||
The easiest way to build and test programs for Redox OS is using [redoxer](https://gitlab.redox-os.org/redox-os/redoxer) which sets up the required compiler toolchain for building as well as runs programs inside a Redox OS VM using QEMU. | ||
|
||
## Cross-compilation toolchains and C code | ||
|
||
The target supports C code. Pre-compiled C toolchains can be found at <https://static.redox-os.org/toolchain/>. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes i686_unknown_redox our only "i686" target that does not use pentium4 as baseline. Is that deliberate? It is certainly very surprising.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah no it is not alone, just some of the footnotes were wrong...