-
Notifications
You must be signed in to change notification settings - Fork 459
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for C/C++ compiler for Neutrino QNX: qcc
#1319
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, is it possible to setup CI and a new test to actually use qcc for testing
Unfortunately this is not possible because |
Is this going to let us drop all the Ah, the link says yes. |
Yes, see also rust-lang/rust#134211 😄 |
Not very familiar with Neutrino QNX, cc @madsmtm can you have a look at this PR please? |
src/lib.rs
Outdated
@@ -2803,6 +2818,8 @@ impl Build { | |||
format!("arm-kmc-eabi-{}", gnu) | |||
} else if target.arch == "aarch64" && target.vendor == "kmc" { | |||
format!("aarch64-kmc-elf-{}", gnu) | |||
} else if target.os == "nto" { | |||
"qcc".into() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It sounds like this target only supports compiling with qcc
, is that true?
If so, @NobodyXu is this the right place to set this up? This would only select the default compiler, right? What if the user passes cc::Build::new().compiler("clang")
? Is the expected behaviour to still try to use Clang, even though we know that'll fail?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It sounds like this target only supports compiling with
qcc
, is that true?
I think/guess you have to use qcc
if you want to include system header files due to license reasons. In other words, usually only qcc
is used.
If someone wants to use a very non-default compiler, they can set it via environment variables.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My concern is that if we add the -V
flag, then you won't be able to compile with other compilers that don't support that flag
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I get your point. Thinking about my previous statement: It's not just header files, you also cannot link to create executables or shared objects without license violations. I don't think we need to support non-qcc compilers.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cool, thanks for the clarification.
Gonna keep this open pending answer wrt. default vs. required compiler.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think anyone is compiling for QNX Neutrino and not using qcc
. If you pay this much for your RTOS, you colour between the lines, not outside.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I meant, I wanted @NobodyXu to confirm that this was the best place to set it up ;)
(Also not familiar with Neutrino QNX, I'm fine with deferring to the target maintainers here) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Final few questions from me:
- Do we need to do something else to support the
io-pkt
/io-sock
divide? Do we need to pass a special flag or something? - Is there a compiler flag for choosing between
7.0
,7.1
and8.0
? E.g. do we actually need to pass e.g.-V7.0,gcc_ntoaarch64le_cxx
, or am I misunderstanding that?
Only linking requires an additional library search path which is added by rustc when rustc links. As far as I understand cc, it never calls a linker itself. If cc can be used to link shared objects / executables, then it would make sense to investigate.
No, I'm only adding -Vgcc_ntoaarch64le_cxx. The version number is optional. Also, this version relates to the used compiler version (e.g. "gcc 8.3"), not the QNX version. |
The correct compiler is added to your PATH by running a shell script / batch file supplied with the QNX Software Development Platform, so you can't have both QNX SDP 8.0 and QNX SDP 7.1 (for example) versions of |
(and the OS is called QNX Neutrino, not Neutrino QNX, fwiw) |
I think
I'm just worried that users might have e.g. QNX SDP 7.1 configured while building the |
The toolchain does not reveal the QNX version, unfortunately. You would need to start parsing header files, like I've tried with rust-lang/libc#4192 ... but as also written there: |
Fair, it's unfortunate that that's the state of things, but I guess we don't need to do anything in |
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: `@jonathanpallant` `@japaric` `@gh-tr` `@AkhilTThomas`
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ``@jonathanpallant`` ``@japaric`` ``@gh-tr`` ``@AkhilTThomas``
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ```@jonathanpallant``` ```@japaric``` ```@gh-tr``` ```@AkhilTThomas```
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ````@jonathanpallant```` ````@japaric```` ````@gh-tr```` ````@AkhilTThomas````
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: `````@jonathanpallant````` `````@japaric````` `````@gh-tr````` `````@AkhilTThomas`````
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ``````@jonathanpallant`````` ``````@japaric`````` ``````@gh-tr`````` ``````@AkhilTThomas``````
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ```````@jonathanpallant``````` ```````@japaric``````` ```````@gh-tr``````` ```````@AkhilTThomas```````
…er-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ````````@jonathanpallant```````` ````````@japaric```````` ````````@gh-tr```````` ````````@AkhilTThomas````````
Rollup merge of rust-lang#134211 - flba-eb:add_qnx_archiver, r=compiler-errors On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ````````@jonathanpallant```````` ````````@japaric```````` ````````@gh-tr```````` ````````@AkhilTThomas````````
On Neutrino QNX, reduce the need to set archiver via environment variables This adds support for automatically selecting the correct `ar` tool when compiling for Neutrino QNX. Once rust-lang/cc-rs#1319 is merged and a new cc version is integrated, all environment variables of the [Neutrino documentation](https://github.com/rust-lang/rust/blob/stable/src/doc/rustc/src/platform-support/nto-qnx.md) can be removed. CC: ````````@jonathanpallant```````` ````````@japaric```````` ````````@gh-tr```````` ````````@AkhilTThomas````````
This adds support for using the C/C++ compiler
qcc
from Neutrino QNX, with the target parameters required.So far, it was required to set various environment variables.
CC: @jonathanpallant @japaric @gh-tr @AkhilTThomas