add riscv64gc-unknown-openbsd support (target riscv64-unknown-openbsd on OpenBSD)

- add platform-support documentation
- add riscv64gc-unknown-openbsd spec
- do not try to link with -latomic on openbsd
This commit is contained in:
Sébastien Marie 2022-08-28 05:22:21 +00:00
parent dacb6ee7b0
commit 1de5b22678
6 changed files with 26 additions and 4 deletions

View File

@ -342,10 +342,10 @@ fn main() {
}; };
// RISC-V GCC erroneously requires libatomic for sub-word // 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 // compiler and provides no libatomic in its base system so
// does not want this. // 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"); println!("cargo:rustc-link-lib=atomic");
} }

View File

@ -895,6 +895,7 @@ supported_targets! {
("i686-unknown-openbsd", i686_unknown_openbsd), ("i686-unknown-openbsd", i686_unknown_openbsd),
("powerpc-unknown-openbsd", powerpc_unknown_openbsd), ("powerpc-unknown-openbsd", powerpc_unknown_openbsd),
("powerpc64-unknown-openbsd", powerpc64_unknown_openbsd), ("powerpc64-unknown-openbsd", powerpc64_unknown_openbsd),
("riscv64gc-unknown-openbsd", riscv64gc_unknown_openbsd),
("sparc64-unknown-openbsd", sparc64_unknown_openbsd), ("sparc64-unknown-openbsd", sparc64_unknown_openbsd),
("x86_64-unknown-openbsd", x86_64_unknown_openbsd), ("x86_64-unknown-openbsd", x86_64_unknown_openbsd),

View 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()
},
}
}

View File

@ -432,12 +432,13 @@ impl Step for Llvm {
cfg.define("LLVM_LINK_LLVM_DYLIB", "ON"); 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 // RISC-V GCC erroneously requires linking against
// `libatomic` when using 1-byte and 2-byte C++ // `libatomic` when using 1-byte and 2-byte C++
// atomics but the LLVM build system check cannot // atomics but the LLVM build system check cannot
// detect this. Therefore it is set manually here. // 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 // provides no libatomic in its base system so does
// not want this. // not want this.
ldflags.exe.push(" -latomic"); ldflags.exe.push(" -latomic");

View File

@ -285,6 +285,7 @@ target | std | host | notes
`riscv32imc-esp-espidf` | ✓ | | RISC-V ESP-IDF `riscv32imc-esp-espidf` | ✓ | | RISC-V ESP-IDF
`riscv64gc-unknown-freebsd` | | | RISC-V FreeBSD `riscv64gc-unknown-freebsd` | | | RISC-V FreeBSD
`riscv64gc-unknown-linux-musl` | | | RISC-V Linux (kernel 4.20, musl 1.2.0) `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) `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` | ✓ | ✓ | NetBSD/sparc64

View File

@ -13,6 +13,7 @@ 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) | | `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) | | `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) | | `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) | | `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) | | `x86_64-unknown-openbsd` | libc++ | [AMD64-based systems](https://www.openbsd.org/amd64.html) |