Rollup merge of #111326 - he32:netbsd-aarch64-be, r=oli-obk
Add support for NetBSD/aarch64-be (big-endian arm64).
This commit is contained in:
commit
f6d58eaad3
6 changed files with 134 additions and 6 deletions
17
compiler/rustc_target/src/spec/aarch64_be_unknown_netbsd.rs
Normal file
17
compiler/rustc_target/src/spec/aarch64_be_unknown_netbsd.rs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
use crate::abi::Endian;
|
||||||
|
use crate::spec::{Target, TargetOptions};
|
||||||
|
|
||||||
|
pub fn target() -> Target {
|
||||||
|
Target {
|
||||||
|
llvm_target: "aarch64_be-unknown-netbsd".into(),
|
||||||
|
pointer_width: 64,
|
||||||
|
data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||||
|
arch: "aarch64".into(),
|
||||||
|
options: TargetOptions {
|
||||||
|
mcount: "__mcount".into(),
|
||||||
|
max_atomic_width: Some(128),
|
||||||
|
endian: Endian::Big,
|
||||||
|
..super::netbsd_base::opts()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -1194,6 +1194,7 @@ supported_targets! {
|
||||||
("x86_64-unknown-openbsd", x86_64_unknown_openbsd),
|
("x86_64-unknown-openbsd", x86_64_unknown_openbsd),
|
||||||
|
|
||||||
("aarch64-unknown-netbsd", aarch64_unknown_netbsd),
|
("aarch64-unknown-netbsd", aarch64_unknown_netbsd),
|
||||||
|
("aarch64_be-unknown-netbsd", aarch64_be_unknown_netbsd),
|
||||||
("armv6-unknown-netbsd-eabihf", armv6_unknown_netbsd_eabihf),
|
("armv6-unknown-netbsd-eabihf", armv6_unknown_netbsd_eabihf),
|
||||||
("armv7-unknown-netbsd-eabihf", armv7_unknown_netbsd_eabihf),
|
("armv7-unknown-netbsd-eabihf", armv7_unknown_netbsd_eabihf),
|
||||||
("i686-unknown-netbsd", i686_unknown_netbsd),
|
("i686-unknown-netbsd", i686_unknown_netbsd),
|
||||||
|
|
|
@ -323,6 +323,7 @@ def default_build_triple(verbose):
|
||||||
cputype_mapper = {
|
cputype_mapper = {
|
||||||
'BePC': 'i686',
|
'BePC': 'i686',
|
||||||
'aarch64': 'aarch64',
|
'aarch64': 'aarch64',
|
||||||
|
'aarch64eb': 'aarch64',
|
||||||
'amd64': 'x86_64',
|
'amd64': 'x86_64',
|
||||||
'arm64': 'aarch64',
|
'arm64': 'aarch64',
|
||||||
'i386': 'i686',
|
'i386': 'i686',
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
- [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
|
- [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-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)
|
||||||
|
- [\*-unknown-netbsd\*](platform-support/netbsd.md)
|
||||||
- [*-unknown-openbsd](platform-support/openbsd.md)
|
- [*-unknown-openbsd](platform-support/openbsd.md)
|
||||||
- [\*-unknown-uefi](platform-support/unknown-uefi.md)
|
- [\*-unknown-uefi](platform-support/unknown-uefi.md)
|
||||||
- [wasm64-unknown-unknown](platform-support/wasm64-unknown-unknown.md)
|
- [wasm64-unknown-unknown](platform-support/wasm64-unknown-unknown.md)
|
||||||
|
|
|
@ -224,13 +224,14 @@ target | std | host | notes
|
||||||
`aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
|
`aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
|
||||||
`aarch64-unknown-hermit` | ✓ | | ARM64 HermitCore
|
`aarch64-unknown-hermit` | ✓ | | ARM64 HermitCore
|
||||||
`aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
|
`aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
|
||||||
`aarch64-unknown-netbsd` | ✓ | ✓ |
|
[`aarch64-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | ARM64 NetBSD
|
||||||
[`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD
|
[`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD
|
||||||
`aarch64-unknown-redox` | ? | | ARM64 Redox OS
|
`aarch64-unknown-redox` | ? | | ARM64 Redox OS
|
||||||
`aarch64-uwp-windows-msvc` | ? | |
|
`aarch64-uwp-windows-msvc` | ? | |
|
||||||
`aarch64-wrs-vxworks` | ? | |
|
`aarch64-wrs-vxworks` | ? | |
|
||||||
`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)
|
||||||
|
[`aarch64_be-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | ARM64 NetBSD (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-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).
|
[`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).
|
||||||
`armv4t-none-eabi` | * | | ARMv4T A32
|
`armv4t-none-eabi` | * | | ARMv4T A32
|
||||||
|
@ -238,7 +239,7 @@ target | std | host | notes
|
||||||
[`armv5te-none-eabi`](platform-support/armv5te-none-eabi.md) | * | | ARMv5TE A32
|
[`armv5te-none-eabi`](platform-support/armv5te-none-eabi.md) | * | | ARMv5TE A32
|
||||||
`armv5te-unknown-linux-uclibceabi` | ? | | ARMv5TE Linux with uClibc
|
`armv5te-unknown-linux-uclibceabi` | ? | | ARMv5TE Linux with uClibc
|
||||||
`armv6-unknown-freebsd` | ✓ | ✓ | ARMv6 FreeBSD
|
`armv6-unknown-freebsd` | ✓ | ✓ | ARMv6 FreeBSD
|
||||||
`armv6-unknown-netbsd-eabihf` | ? | |
|
[`armv6-unknown-netbsd-eabihf`](platform-support/netbsd.md) | ✓ | ✓ | ARMv6 NetBSD w/hard-float
|
||||||
[`armv6k-nintendo-3ds`](platform-support/armv6k-nintendo-3ds.md) | ? | | ARMv6K Nintendo 3DS, Horizon (Requires devkitARM toolchain)
|
[`armv6k-nintendo-3ds`](platform-support/armv6k-nintendo-3ds.md) | ? | | ARMv6K Nintendo 3DS, Horizon (Requires devkitARM toolchain)
|
||||||
`armv7-apple-ios` | ✓ | | ARMv7 iOS, Cortex-a8
|
`armv7-apple-ios` | ✓ | | ARMv7 iOS, Cortex-a8
|
||||||
[`armv7-sony-vita-newlibeabihf`](platform-support/armv7-sony-vita-newlibeabihf.md) | ? | | ARM Cortex-A9 Sony PlayStation Vita (requires VITASDK toolchain)
|
[`armv7-sony-vita-newlibeabihf`](platform-support/armv7-sony-vita-newlibeabihf.md) | ? | | ARM Cortex-A9 Sony PlayStation Vita (requires VITASDK toolchain)
|
||||||
|
@ -246,7 +247,7 @@ target | std | host | notes
|
||||||
[`armv7-unknown-linux-uclibceabi`](platform-support/armv7-unknown-linux-uclibceabi.md) | ✓ | ✓ | ARMv7 Linux with uClibc, softfloat
|
[`armv7-unknown-linux-uclibceabi`](platform-support/armv7-unknown-linux-uclibceabi.md) | ✓ | ✓ | ARMv7 Linux with uClibc, softfloat
|
||||||
[`armv7-unknown-linux-uclibceabihf`](platform-support/armv7-unknown-linux-uclibceabihf.md) | ✓ | ? | ARMv7 Linux with uClibc, hardfloat
|
[`armv7-unknown-linux-uclibceabihf`](platform-support/armv7-unknown-linux-uclibceabihf.md) | ✓ | ? | ARMv7 Linux with uClibc, hardfloat
|
||||||
`armv7-unknown-freebsd` | ✓ | ✓ | ARMv7 FreeBSD
|
`armv7-unknown-freebsd` | ✓ | ✓ | ARMv7 FreeBSD
|
||||||
`armv7-unknown-netbsd-eabihf` | ✓ | ✓ |
|
[`armv7-unknown-netbsd-eabihf`](platform-support/netbsd.md) | ✓ | ✓ | ARMv7 NetBSD w/hard-float
|
||||||
`armv7-wrs-vxworks-eabihf` | ? | |
|
`armv7-wrs-vxworks-eabihf` | ? | |
|
||||||
[`armv7a-kmc-solid_asp3-eabi`](platform-support/kmc-solid.md) | ✓ | | ARM SOLID with TOPPERS/ASP3
|
[`armv7a-kmc-solid_asp3-eabi`](platform-support/kmc-solid.md) | ✓ | | ARM SOLID with TOPPERS/ASP3
|
||||||
[`armv7a-kmc-solid_asp3-eabihf`](platform-support/kmc-solid.md) | ✓ | | ARM SOLID with TOPPERS/ASP3, hardfloat
|
[`armv7a-kmc-solid_asp3-eabihf`](platform-support/kmc-solid.md) | ✓ | | ARM SOLID with TOPPERS/ASP3, hardfloat
|
||||||
|
@ -262,7 +263,7 @@ target | std | host | notes
|
||||||
`i686-apple-darwin` | ✓ | ✓ | 32-bit macOS (10.7+, Lion+)
|
`i686-apple-darwin` | ✓ | ✓ | 32-bit macOS (10.7+, Lion+)
|
||||||
`i686-pc-windows-msvc` | * | | 32-bit Windows XP support
|
`i686-pc-windows-msvc` | * | | 32-bit Windows XP support
|
||||||
`i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku
|
`i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku
|
||||||
`i686-unknown-netbsd` | ✓ | ✓ | NetBSD/i386 with SSE2
|
[`i686-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/i386 with SSE2
|
||||||
[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD
|
[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD
|
||||||
`i686-uwp-windows-gnu` | ? | |
|
`i686-uwp-windows-gnu` | ? | |
|
||||||
`i686-uwp-windows-msvc` | ? | |
|
`i686-uwp-windows-msvc` | ? | |
|
||||||
|
@ -283,7 +284,7 @@ target | std | host | notes
|
||||||
`msp430-none-elf` | * | | 16-bit MSP430 microcontrollers
|
`msp430-none-elf` | * | | 16-bit MSP430 microcontrollers
|
||||||
`powerpc-unknown-linux-gnuspe` | ✓ | | PowerPC SPE Linux
|
`powerpc-unknown-linux-gnuspe` | ✓ | | PowerPC SPE Linux
|
||||||
`powerpc-unknown-linux-musl` | ? | |
|
`powerpc-unknown-linux-musl` | ? | |
|
||||||
`powerpc-unknown-netbsd` | ✓ | ✓ |
|
[`powerpc-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD 32-bit powerpc systems
|
||||||
`powerpc-unknown-openbsd` | ? | |
|
`powerpc-unknown-openbsd` | ? | |
|
||||||
`powerpc-wrs-vxworks-spe` | ? | |
|
`powerpc-wrs-vxworks-spe` | ? | |
|
||||||
`powerpc-wrs-vxworks` | ? | |
|
`powerpc-wrs-vxworks` | ? | |
|
||||||
|
@ -307,7 +308,7 @@ target | std | host | notes
|
||||||
[`riscv64gc-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/riscv64
|
[`riscv64gc-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/riscv64
|
||||||
`s390x-unknown-linux-musl` | | | S390x Linux (kernel 3.2, MUSL)
|
`s390x-unknown-linux-musl` | | | S390x Linux (kernel 3.2, MUSL)
|
||||||
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
||||||
`sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
|
[`sparc64-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/sparc64
|
||||||
[`sparc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/sparc64
|
[`sparc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/sparc64
|
||||||
`thumbv4t-none-eabi` | * | | ARMv4T T32
|
`thumbv4t-none-eabi` | * | | ARMv4T T32
|
||||||
[`thumbv5te-none-eabi`](platform-support/armv5te-none-eabi.md) | * | | ARMv5TE T32
|
[`thumbv5te-none-eabi`](platform-support/armv5te-none-eabi.md) | * | | ARMv5TE T32
|
||||||
|
|
107
src/doc/rustc/src/platform-support/netbsd.md
Normal file
107
src/doc/rustc/src/platform-support/netbsd.md
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
# \*-unknown-netbsd
|
||||||
|
|
||||||
|
**Tier: 3**
|
||||||
|
|
||||||
|
[NetBSD] multi-platform 4.4BSD-based UNIX-like operating system.
|
||||||
|
|
||||||
|
[NetBSD]: https://www.NetBSD.org/
|
||||||
|
|
||||||
|
The target names follow this format: `$ARCH-unknown-netbsd{-$SUFFIX}`,
|
||||||
|
where `$ARCH` specifies the target processor architecture and
|
||||||
|
`-$SUFFIX` (optional) might indicate the ABI. The following targets
|
||||||
|
are currently defined running NetBSD:
|
||||||
|
|
||||||
|
| Target name | NetBSD Platform |
|
||||||
|
|--------------------------------|-----------------|
|
||||||
|
| `amd64-unknown-netbsd` | [amd64 / x86_64 systems](https://wiki.netbsd.org/ports/amd64/) |
|
||||||
|
| `armv7-unknown-netbsd-eabihf` | [32-bit ARMv7 systems with hard-float](https://wiki.netbsd.org/ports/evbarm/) |
|
||||||
|
| `armv6-unknown-netbsd-eabihf` | [32-bit ARMv6 systems with hard-float](https://wiki.netbsd.org/ports/evbarm/) |
|
||||||
|
| `aarch64-unknown-netbsd` | [64-bit ARM systems, little-endian](https://wiki.netbsd.org/ports/evbarm/) |
|
||||||
|
| `aarch64_be-unknown-netbsd` | [64-bit ARM systems, big-endian](https://wiki.netbsd.org/ports/evbarm/) |
|
||||||
|
| `i586-unknown-netbsd` | [32-bit i386, restricted to Pentium](https://wiki.netbsd.org/ports/i386/) |
|
||||||
|
| `i686-unknown-netbsd` | [32-bit i386 with SSE](https://wiki.netbsd.org/ports/i386/) |
|
||||||
|
| `mipsel-unknown-netbsd` | [32-bit mips, requires mips32 cpu support](https://wiki.netbsd.org/ports/evbmips/) |
|
||||||
|
| `powerpc-unknown-netbsd` | [Various 32-bit PowerPC systems, e.g. MacPPC](https://wiki.netbsd.org/ports/macppc/) |
|
||||||
|
| `sparc64-unknown-netbsd` | [Sun UltraSPARC systems](https://wiki.netbsd.org/ports/sparc64/) |
|
||||||
|
|
||||||
|
All use the "native" `stdc++` library which goes along with the natively
|
||||||
|
supplied GNU C++ compiler for the given OS version. Many of the bootstraps
|
||||||
|
are built for NetBSD 9.x, although some exceptions exist (some
|
||||||
|
are built for NetBSD 8.x but also work on newer OS versions).
|
||||||
|
|
||||||
|
|
||||||
|
## Designated Developers
|
||||||
|
|
||||||
|
- [@he32](https://github.com/he32), `he@NetBSD.org`
|
||||||
|
- [NetBSD/pkgsrc-wip's rust](https://github.com/NetBSD/pkgsrc-wip/blob/master/rust/Makefile) maintainer (see MAINTAINER variable). This package is part of "pkgsrc work-in-progress" and is used for deployment and testing of new versions of rust
|
||||||
|
- [NetBSD's pkgsrc lang/rust](https://github.com/NetBSD/pkgsrc/tree/trunk/lang/rust) for the "proper" package in pkgsrc.
|
||||||
|
- [NetBSD's pkgsrc lang/rust-bin](https://github.com/NetBSD/pkgsrc/tree/trunk/lang/rust-bin) which re-uses the bootstrap kit as a binary distribution and therefore avoids the rather protracted native build time of rust itself
|
||||||
|
|
||||||
|
Fallback to pkgsrc-users@NetBSD.org, or fault reporting via NetBSD's
|
||||||
|
bug reporting system.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
The `amd64-unknown-netbsd` artifacts is being distributed by the
|
||||||
|
rust project.
|
||||||
|
|
||||||
|
The other targets are built by the designated developers (see above),
|
||||||
|
and the targets are initially cross-compiled, but many if not most
|
||||||
|
of them are also built natively as part of testing.
|
||||||
|
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
The default build mode for the packages is a native build.
|
||||||
|
|
||||||
|
|
||||||
|
## Cross-compilation
|
||||||
|
|
||||||
|
These targets can be cross-compiled, and we do that via the pkgsrc
|
||||||
|
package(s).
|
||||||
|
|
||||||
|
Cross-compilation typically requires the "tools" and "dest" trees
|
||||||
|
resulting from a normal cross-build of NetBSD itself, ref. our main
|
||||||
|
build script, `build.sh`.
|
||||||
|
|
||||||
|
See e.g. [do-cross.mk
|
||||||
|
Makefile](https://github.com/NetBSD/pkgsrc/tree/trunk/lang/rust/do-cross.mk)
|
||||||
|
for the Makefile used to cross-build all the above NetBSD targets
|
||||||
|
(except for the `amd64` target).
|
||||||
|
|
||||||
|
The major option for the rust build is whether to build rust with
|
||||||
|
the LLVM rust carries in its distribution, or use the LLVM package
|
||||||
|
installed from pkgsrc. The `PKG_OPTIONS.rust` option is
|
||||||
|
`rust-internal-llvm`, ref. [the rust package's options.mk make
|
||||||
|
fragment](https://github.com/NetBSD/pkgsrc/blob/trunk/lang/rust/options.mk).
|
||||||
|
It defaults to being set for a few of the above platforms, for
|
||||||
|
various reasons (see comments), but is otherwise unset and therefore
|
||||||
|
indicates use of the pkgsrc LLVM.
|
||||||
|
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
The Rust testsuite could presumably be run natively.
|
||||||
|
|
||||||
|
For the systems where the maintainer can build natively, the rust
|
||||||
|
compiler itself is re-built natively. This involves the rust compiler
|
||||||
|
being re-built with the newly self-built rust compiler, so excercises
|
||||||
|
the result quite extensively.
|
||||||
|
|
||||||
|
Additionally, for some systems we build `librsvg`, and for the more
|
||||||
|
capable systems we build and test `firefox` (amd64, i386, aarch64).
|
||||||
|
|
||||||
|
|
||||||
|
## Building Rust programs
|
||||||
|
|
||||||
|
Rust ships pre-compiled artifacts for the `amd64-unknown-netbsd`
|
||||||
|
target.
|
||||||
|
|
||||||
|
For the other systems mentioned above, using the `pkgsrc` route is
|
||||||
|
probably the easiest, possibly via the `rust-bin` package to save
|
||||||
|
time, see the `RUST_TYPE` variable from the `rust.mk` Makefile
|
||||||
|
fragment.
|
||||||
|
|
||||||
|
The pkgsrc rust package has a few files to assist with building
|
||||||
|
pkgsrc packages written in rust, ref. the `rust.mk` and `cargo.mk`
|
||||||
|
Makefile fragments in the `lang/rust` package.
|
Loading…
Add table
Add a link
Reference in a new issue