Skip to content

Commit ad154e4

Browse files
authored
Rollup merge of #100415 - WorksButNotTested:be8, r=wesleywiser
Add BE8 support Built using the following `/config.toml` ``` changelog-seen = 2 [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" ``` The following `.cargo/config` is needed inside any project directory: ``` [build] target = "armeb-linux-gnueabi" [target.armeb-linux-gnueabi] linker = "armeb-linux-gnueabi-gcc" ```
2 parents c3f5929 + 73d6dd5 commit ad154e4

File tree

5 files changed

+96
-0
lines changed

5 files changed

+96
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
use crate::abi::Endian;
2+
use crate::spec::{Target, TargetOptions};
3+
4+
pub fn target() -> Target {
5+
Target {
6+
llvm_target: "armeb-unknown-linux-gnueabi".into(),
7+
pointer_width: 32,
8+
data_layout: "E-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64".into(),
9+
arch: "arm".into(),
10+
options: TargetOptions {
11+
abi: "eabi".into(),
12+
features: "+strict-align,+v8,+crc".into(),
13+
endian: Endian::Big,
14+
max_atomic_width: Some(64),
15+
mcount: "\u{1}__gnu_mcount_nc".into(),
16+
..super::linux_gnu_base::opts()
17+
},
18+
}
19+
}

compiler/rustc_target/src/spec/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,7 @@ supported_targets! {
932932
("sparc64-unknown-linux-gnu", sparc64_unknown_linux_gnu),
933933
("arm-unknown-linux-gnueabi", arm_unknown_linux_gnueabi),
934934
("arm-unknown-linux-gnueabihf", arm_unknown_linux_gnueabihf),
935+
("armeb-unknown-linux-gnueabi", armeb_unknown_linux_gnueabi),
935936
("arm-unknown-linux-musleabi", arm_unknown_linux_musleabi),
936937
("arm-unknown-linux-musleabihf", arm_unknown_linux_musleabihf),
937938
("armv4t-unknown-linux-gnueabi", armv4t_unknown_linux_gnueabi),

src/doc/rustc/src/SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md)
1919
- [\*-apple-watchos\*](platform-support/apple-watchos.md)
2020
- [aarch64-nintendo-switch-freestanding](platform-support/aarch64-nintendo-switch-freestanding.md)
21+
- [armeb-unknown-linux-gnueabi](platform-support/armeb-unknown-linux-gnueabi.md)
2122
- [armv4t-none-eabi](platform-support/armv4t-none-eabi.md)
2223
- [armv6k-nintendo-3ds](platform-support/armv6k-nintendo-3ds.md)
2324
- [armv7-unknown-linux-uclibceabi](platform-support/armv7-unknown-linux-uclibceabi.md)

src/doc/rustc/src/platform-support.md

+1
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ target | std | host | notes
223223
`aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
224224
`aarch64_be-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (big-endian)
225225
[`arm64_32-apple-watchos`](platform-support/apple-watchos.md) | ✓ | | ARM Apple WatchOS 64-bit with 32-bit pointers
226+
[`armeb-unknown-linux-gnueabi`](platform-support/armeb-unknown-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).
226227
`armv4t-none-eabi` | * | | ARMv4T A32
227228
`armv4t-unknown-linux-gnueabi` | ? | |
228229
`armv5te-unknown-linux-uclibceabi` | ? | | ARMv5TE Linux with uClibc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# armeb-unknown-linux-gnueabi
2+
**Tier: 3**
3+
4+
Target for cross-compiling Linux user-mode applications targetting the ARM BE8 architecture.
5+
6+
## Overview
7+
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).
8+
9+
## History
10+
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.
11+
12+
## Target Maintainers
13+
* [@WorksButNotTested](https://github.com/WorksButNotTested)
14+
15+
## Requirements
16+
The target is cross-compiled. This target supports `std` in the normal way (indeed only nominal changes are required from the standard ARM configuration).
17+
18+
## Target definition
19+
The target definition can be seen [here](https://github.com/rust-lang/rust/tree/master/compiler/rustc_target/src/spec/armeb_unknown_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.
20+
21+
## Building the target
22+
Because it is Tier 3, rust does not yet ship pre-compiled artifacts for this target.
23+
24+
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.
25+
26+
```toml
27+
[llvm]
28+
download-ci-llvm = false
29+
skip-rebuild = true
30+
optimize = true
31+
ninja = true
32+
targets = "ARM;X86"
33+
clang = false
34+
35+
[build]
36+
target = ["x86_64-unknown-linux-gnu", "armeb-unknown-linux-gnueabi"]
37+
docs = false
38+
docs-minification = false
39+
compiler-docs = false
40+
[install]
41+
prefix = "/home/user/x-tools/rust/"
42+
43+
[rust]
44+
debug-logging=true
45+
backtrace = true
46+
incremental = true
47+
48+
[target.x86_64-unknown-linux-gnu]
49+
50+
[dist]
51+
52+
[target.armeb-unknown-linux-gnueabi]
53+
cc = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-gcc"
54+
cxx = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-g++"
55+
ar = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-ar"
56+
ranlib = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-ranlib"
57+
linker = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-gcc"
58+
llvm-config = "/home/user/x-tools/clang/bin/llvm-config"
59+
llvm-filecheck = "/home/user/x-tools/clang/bin/FileCheck"
60+
```
61+
62+
## Building Rust programs
63+
64+
The following `.cargo/config` is needed inside any project directory to build for the BE8 target:
65+
66+
```toml
67+
[build]
68+
target = "armeb-unknown-linux-gnueabi"
69+
70+
[target.armeb-unknown-linux-gnueabi]
71+
linker = "armeb-unknown-linux-gnueabi-gcc"
72+
```
73+
74+
Note that it is expected that the user has a suitable linker from the GNU toolchain.

0 commit comments

Comments
 (0)