Added platform docs
This commit is contained in:
parent
9025ab7a1f
commit
d56e02e99a
@ -223,6 +223,7 @@ target | std | host | notes
|
|||||||
`aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
|
`aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
|
||||||
`aarch64_be-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (big-endian)
|
`aarch64_be-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (big-endian)
|
||||||
[`arm64_32-apple-watchos`](platform-support/apple-watchos.md) | ✓ | | ARM Apple WatchOS 64-bit with 32-bit pointers
|
[`arm64_32-apple-watchos`](platform-support/apple-watchos.md) | ✓ | | ARM Apple WatchOS 64-bit with 32-bit pointers
|
||||||
|
[`armeb-linux-gnueabi`](platform-support/armeb-linux-gnueabi.md) | ✓ | ? | ARM BE8 the default ARM big-endian architecture since [ARMv6](https://developer.arm.com/documentation/101754/0616/armlink-Reference/armlink-Command-line-Options/--be8?lang=en).
|
||||||
`armv4t-none-eabi` | * | | ARMv4T A32
|
`armv4t-none-eabi` | * | | ARMv4T A32
|
||||||
`armv4t-unknown-linux-gnueabi` | ? | |
|
`armv4t-unknown-linux-gnueabi` | ? | |
|
||||||
`armv5te-unknown-linux-uclibceabi` | ? | | ARMv5TE Linux with uClibc
|
`armv5te-unknown-linux-uclibceabi` | ? | | ARMv5TE Linux with uClibc
|
||||||
|
74
src/doc/rustc/src/platform-support/armeb-linux-gnueabi.md
Normal file
74
src/doc/rustc/src/platform-support/armeb-linux-gnueabi.md
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# armeb-linux-gnueabi
|
||||||
|
**Tier: 3**
|
||||||
|
|
||||||
|
Target for cross-compiling Linux user-mode applications targetting the ARM BE8 architecture.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
BE8 architecture retains the same little-endian ordered code-stream used by conventional little endian ARM systems, however the data accesses are in big-endian. BE8 is used primarily in high-performance networking applications where the ability to read packets in their native "Network Byte Order" is important (many network protocols transmit data in big-endian byte order for their wire formats).
|
||||||
|
|
||||||
|
## History
|
||||||
|
BE8 architecture is the default big-endian architecture for ARM since [ARMv6](https://developer.arm.com/documentation/101754/0616/armlink-Reference/armlink-Command-line-Options/--be8?lang=en). It's predecessor, used for ARMv4 and ARMv5 devices was [BE32](https://developer.arm.com/documentation/dui0474/j/linker-command-line-options/--be32). On ARMv6 architecture, endianness can be configured via [system registers](https://developer.arm.com/documentation/ddi0290/g/unaligned-and-mixed-endian-data-access-support/mixed-endian-access-support/interaction-between-the-bus-protocol-and-the-core-endianness). However, BE32 was withdrawn for [ARMv7](https://developer.arm.com/documentation/ddi0406/cb/Appendixes/Deprecated-and-Obsolete-Features/Obsolete-features/Support-for-BE-32-endianness-model) onwards.
|
||||||
|
|
||||||
|
## Target Maintainers
|
||||||
|
* [@WorksButNotTested](https://github.com/WorksButNotTested)
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
The target is cross-compiled. This target supports `std` in the normal way (indeed only nominal changes are required from the standard ARM configuration).
|
||||||
|
|
||||||
|
## Target definition
|
||||||
|
The target definition can be seen [here](../../../../../compiler/rustc_target/src/spec/armeb_linux_gnueabi.rs). In particular, it should be noted that the `features` specify that this target is built for the ARMv8 core. Though this can likely be modified as required.
|
||||||
|
|
||||||
|
## Building the target
|
||||||
|
Because it is Tier 3, rust does not yet ship pre-compiled artifacts for this target.
|
||||||
|
|
||||||
|
Therefore, you can build Rust with support for the target by adding it to the target list in config.toml, a sample configuration is shown below. It is expected that the user already have a working GNU compiler toolchain and update the paths accordingly.
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[llvm]
|
||||||
|
download-ci-llvm = false
|
||||||
|
skip-rebuild = true
|
||||||
|
optimize = true
|
||||||
|
ninja = true
|
||||||
|
targets = "ARM;X86"
|
||||||
|
clang = false
|
||||||
|
|
||||||
|
[build]
|
||||||
|
target = ["x86_64-unknown-linux-gnu", "armeb-linux-gnueabi"]
|
||||||
|
docs = false
|
||||||
|
docs-minification = false
|
||||||
|
compiler-docs = false
|
||||||
|
[install]
|
||||||
|
prefix = "/home/user/x-tools/rust/"
|
||||||
|
|
||||||
|
[rust]
|
||||||
|
debug-logging=true
|
||||||
|
backtrace = true
|
||||||
|
incremental = true
|
||||||
|
|
||||||
|
[target.x86_64-unknown-linux-gnu]
|
||||||
|
|
||||||
|
[dist]
|
||||||
|
|
||||||
|
[target.armeb-linux-gnueabi]
|
||||||
|
cc = "/home/user/x-tools/armeb-linux-gnueabi/bin/armeb-linux-gnueabi-gcc"
|
||||||
|
cxx = "/home/user/x-tools/armeb-linux-gnueabi/bin/armeb-linux-gnueabi-g++"
|
||||||
|
ar = "/home/user/x-tools/armeb-linux-gnueabi/bin/armeb-linux-gnueabi-ar"
|
||||||
|
ranlib = "/home/user/x-tools/armeb-linux-gnueabi/bin/armeb-linux-gnueabi-ranlib"
|
||||||
|
linker = "/home/user/x-tools/armeb-linux-gnueabi/bin/armeb-linux-gnueabi-gcc"
|
||||||
|
llvm-config = "/home/user/x-tools/clang/bin/llvm-config"
|
||||||
|
llvm-filecheck = "/home/user/x-tools/clang/bin/FileCheck"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building Rust programs
|
||||||
|
|
||||||
|
The following `.cargo/config` is needed inside any project directory to build for the BE8 target:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[build]
|
||||||
|
target = "armeb-linux-gnueabi"
|
||||||
|
|
||||||
|
[target.armeb-linux-gnueabi]
|
||||||
|
linker = "armeb-linux-gnueabi-gcc"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that it is expected that the user has a suitable linker from the GNU toolchain.
|
Loading…
Reference in New Issue
Block a user