Add riscv32 imafc bare metal target
- riscv32imac-unknown-none-elf - Add platform support docs for rv32
This commit is contained in:
parent
1670ff64bf
commit
1a7b610da3
@ -1637,6 +1637,7 @@ supported_targets! {
|
|||||||
("riscv32imc-esp-espidf", riscv32imc_esp_espidf),
|
("riscv32imc-esp-espidf", riscv32imc_esp_espidf),
|
||||||
("riscv32imac-esp-espidf", riscv32imac_esp_espidf),
|
("riscv32imac-esp-espidf", riscv32imac_esp_espidf),
|
||||||
("riscv32imac-unknown-none-elf", riscv32imac_unknown_none_elf),
|
("riscv32imac-unknown-none-elf", riscv32imac_unknown_none_elf),
|
||||||
|
("riscv32imafc-unknown-none-elf", riscv32imafc_unknown_none_elf),
|
||||||
("riscv32imac-unknown-xous-elf", riscv32imac_unknown_xous_elf),
|
("riscv32imac-unknown-xous-elf", riscv32imac_unknown_xous_elf),
|
||||||
("riscv32gc-unknown-linux-gnu", riscv32gc_unknown_linux_gnu),
|
("riscv32gc-unknown-linux-gnu", riscv32gc_unknown_linux_gnu),
|
||||||
("riscv32gc-unknown-linux-musl", riscv32gc_unknown_linux_musl),
|
("riscv32gc-unknown-linux-musl", riscv32gc_unknown_linux_musl),
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
|
||||||
|
|
||||||
|
pub fn target() -> Target {
|
||||||
|
Target {
|
||||||
|
data_layout: "e-m:e-p:32:32-i64:64-n32-S128".into(),
|
||||||
|
llvm_target: "riscv32".into(),
|
||||||
|
pointer_width: 32,
|
||||||
|
arch: "riscv32".into(),
|
||||||
|
|
||||||
|
options: TargetOptions {
|
||||||
|
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||||
|
linker: Some("rust-lld".into()),
|
||||||
|
cpu: "generic-rv32".into(),
|
||||||
|
max_atomic_width: Some(32),
|
||||||
|
llvm_abiname: "ilp32f".into(),
|
||||||
|
features: "+m,+a,+c,+f".into(),
|
||||||
|
panic_strategy: PanicStrategy::Abort,
|
||||||
|
relocation_model: RelocModel::Static,
|
||||||
|
emit_debug_gdb_scripts: false,
|
||||||
|
eh_frame_header: false,
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
@ -95,6 +95,7 @@ ENV TARGETS=$TARGETS,thumbv8m.main-none-eabihf
|
|||||||
ENV TARGETS=$TARGETS,riscv32i-unknown-none-elf
|
ENV TARGETS=$TARGETS,riscv32i-unknown-none-elf
|
||||||
ENV TARGETS=$TARGETS,riscv32imc-unknown-none-elf
|
ENV TARGETS=$TARGETS,riscv32imc-unknown-none-elf
|
||||||
ENV TARGETS=$TARGETS,riscv32imac-unknown-none-elf
|
ENV TARGETS=$TARGETS,riscv32imac-unknown-none-elf
|
||||||
|
ENV TARGETS=$TARGETS,riscv32imafc-unknown-none-elf
|
||||||
ENV TARGETS=$TARGETS,riscv64imac-unknown-none-elf
|
ENV TARGETS=$TARGETS,riscv64imac-unknown-none-elf
|
||||||
ENV TARGETS=$TARGETS,riscv64gc-unknown-none-elf
|
ENV TARGETS=$TARGETS,riscv64gc-unknown-none-elf
|
||||||
ENV TARGETS=$TARGETS,armebv7r-none-eabi
|
ENV TARGETS=$TARGETS,armebv7r-none-eabi
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
- [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md)
|
- [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md)
|
||||||
- [powerpc64-ibm-aix](platform-support/aix.md)
|
- [powerpc64-ibm-aix](platform-support/aix.md)
|
||||||
- [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
|
- [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
|
||||||
|
- [riscv32*-unknown-none-elf](platform-support/riscv32imac-unknown-none-elf.md)
|
||||||
- [sparc-unknown-none-elf](./platform-support/sparc-unknown-none-elf.md)
|
- [sparc-unknown-none-elf](./platform-support/sparc-unknown-none-elf.md)
|
||||||
- [*-pc-windows-gnullvm](platform-support/pc-windows-gnullvm.md)
|
- [*-pc-windows-gnullvm](platform-support/pc-windows-gnullvm.md)
|
||||||
- [\*-nto-qnx-\*](platform-support/nto-qnx.md)
|
- [\*-nto-qnx-\*](platform-support/nto-qnx.md)
|
||||||
|
@ -159,9 +159,9 @@ target | std | notes
|
|||||||
[`loongarch64-unknown-none`](platform-support/loongarch-none.md) | * | | LoongArch64 Bare-metal (LP64D ABI)
|
[`loongarch64-unknown-none`](platform-support/loongarch-none.md) | * | | LoongArch64 Bare-metal (LP64D ABI)
|
||||||
[`loongarch64-unknown-none-softfloat`](platform-support/loongarch-none.md) | * | | LoongArch64 Bare-metal (LP64S ABI)
|
[`loongarch64-unknown-none-softfloat`](platform-support/loongarch-none.md) | * | | LoongArch64 Bare-metal (LP64S ABI)
|
||||||
[`nvptx64-nvidia-cuda`](platform-support/nvptx64-nvidia-cuda.md) | * | --emit=asm generates PTX code that [runs on NVIDIA GPUs]
|
[`nvptx64-nvidia-cuda`](platform-support/nvptx64-nvidia-cuda.md) | * | --emit=asm generates PTX code that [runs on NVIDIA GPUs]
|
||||||
`riscv32i-unknown-none-elf` | * | Bare RISC-V (RV32I ISA)
|
[`riscv32imac-unknown-none-elf`](platform-support/riscv32imac-unknown-none-elf.md) | * | Bare RISC-V (RV32IMAC ISA)
|
||||||
`riscv32imac-unknown-none-elf` | * | Bare RISC-V (RV32IMAC ISA)
|
[`riscv32i-unknown-none-elf`](platform-support/riscv32imac-unknown-none-elf.md) | * | Bare RISC-V (RV32I ISA)
|
||||||
`riscv32imc-unknown-none-elf` | * | Bare RISC-V (RV32IMC ISA)
|
[`riscv32imc-unknown-none-elf`](platform-support/riscv32imac-unknown-none-elf.md) | * | Bare RISC-V (RV32IMC ISA)
|
||||||
`riscv64gc-unknown-none-elf` | * | Bare RISC-V (RV64IMAFDC ISA)
|
`riscv64gc-unknown-none-elf` | * | Bare RISC-V (RV64IMAFDC ISA)
|
||||||
`riscv64imac-unknown-none-elf` | * | Bare RISC-V (RV64IMAC ISA)
|
`riscv64imac-unknown-none-elf` | * | Bare RISC-V (RV64IMAC ISA)
|
||||||
`sparc64-unknown-linux-gnu` | ✓ | SPARC Linux (kernel 4.4, glibc 2.23)
|
`sparc64-unknown-linux-gnu` | ✓ | SPARC Linux (kernel 4.4, glibc 2.23)
|
||||||
@ -314,7 +314,8 @@ target | std | host | notes
|
|||||||
[`powerpc64-ibm-aix`](platform-support/aix.md) | ? | | 64-bit AIX (7.2 and newer)
|
[`powerpc64-ibm-aix`](platform-support/aix.md) | ? | | 64-bit AIX (7.2 and newer)
|
||||||
`riscv32gc-unknown-linux-gnu` | | | RISC-V Linux (kernel 5.4, glibc 2.33)
|
`riscv32gc-unknown-linux-gnu` | | | RISC-V Linux (kernel 5.4, glibc 2.33)
|
||||||
`riscv32gc-unknown-linux-musl` | | | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
|
`riscv32gc-unknown-linux-musl` | | | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
|
||||||
`riscv32im-unknown-none-elf` | * | | Bare RISC-V (RV32IM ISA)
|
[`riscv32imafc-unknown-none-elf`](platform-support/riscv32imac-unknown-none-elf.md) | * | Bare RISC-V (RV32IMAFC ISA)
|
||||||
|
[`riscv32im-unknown-none-elf`](platform-support/riscv32imac-unknown-none-elf.md) | * | | Bare RISC-V (RV32IM ISA)
|
||||||
[`riscv32imac-unknown-xous-elf`](platform-support/riscv32imac-unknown-xous-elf.md) | ? | | RISC-V Xous (RV32IMAC ISA)
|
[`riscv32imac-unknown-xous-elf`](platform-support/riscv32imac-unknown-xous-elf.md) | ? | | RISC-V Xous (RV32IMAC ISA)
|
||||||
[`riscv32imc-esp-espidf`](platform-support/esp-idf.md) | ✓ | | RISC-V ESP-IDF
|
[`riscv32imc-esp-espidf`](platform-support/esp-idf.md) | ✓ | | RISC-V ESP-IDF
|
||||||
[`riscv32imac-esp-espidf`](platform-support/esp-idf.md) | ✓ | | RISC-V ESP-IDF
|
[`riscv32imac-esp-espidf`](platform-support/esp-idf.md) | ✓ | | RISC-V ESP-IDF
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
riscv32imac-unknown-none-elf.md
|
@ -0,0 +1 @@
|
|||||||
|
riscv32imac-unknown-none-elf.md
|
@ -0,0 +1,34 @@
|
|||||||
|
# `riscv32{i,im,imc,imac,imafc}-unknown-none-elf`
|
||||||
|
|
||||||
|
**Tier: 2/3**
|
||||||
|
|
||||||
|
Bare-metal target for RISC-V CPUs with the RV32I, RV32IM, RV32IMC, RV32IMAFC and RV32IMAC ISAs.
|
||||||
|
|
||||||
|
## Target maintainers
|
||||||
|
|
||||||
|
* Rust Embedded Working Group, [RISC-V team](https://github.com/rust-embedded/wg#the-risc-v-team)
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
The target is cross-compiled, and uses static linking. No external toolchain
|
||||||
|
is required and the default `rust-lld` linker works, but you must specify
|
||||||
|
a linker script. The [`riscv-rt`] crate provides a suitable one. The
|
||||||
|
[`riscv-rust-quickstart`] repository gives an example of an RV32 project.
|
||||||
|
|
||||||
|
[`riscv-rt`]: https://crates.io/crates/riscv-rt
|
||||||
|
[`riscv-rust-quickstart`]: https://github.com/riscv-rust/riscv-rust-quickstart
|
||||||
|
|
||||||
|
## Building the target
|
||||||
|
|
||||||
|
This target is included in Rust and can be installed via `rustup`.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
This is a cross-compiled no-std target, which must be run either in a simulator
|
||||||
|
or by programming them onto suitable hardware. It is not possible to run the
|
||||||
|
Rust testsuite on this target.
|
||||||
|
|
||||||
|
## Cross-compilation toolchains and C code
|
||||||
|
|
||||||
|
This target supports C code. If interlinking with C or C++, you may need to use
|
||||||
|
riscv64-unknown-elf-gcc as a linker instead of rust-lld.
|
@ -0,0 +1 @@
|
|||||||
|
riscv32imac-unknown-none-elf.md
|
@ -0,0 +1 @@
|
|||||||
|
riscv32imac-unknown-none-elf.md
|
@ -124,6 +124,7 @@ static TARGETS: &[&str] = &[
|
|||||||
"riscv32im-unknown-none-elf",
|
"riscv32im-unknown-none-elf",
|
||||||
"riscv32imc-unknown-none-elf",
|
"riscv32imc-unknown-none-elf",
|
||||||
"riscv32imac-unknown-none-elf",
|
"riscv32imac-unknown-none-elf",
|
||||||
|
"riscv32imafc-unknown-none-elf",
|
||||||
"riscv32gc-unknown-linux-gnu",
|
"riscv32gc-unknown-linux-gnu",
|
||||||
"riscv64imac-unknown-none-elf",
|
"riscv64imac-unknown-none-elf",
|
||||||
"riscv64gc-unknown-hermit",
|
"riscv64gc-unknown-hermit",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user