Add support for QNX 7.1 with io-sock on x64
Signed-off-by: Florian Bartels <Florian.Bartels@elektrobit.com>
This commit is contained in:
parent
84c80151cf
commit
efe53ddd58
7 changed files with 41 additions and 7 deletions
|
|
@ -1965,6 +1965,7 @@ supported_targets! {
|
|||
("aarch64-unknown-nto-qnx710", aarch64_unknown_nto_qnx710),
|
||||
("aarch64-unknown-nto-qnx710_iosock", aarch64_unknown_nto_qnx710_iosock),
|
||||
("x86_64-pc-nto-qnx710", x86_64_pc_nto_qnx710),
|
||||
("x86_64-pc-nto-qnx710_iosock", x86_64_pc_nto_qnx710_iosock),
|
||||
("i586-pc-nto-qnx700", i586_pc_nto_qnx700),
|
||||
|
||||
("aarch64-unknown-linux-ohos", aarch64_unknown_linux_ohos),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
use crate::spec::{Cc, LinkerFlavor, Lld, Target, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut target = super::x86_64_pc_nto_qnx710::target();
|
||||
target.options.env = "nto71_iosock".into();
|
||||
target.options.pre_link_args =
|
||||
TargetOptions::link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &[
|
||||
"-Vgcc_ntox86_64_cxx",
|
||||
get_iosock_param(),
|
||||
]);
|
||||
target
|
||||
}
|
||||
|
||||
// When using `io-sock` on QNX, we must add a search path for the linker so
|
||||
// that it prefers the io-sock version.
|
||||
// The path depends on the host, i.e. we cannot hard-code it here, but have
|
||||
// to determine it when the compiler runs.
|
||||
// When using the QNX toolchain, the environment variable QNX_TARGET is always set.
|
||||
// More information:
|
||||
// https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.io_sock/topic/migrate_app.html
|
||||
fn get_iosock_param() -> &'static str {
|
||||
let target_dir =
|
||||
std::env::var("QNX_TARGET").unwrap_or_else(|_| "PLEASE_SET_ENV_VAR_QNX_TARGET".into());
|
||||
let linker_param = format!("-L{target_dir}/x86_64/io-sock/lib");
|
||||
|
||||
linker_param.leak()
|
||||
}
|
||||
|
|
@ -139,7 +139,7 @@ test = true
|
|||
level = "warn"
|
||||
check-cfg = [
|
||||
'cfg(bootstrap)',
|
||||
'cfg(target_arch, values("xtensa", "aarch64-unknown-nto-qnx710_iosock"))',
|
||||
'cfg(target_arch, values("xtensa", "aarch64-unknown-nto-qnx710_iosock", "x86_64-pc-nto-qnx710_iosock"))',
|
||||
'cfg(target_env, values("nto71_iosock"))',
|
||||
# std use #[path] imports to portable-simd `std_float` crate
|
||||
# and to the `backtrace` crate which messes-up with Cargo list
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ pub struct Finder {
|
|||
const STAGE0_MISSING_TARGETS: &[&str] = &[
|
||||
// just a dummy comment so the list doesn't get onelined
|
||||
"aarch64-unknown-nto-qnx710_iosock",
|
||||
"x86_64-pc-nto-qnx710_iosock",
|
||||
];
|
||||
|
||||
/// Minimum version threshold for libstdc++ required when using prebuilt LLVM
|
||||
|
|
|
|||
|
|
@ -406,7 +406,8 @@ target | std | host | notes
|
|||
[`wasm64-unknown-unknown`](platform-support/wasm64-unknown-unknown.md) | ? | | WebAssembly
|
||||
[`x86_64-apple-tvos`](platform-support/apple-tvos.md) | ✓ | | x86 64-bit tvOS
|
||||
[`x86_64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ | | x86 64-bit Apple WatchOS simulator
|
||||
[`x86_64-pc-nto-qnx710`](platform-support/nto-qnx.md) | ✓ | | x86 64-bit QNX Neutrino 7.1 RTOS |
|
||||
[`x86_64-pc-nto-qnx710`](platform-support/nto-qnx.md) | ✓ | | x86 64-bit QNX Neutrino 7.1 RTOS with default network stack (io-pkt) |
|
||||
[`x86_64-pc-nto-qnx710_iosock`](platform-support/nto-qnx.md) | ✓ | | x86 64-bit QNX Neutrino 7.1 RTOS with new network stack (io-sock) |
|
||||
[`x86_64-unikraft-linux-musl`](platform-support/unikraft-linux-musl.md) | ✓ | | 64-bit Unikraft with musl 1.2.3
|
||||
`x86_64-unknown-dragonfly` | ✓ | ✓ | 64-bit DragonFlyBSD
|
||||
`x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku
|
||||
|
|
|
|||
|
|
@ -22,11 +22,12 @@ Currently, the following QNX Neutrino versions and compilation targets are suppo
|
|||
|
||||
| QNX Neutrino Version | Target Architecture | Full support | `no_std` support |
|
||||
|----------------------|---------------------|:------------:|:----------------:|
|
||||
| 7.1 with io-pkt | AArch64 | ✓ | ✓ |
|
||||
| 7.1 with io-sock | AArch64 | ✓ | ✓ |
|
||||
| 7.1 | x86_64 | ✓ | ✓ |
|
||||
| 7.0 | AArch64 | ? | ✓ |
|
||||
| 7.0 | x86 | | ✓ |
|
||||
| 7.1 with io-pkt | AArch64 | ✓ | ✓ |
|
||||
| 7.1 with io-sock | AArch64 | ? | ✓ |
|
||||
| 7.1 with io-pkt | x86_64 | ✓ | ✓ |
|
||||
| 7.1 with io-sock | x86_64 | ? | ✓ |
|
||||
| 7.0 | AArch64 | ? | ✓ |
|
||||
| 7.0 | x86 | | ✓ |
|
||||
|
||||
On QNX 7.0 and 7.1, `io-pkt` is used as network stack by default. QNX 7.1 includes
|
||||
the optional network stack `io-sock`.
|
||||
|
|
|
|||
|
|
@ -567,6 +567,9 @@
|
|||
//@ revisions: x86_64_pc_nto_qnx710
|
||||
//@ [x86_64_pc_nto_qnx710] compile-flags: --target x86_64-pc-nto-qnx710
|
||||
//@ [x86_64_pc_nto_qnx710] needs-llvm-components: x86
|
||||
//@ revisions: x86_64_pc_nto_qnx710_iosock
|
||||
//@ [x86_64_pc_nto_qnx710_iosock] compile-flags: --target x86_64-pc-nto-qnx710_iosock
|
||||
//@ [x86_64_pc_nto_qnx710_iosock] needs-llvm-components: x86
|
||||
//@ revisions: x86_64_pc_solaris
|
||||
//@ [x86_64_pc_solaris] compile-flags: --target x86_64-pc-solaris
|
||||
//@ [x86_64_pc_solaris] needs-llvm-components: x86
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue