Skip to content

package_linux: GCC 15.2 toolchain from GCCToolchain_jll - #293

Merged
maleadt merged 2 commits into
mainfrom
tb/gcc15
Sep 23, 2026
Merged

maleadt merged 2 commits into
mainfrom
tb/gcc15

Conversation

@maleadt

@maleadt maleadt commented Sep 23, 2026

Copy link
Copy Markdown
Member

This switches the toolchain of package_linux and package_linux_mmtk from GCC 9.1 (staticfloat/linux-gcc-toolchains, release tarballs without a recipe) to GCC 15.2 from the new GCCToolchain_jll (JuliaPackaging/Yggdrasil#14895, see there for the rationale):

  • GCC 15.2.0 (now with gfortran) + binutils 2.45.1: the GCC that CompilerSupportLibraries_jll v1.5.7 is built with, with libstdc++ configured identically;
  • unchanged glibc floor (2.17; 2.19 on aarch64/armv7l) and kernel headers (5.15.14).

GCC 9's headers are too old for clang to build LLVM, which is why the source (USE_BINARYBUILDER=0) and optimized builds of Julia run in llvm_passes and then require its glibc 2.36. With this, package_linux can serve those builds too, with the usual glibc floor.

Changes:

  • install_gcc_toolchain pins the toolchain with a copy of the JLL's Artifacts.toml, and lets Pkg download and verify the artifact for the image's architecture (instead of piping unchecksummed tarballs into tar), then copies it into /usr/local. To bump, copy the Artifacts.toml of a newer JLL version (only together with CSL's GCC).
  • The toolchain's runtime libraries (libstdc++ etc.) are copied over Debian's again, as Copy our GCC's libstdc++ over the system-wide libstdc++. #183 did before Upgrade default debian release from bullseye to bookworm #267: they are now newer than bookworm's, and programs built during a build must run.
  • The sanity check now also compiles and runs C, C++ and Fortran programs and checks that they do not need a newer glibc than the floor.
  • xz-utils and file, which source builds need and llvm_passes gets through build-essential.

Tested locally: install_gcc_toolchain (the code of this PR, with a stubbed sudo/chroot through bubblewrap) against copies of the v8.5 package_linux images of all five architectures (non-x86 through qemu-user), downloading from the JLL's release; and the artifact lookup on Julia 1.6. In the resulting x86_64 image, Julia's CI builds pass unchanged (x86_64-linux-gnu with -Werror, result needs at most GLIBC_2.17), and the source and optimized builds work too, given a few Julia build fixes that will come with moving them here.

Nothing uses the new images until julia-buildkite is pointed at the release that includes this.

Needed by USE_BINARYBUILDER=0 builds (e.g. p7zip's .tar.xz sources),
which so far ran in llvm_passes, where build-essential pulled them in.
Replace staticfloat/linux-gcc-toolchains' GCC 9.1 (release tarballs
without a recipe) with GCCToolchain_jll (JuliaPackaging/Yggdrasil#14895):
GCC 15.2.0 + binutils 2.45.1, the GCC CompilerSupportLibraries v1.5.7 is
built with, with the same glibc floors (2.17, 2.19 on aarch64/armv7l)
and kernel headers (5.15.14). The toolchain is pinned by a copy of the
JLL's Artifacts.toml and downloaded and verified by Pkg.

GCC 15's headers let clang build LLVM, and the toolchain now includes
gfortran, so these images can also serve USE_BINARYBUILDER=0 and
optimized builds.

Copy the toolchain's runtime libraries over Debian's again (as #183 did
before #267), since they are now newer than bookworm's.
@maleadt
maleadt merged commit 0802c44 into main Sep 23, 2026
44 checks passed
@maleadt
maleadt deleted the tb/gcc15 branch September 23, 2026 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants