-
Notifications
You must be signed in to change notification settings - Fork 166
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
move minimum supported gcc to gcc 12 for Node.js 23 #3806
Comments
`gcc-12` is not available for this version. Refs: nodejs#3806
I opened nodejs/node#54081 to change the warning threshold in Node.js. It includes a temporary commit that makes the build exit with code 1 when the version is too low so we can easily assess the impact on CI: |
Update the warning threshold for GCC to 12.2 starting from Node.js 23. Builds can still proceed with earlier versions of GCC, but are not guaranteed to work. PR-URL: #54081 Refs: nodejs/build#3806 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Richard Lau <rlau@redhat.com>
`gcc-12` is not available for this version. Refs: #3806
Use gcc 12 to build the official binaries for Node.js 23 onwards on AIX. Note that this will require `libstdc++12`, available from the AIX toolbox. PR-URL: #54338 Refs: nodejs/build#3806 Refs: nodejs/build#3858 Refs: #54081 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
New CI with error if gcc<12: https://ci.nodejs.org/job/node-test-commit/73486/ |
Looks like we need to select gcc-12 on ubuntu2204: |
RHEL8: |
smartos: https://ci.nodejs.org/job/node-test-commit-smartos/56305/nodes=smartos20-64/console More tricky as it doesn't seem to have gcc-12 installed |
Update: I got a binary using a RHEL 9 x64 container with
I'll do more checks next week (like verifying the binary runs on armv7🙂 and checking compatibility). 🤞 |
The resultant binary works in and fails (due to libstdc++) in
So it looks like we can retain support for 32-bit arm by using a RHEL 9 container with the generated gcc 12 cross-compiler . This looks like the quickest/least effort change:
Alternative, and more work, would be to move to compiling the 32-bit arm binary in a 32-bit arm container. This would mean:
|
I've opened #3889 to add Ansible changes to build 32-bit ARM binaries with the updated gcc 12 cross compiler. |
select-compiler PR for ubuntu2204: #3890 |
For SmartOS I saw that we have hosts with newer versions but they are not used by the Jenkins job |
Being tracked under #3731 as part of the Equinix migration. |
Only SmartOS remains. |
For the new MNX hosted SmartOS machines which are meant to replace the equinix_mnx ones, it looks like SmartOS 23 has gcc 13 by default:
while SmartOS 21 is 10:
So perhaps this will be taken care of when the build issues on the new machines are resolved in #3731? cc @jperkin @ryanaslett |
Update the list of toolchains used to build the official Node.js binaries for Node.js 23 onwards. PR-URL: #54967 Refs: nodejs/build#3806 Refs: #54081 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
I'm going to close this issue -- we have #3731 for tracking the migration of the SmartOS hosts and the gcc update should be taken care of by updating to SmartOS 23. |
Update the list of toolchains used to build the official Node.js binaries for Node.js 23 onwards. PR-URL: nodejs#54967 Refs: nodejs/build#3806 Refs: nodejs#54081 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
gcc no longer support gcc 10. I think it's time we plan to move up.
Due to compiler issues, we've already had to move Linux on s390x (LinuxONE) builds to use gcc 12: #3630
(FWIW the Red Hat team maintaining the V8 ports to Power and z also use gcc 12.)
My proposal is to move to gcc 12 as not all platforms that we support that we use gcc to build on have gcc 13 yet (e.g. AIX, IBM i). It would be easier to have the same baseline across all supported platforms, although it is not strictly necessarily (in the past we have had the minimum vary by platform, but in practice that forces Node.js to be compatible with the lowest out of the set).
Compilation of
main
is currently broken on gcc 12.2 (although not on RHEL 8) but would be fixed by landing nodejs/node#53728.For releases on Linux we'd continue to use RHEL 8 (now in maintenance but good through to 2029) and use
gcc-toolset-12
instead ofgcc-toolset-10
. This would mean we keep compatibility with glibc 2.28 and libstdc++ 6.0.25 (the base in RHEL 8) and Node.js 23 would continue to run in the same places that Node.js 22, 20 and 18 does. The exception to this is likely to be 32-bit arm (armv7l) which we use a custom cross-compiler for (as RHEL doesn't support armv7l). We would either need to generate a new gcc 12 cross-compiler (and check what that would mean in terms of run-time compatibility) or perhaps discuss whether armv7l is still a platform we continue to supply official binaries for.The text was updated successfully, but these errors were encountered: