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:
Florian Bartels 2024-11-29 18:15:05 +01:00
parent 84c80151cf
commit efe53ddd58
7 changed files with 41 additions and 7 deletions

View file

@ -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),

View file

@ -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()
}