mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Rollup merge of #101025 - semarie:openbsd-archs, r=petrochenkov
Add tier-3 support for powerpc64 and riscv64 openbsd # powerpc64 - MCP for [powerpc64-unknown-openbsd tier-3 support](https://github.com/rust-lang/compiler-team/issues/551) - only need to add spec definition in rustc_target # riscv64 - MCP for [riscv64-unknown-openbsd tier-3 support](https://github.com/rust-lang/compiler-team/issues/552) - add spec definition in rustc_target - follow freebsd about avoiding linking with `libatomic`
This commit is contained in:
commit
0fee731a95
@ -342,10 +342,10 @@ fn main() {
|
||||
};
|
||||
|
||||
// RISC-V GCC erroneously requires libatomic for sub-word
|
||||
// atomic operations. FreeBSD uses Clang as its system
|
||||
// atomic operations. Some BSD uses Clang as its system
|
||||
// compiler and provides no libatomic in its base system so
|
||||
// does not want this.
|
||||
if !target.contains("freebsd") && target.starts_with("riscv") {
|
||||
if target.starts_with("riscv") && !target.contains("freebsd") && !target.contains("openbsd") {
|
||||
println!("cargo:rustc-link-lib=atomic");
|
||||
}
|
||||
|
||||
|
@ -944,9 +944,11 @@ supported_targets! {
|
||||
|
||||
("aarch64-unknown-openbsd", aarch64_unknown_openbsd),
|
||||
("i686-unknown-openbsd", i686_unknown_openbsd),
|
||||
("powerpc-unknown-openbsd", powerpc_unknown_openbsd),
|
||||
("powerpc64-unknown-openbsd", powerpc64_unknown_openbsd),
|
||||
("riscv64gc-unknown-openbsd", riscv64gc_unknown_openbsd),
|
||||
("sparc64-unknown-openbsd", sparc64_unknown_openbsd),
|
||||
("x86_64-unknown-openbsd", x86_64_unknown_openbsd),
|
||||
("powerpc-unknown-openbsd", powerpc_unknown_openbsd),
|
||||
|
||||
("aarch64-unknown-netbsd", aarch64_unknown_netbsd),
|
||||
("armv6-unknown-netbsd-eabihf", armv6_unknown_netbsd_eabihf),
|
||||
|
17
compiler/rustc_target/src/spec/powerpc64_unknown_openbsd.rs
Normal file
17
compiler/rustc_target/src/spec/powerpc64_unknown_openbsd.rs
Normal file
@ -0,0 +1,17 @@
|
||||
use crate::abi::Endian;
|
||||
use crate::spec::{LinkerFlavor, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
let mut base = super::openbsd_base::opts();
|
||||
base.cpu = "ppc64".into();
|
||||
base.add_pre_link_args(LinkerFlavor::Gcc, &["-m64"]);
|
||||
base.max_atomic_width = Some(64);
|
||||
|
||||
Target {
|
||||
llvm_target: "powerpc64-unknown-openbsd".into(),
|
||||
pointer_width: 64,
|
||||
data_layout: "E-m:e-i64:64-n32:64".into(),
|
||||
arch: "powerpc64".into(),
|
||||
options: TargetOptions { endian: Endian::Big, mcount: "_mcount".into(), ..base },
|
||||
}
|
||||
}
|
18
compiler/rustc_target/src/spec/riscv64gc_unknown_openbsd.rs
Normal file
18
compiler/rustc_target/src/spec/riscv64gc_unknown_openbsd.rs
Normal file
@ -0,0 +1,18 @@
|
||||
use crate::spec::{CodeModel, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
Target {
|
||||
llvm_target: "riscv64-unknown-openbsd".into(),
|
||||
pointer_width: 64,
|
||||
data_layout: "e-m:e-p:64:64-i64:64-i128:128-n64-S128".into(),
|
||||
arch: "riscv64".into(),
|
||||
options: TargetOptions {
|
||||
code_model: Some(CodeModel::Medium),
|
||||
cpu: "generic-rv64".into(),
|
||||
features: "+m,+a,+f,+d,+c".into(),
|
||||
llvm_abiname: "lp64d".into(),
|
||||
max_atomic_width: Some(64),
|
||||
..super::openbsd_base::opts()
|
||||
},
|
||||
}
|
||||
}
|
@ -432,12 +432,13 @@ impl Step for Llvm {
|
||||
cfg.define("LLVM_LINK_LLVM_DYLIB", "ON");
|
||||
}
|
||||
|
||||
if target.starts_with("riscv") && !target.contains("freebsd") {
|
||||
if target.starts_with("riscv") && !target.contains("freebsd") && !target.contains("openbsd")
|
||||
{
|
||||
// RISC-V GCC erroneously requires linking against
|
||||
// `libatomic` when using 1-byte and 2-byte C++
|
||||
// atomics but the LLVM build system check cannot
|
||||
// detect this. Therefore it is set manually here.
|
||||
// FreeBSD uses Clang as its system compiler and
|
||||
// Some BSD uses Clang as its system compiler and
|
||||
// provides no libatomic in its base system so does
|
||||
// not want this.
|
||||
ldflags.exe.push(" -latomic");
|
||||
|
@ -277,6 +277,7 @@ target | std | host | notes
|
||||
`powerpc64-unknown-linux-musl` | ? | |
|
||||
`powerpc64-wrs-vxworks` | ? | |
|
||||
`powerpc64le-unknown-linux-musl` | ? | |
|
||||
[`powerpc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/powerpc64
|
||||
`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)
|
||||
`riscv32im-unknown-none-elf` | * | | Bare RISC-V (RV32IM ISA)
|
||||
@ -284,6 +285,7 @@ target | std | host | notes
|
||||
`riscv32imc-esp-espidf` | ✓ | | RISC-V ESP-IDF
|
||||
`riscv64gc-unknown-freebsd` | | | RISC-V FreeBSD
|
||||
`riscv64gc-unknown-linux-musl` | | | RISC-V Linux (kernel 4.20, musl 1.2.0)
|
||||
[`riscv64gc-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/riscv64
|
||||
`s390x-unknown-linux-musl` | | | S390x Linux (kernel 3.2, MUSL)
|
||||
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
||||
`sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
|
||||
|
@ -12,6 +12,8 @@ The target names follow this format: `$ARCH-unknown-openbsd`, where `$ARCH` spec
|
||||
|--------------------------------|-------------|------------------|
|
||||
| `aarch64-unknown-openbsd` | libc++ | [64-bit ARM systems](https://www.openbsd.org/arm64.html) |
|
||||
| `i686-unknown-openbsd` | libc++ | [Standard PC and clones based on the Intel i386 architecture and compatible processors](https://www.openbsd.org/i386.html) |
|
||||
| `powerpc64-unknown-openbsd` | libc++ | [IBM POWER-based PowerNV systems](https://www.openbsd.org/powerpc64.html) |
|
||||
| `riscv64gc-unknown-openbsd` | libc++ | [64-bit RISC-V systems](https://www.openbsd.org/riscv64.html) |
|
||||
| `sparc64-unknown-openbsd` | estdc++ | [Sun UltraSPARC and Fujitsu SPARC64 systems](https://www.openbsd.org/sparc64.html) |
|
||||
| `x86_64-unknown-openbsd` | libc++ | [AMD64-based systems](https://www.openbsd.org/amd64.html) |
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user