Target for cross-compiling Linux user-mode applications targeting the ARM BE8 architecture.
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).
BE8 architecture is the default big-endian architecture for ARM since ARMv6. It's predecessor, used for ARMv4 and ARMv5 devices was BE32. On ARMv6 architecture, endianness can be configured via system registers. However, BE32 was withdrawn for ARMv7 onwards.
The target is cross-compiled. This target supports
std in the normal way (indeed only nominal changes are required from the standard ARM configuration).
The target definition can be seen here. 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.
[llvm] download-ci-llvm = false optimize = true ninja = true targets = "ARM;X86" clang = false [build] target = ["x86_64-unknown-linux-gnu", "armeb-unknown-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-unknown-linux-gnueabi] cc = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-gcc" cxx = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-g++" ar = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-ar" ranlib = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-linux-gnueabi-ranlib" linker = "/home/user/x-tools/armeb-unknown-linux-gnueabi/bin/armeb-unknown-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
.cargo/config is needed inside any project directory to build for the BE8 target:
[build] target = "armeb-unknown-linux-gnueabi" [target.armeb-unknown-linux-gnueabi] linker = "armeb-unknown-linux-gnueabi-gcc"
Note that it is expected that the user has a suitable linker from the GNU toolchain.