Auto merge of #135074 - wzssyqa:mips-mti, r=oli-obk
Target: Add mips mti baremetal support Do the same thing as gcc, which use the vendor `mti` to mark the toolchain as MIPS32r2 default. We support both big endian and little endian flavor: mips-mti-none-elf mipsel-mti-none-elf
This commit is contained in:
commit
7270e73b62
12 changed files with 120 additions and 4 deletions
|
|
@ -1926,6 +1926,8 @@ supported_targets! {
|
|||
("mipsel-sony-psp", mipsel_sony_psp),
|
||||
("mipsel-sony-psx", mipsel_sony_psx),
|
||||
("mipsel-unknown-none", mipsel_unknown_none),
|
||||
("mips-mti-none-elf", mips_mti_none_elf),
|
||||
("mipsel-mti-none-elf", mipsel_mti_none_elf),
|
||||
("thumbv4t-none-eabi", thumbv4t_none_eabi),
|
||||
("armv4t-none-eabi", armv4t_none_eabi),
|
||||
("thumbv5te-none-eabi", thumbv5te_none_eabi),
|
||||
|
|
|
|||
36
compiler/rustc_target/src/spec/targets/mips_mti_none_elf.rs
Normal file
36
compiler/rustc_target/src/spec/targets/mips_mti_none_elf.rs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
use crate::abi::Endian;
|
||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
data_layout: "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".into(),
|
||||
llvm_target: "mips".into(),
|
||||
metadata: crate::spec::TargetMetadata {
|
||||
description: Some("MIPS32r2 BE Baremetal Softfloat".into()),
|
||||
tier: Some(3),
|
||||
host_tools: Some(false),
|
||||
std: None, // ?
|
||||
},
|
||||
pointer_width: 32,
|
||||
arch: "mips".into(),
|
||||
|
||||
options: TargetOptions {
|
||||
vendor: "mti".into(),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
endian: Endian::Big,
|
||||
cpu: "mips32r2".into(),
|
||||
|
||||
max_atomic_width: Some(32),
|
||||
|
||||
features: "+mips32r2,+soft-float,+noabicalls".into(),
|
||||
executables: true,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
relocation_model: RelocModel::Static,
|
||||
emit_debug_gdb_scripts: false,
|
||||
eh_frame_header: false,
|
||||
singlethread: true,
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
use crate::abi::Endian;
|
||||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
Target {
|
||||
data_layout: "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".into(),
|
||||
llvm_target: "mipsel".into(),
|
||||
metadata: crate::spec::TargetMetadata {
|
||||
description: Some("MIPS32r2 LE Baremetal Softfloat".into()),
|
||||
tier: Some(3),
|
||||
host_tools: Some(false),
|
||||
std: None, // ?
|
||||
},
|
||||
pointer_width: 32,
|
||||
arch: "mips".into(),
|
||||
|
||||
options: TargetOptions {
|
||||
vendor: "mti".into(),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
endian: Endian::Little,
|
||||
cpu: "mips32r2".into(),
|
||||
|
||||
max_atomic_width: Some(32),
|
||||
|
||||
features: "+mips32r2,+soft-float,+noabicalls".into(),
|
||||
executables: true,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
relocation_model: RelocModel::Static,
|
||||
emit_debug_gdb_scripts: false,
|
||||
eh_frame_header: false,
|
||||
singlethread: true,
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -62,6 +62,7 @@
|
|||
- [m68k-unknown-linux-gnu](platform-support/m68k-unknown-linux-gnu.md)
|
||||
- [mips64-openwrt-linux-musl](platform-support/mips64-openwrt-linux-musl.md)
|
||||
- [mipsel-sony-psx](platform-support/mipsel-sony-psx.md)
|
||||
- [mips\*-mti-none-elf](platform-support/mips-mti-none-elf.md)
|
||||
- [mipsisa\*r6\*-unknown-linux-gnu\*](platform-support/mips-release-6.md)
|
||||
- [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md)
|
||||
- [powerpc-unknown-openbsd](platform-support/powerpc-unknown-openbsd.md)
|
||||
|
|
|
|||
|
|
@ -332,6 +332,8 @@ target | std | host | notes
|
|||
`mipsel-unknown-linux-uclibc` | ✓ | | MIPS (LE) Linux with uClibc
|
||||
[`mipsel-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | 32-bit MIPS (LE), requires mips32 cpu support
|
||||
`mipsel-unknown-none` | * | | Bare MIPS (LE) softfloat
|
||||
[`mips-mti-none-elf`](platform-support/mips-mti-none-elf.md) | * | | Bare MIPS32r2 (BE) softfloat
|
||||
[`mipsel-mti-none-elf`](platform-support/mips-mti-none-elf.md) | * | | Bare MIPS32r2 (LE) softfloat
|
||||
[`mipsisa32r6-unknown-linux-gnu`](platform-support/mips-release-6.md) | ? | | 32-bit MIPS Release 6 Big Endian
|
||||
[`mipsisa32r6el-unknown-linux-gnu`](platform-support/mips-release-6.md) | ? | | 32-bit MIPS Release 6 Little Endian
|
||||
[`mipsisa64r6-unknown-linux-gnuabi64`](platform-support/mips-release-6.md) | ? | | 64-bit MIPS Release 6 Big Endian
|
||||
|
|
|
|||
31
src/doc/rustc/src/platform-support/mips-mti-none-elf.md
Normal file
31
src/doc/rustc/src/platform-support/mips-mti-none-elf.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# `mips*-mti-none-elf`
|
||||
|
||||
**Tier: 3**
|
||||
|
||||
MIPS32r2 baremetal softfloat, Big Endian or Little Endian.
|
||||
|
||||
- mips-mti-none-elf
|
||||
- mipsel-mti-none-elf
|
||||
|
||||
## Target maintainers
|
||||
|
||||
- YunQiang Su, `syq@debian.org`, https://github.com/wzssyqa
|
||||
|
||||
## Background
|
||||
|
||||
These 2 targets, aka mips-mti-none-elf and mipsel-mti-none-elf, are for
|
||||
baremetal development of MIPS32r2. The lld is used instead of Gnu-ld.
|
||||
|
||||
## Requirements
|
||||
|
||||
The target only supports cross compilation and no host tools. The target
|
||||
supports `alloc` with a default allocator while only support `no-std` development.
|
||||
|
||||
The vendor name `mti` follows the naming of gcc to indicate MIPS32r2.
|
||||
|
||||
## Cross-compilation toolchains and C code
|
||||
|
||||
Compatible C code can be built for this target on any compiler that has a MIPS32r2
|
||||
target. On clang and ld.lld linker, it can be generated using the
|
||||
`-march=mips`/`-march=mipsel`, `-mabi=32` with llvm features flag
|
||||
`features=+mips32r2,+soft-float,+noabicalls`.
|
||||
|
|
@ -128,6 +128,8 @@ static TARGETS: &[&str] = &[
|
|||
"mipsisa64r6el-unknown-linux-gnuabi64",
|
||||
"mipsel-unknown-linux-gnu",
|
||||
"mipsel-unknown-linux-musl",
|
||||
"mips-mti-none-elf",
|
||||
"mipsel-mti-none-elf",
|
||||
"nvptx64-nvidia-cuda",
|
||||
"powerpc-unknown-linux-gnu",
|
||||
"powerpc64-unknown-linux-gnu",
|
||||
|
|
|
|||
|
|
@ -285,6 +285,12 @@
|
|||
//@ revisions: mips_unknown_linux_uclibc
|
||||
//@ [mips_unknown_linux_uclibc] compile-flags: --target mips-unknown-linux-uclibc
|
||||
//@ [mips_unknown_linux_uclibc] needs-llvm-components: mips
|
||||
//@ revisions: mips_mti_none_elf
|
||||
//@ [mips_mti_none_elf] compile-flags: --target mips-mti-none-elf
|
||||
//@ [mips_mti_none_elf] needs-llvm-components: mips
|
||||
//@ revisions: mipsel_mti_none_elf
|
||||
//@ [mipsel_mti_none_elf] compile-flags: --target mipsel-mti-none-elf
|
||||
//@ [mipsel_mti_none_elf] needs-llvm-components: mips
|
||||
//@ revisions: mipsel_sony_psp
|
||||
//@ [mipsel_sony_psp] compile-flags: --target mipsel-sony-psp
|
||||
//@ [mipsel_sony_psp] needs-llvm-components: mips
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ warning: unexpected `cfg` condition value: `value`
|
|||
LL | #[cfg(target_vendor = "value")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||
|
||||
warning: unexpected `cfg` condition name: `feature`
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ warning: unexpected `cfg` condition value: `value`
|
|||
LL | #[cfg(target_vendor = "value")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||
|
||||
warning: unexpected `cfg` condition value: `unk`
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ warning: unexpected `cfg` condition value: `value`
|
|||
LL | #[cfg(target_vendor = "value")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||
|
||||
warning: unexpected `cfg` condition value: `unk`
|
||||
|
|
|
|||
|
|
@ -230,7 +230,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
|
|||
LL | target_vendor = "_UNEXPECTED_VALUE",
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
|
||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||
|
||||
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue