Add Sony PlayStation 1 tier 3 target
This commit is contained in:
parent
c27948d255
commit
d03185ed98
5 changed files with 89 additions and 0 deletions
37
compiler/rustc_target/src/spec/mipsel_sony_psx.rs
Normal file
37
compiler/rustc_target/src/spec/mipsel_sony_psx.rs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
use crate::spec::{cvs, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
||||||
|
|
||||||
|
pub fn target() -> Target {
|
||||||
|
Target {
|
||||||
|
llvm_target: "mipsel-sony-psx".into(),
|
||||||
|
pointer_width: 32,
|
||||||
|
data_layout: "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".into(),
|
||||||
|
arch: "mips".into(),
|
||||||
|
|
||||||
|
options: TargetOptions {
|
||||||
|
os: "none".into(),
|
||||||
|
env: "psx".into(),
|
||||||
|
vendor: "sony".into(),
|
||||||
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
|
cpu: "mips1".into(),
|
||||||
|
executables: true,
|
||||||
|
linker: Some("rust-lld".into()),
|
||||||
|
relocation_model: RelocModel::Static,
|
||||||
|
exe_suffix: ".exe".into(),
|
||||||
|
|
||||||
|
// PSX doesn't natively support floats.
|
||||||
|
features: "+soft-float".into(),
|
||||||
|
|
||||||
|
// This should be 16 bits, but LLVM incorrectly tries emitting MIPS-II SYNC instructions
|
||||||
|
// for atomic loads and stores. This crashes rustc so we have to disable the Atomic* API
|
||||||
|
// until this is fixed upstream. See https://reviews.llvm.org/D122427#3420144 for more
|
||||||
|
// info.
|
||||||
|
max_atomic_width: Some(0),
|
||||||
|
|
||||||
|
// PSX does not support trap-on-condition instructions.
|
||||||
|
llvm_args: cvs!["-mno-check-zero-division"],
|
||||||
|
llvm_abiname: "o32".into(),
|
||||||
|
panic_strategy: PanicStrategy::Abort,
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -1222,6 +1222,7 @@ supported_targets! {
|
||||||
("armv7a-kmc-solid_asp3-eabihf", armv7a_kmc_solid_asp3_eabihf),
|
("armv7a-kmc-solid_asp3-eabihf", armv7a_kmc_solid_asp3_eabihf),
|
||||||
|
|
||||||
("mipsel-sony-psp", mipsel_sony_psp),
|
("mipsel-sony-psp", mipsel_sony_psp),
|
||||||
|
("mipsel-sony-psx", mipsel_sony_psx),
|
||||||
("mipsel-unknown-none", mipsel_unknown_none),
|
("mipsel-unknown-none", mipsel_unknown_none),
|
||||||
("thumbv4t-none-eabi", thumbv4t_none_eabi),
|
("thumbv4t-none-eabi", thumbv4t_none_eabi),
|
||||||
("armv4t-none-eabi", armv4t_none_eabi),
|
("armv4t-none-eabi", armv4t_none_eabi),
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
- [\*-kmc-solid_\*](platform-support/kmc-solid.md)
|
- [\*-kmc-solid_\*](platform-support/kmc-solid.md)
|
||||||
- [m68k-unknown-linux-gnu](platform-support/m68k-unknown-linux-gnu.md)
|
- [m68k-unknown-linux-gnu](platform-support/m68k-unknown-linux-gnu.md)
|
||||||
- [mips64-openwrt-linux-musl](platform-support/mips64-openwrt-linux-musl.md)
|
- [mips64-openwrt-linux-musl](platform-support/mips64-openwrt-linux-musl.md)
|
||||||
|
- [mipsel-sony-psx](platform-support/mipsel-sony-psx.md)
|
||||||
- [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md)
|
- [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md)
|
||||||
- [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
|
- [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
|
||||||
- [*-pc-windows-gnullvm](platform-support/pc-windows-gnullvm.md)
|
- [*-pc-windows-gnullvm](platform-support/pc-windows-gnullvm.md)
|
||||||
|
|
|
@ -260,6 +260,7 @@ target | std | host | notes
|
||||||
`mips-unknown-linux-uclibc` | ✓ | | MIPS Linux with uClibc
|
`mips-unknown-linux-uclibc` | ✓ | | MIPS Linux with uClibc
|
||||||
[`mips64-openwrt-linux-musl`](platform-support/mips64-openwrt-linux-musl.md) | ? | | MIPS64 for OpenWrt Linux MUSL
|
[`mips64-openwrt-linux-musl`](platform-support/mips64-openwrt-linux-musl.md) | ? | | MIPS64 for OpenWrt Linux MUSL
|
||||||
`mipsel-sony-psp` | * | | MIPS (LE) Sony PlayStation Portable (PSP)
|
`mipsel-sony-psp` | * | | MIPS (LE) Sony PlayStation Portable (PSP)
|
||||||
|
[`mipsel-sony-psx`](platform-support/mipsel-sony-psx.md) | * | | MIPS (LE) Sony PlayStation 1 (PSX)
|
||||||
`mipsel-unknown-linux-uclibc` | ✓ | | MIPS (LE) Linux with uClibc
|
`mipsel-unknown-linux-uclibc` | ✓ | | MIPS (LE) Linux with uClibc
|
||||||
`mipsel-unknown-none` | * | | Bare MIPS (LE) softfloat
|
`mipsel-unknown-none` | * | | Bare MIPS (LE) softfloat
|
||||||
`mipsisa32r6-unknown-linux-gnu` | ? | |
|
`mipsisa32r6-unknown-linux-gnu` | ? | |
|
||||||
|
|
49
src/doc/rustc/src/platform-support/mipsel-sony-psx.md
Normal file
49
src/doc/rustc/src/platform-support/mipsel-sony-psx.md
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# mipsel-sony-psx
|
||||||
|
|
||||||
|
**Tier: 3**
|
||||||
|
|
||||||
|
Sony PlayStation 1 (psx)
|
||||||
|
|
||||||
|
## Designated Developer
|
||||||
|
|
||||||
|
* [@ayrtonm](https://github.com/ayrtonm)
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
This target is cross-compiled.
|
||||||
|
It has no special requirements for the host.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
The target can be built by enabling it for a `rustc` build:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[build]
|
||||||
|
build-stage = 1
|
||||||
|
target = ["mipsel-sony-psx"]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Cross-compilation
|
||||||
|
|
||||||
|
This target can be cross-compiled from any host.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Currently there is no support to run the rustc test suite for this target.
|
||||||
|
|
||||||
|
## Building Rust programs
|
||||||
|
|
||||||
|
Since it is Tier 3, rust doesn't ship pre-compiled artifacts for this target.
|
||||||
|
|
||||||
|
Just use the `build-std` nightly cargo feature to build the `core` and `alloc` libraries:
|
||||||
|
```shell
|
||||||
|
cargo build -Zbuild-std=core,alloc --target mipsel-sony-psx
|
||||||
|
```
|
||||||
|
|
||||||
|
The command above generates an ELF. To generate binaries in the PSEXE format that emulators run, you can use [cargo-psx](https://github.com/ayrtonm/psx-sdk-rs#readme):
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cargo psx build
|
||||||
|
```
|
||||||
|
|
||||||
|
or use `-Clink-arg=--oformat=binary` to produce a flat binary.
|
Loading…
Add table
Add a link
Reference in a new issue