Repository navigation
Windows: build in rootfs-images v8.10 (GCC 15.2), add scheduled optimized builds - #636
Merged
Merged
Conversation
maleadt
force-pushed
the
tb/opt-windows
branch
from
September 23, 2026 04:49
2b0d9c2 to
1f59015
Compare
This was referenced Sep 23, 2026
Closed
Extend the daily optimized builds to Windows x86-64 using Julia's unified PGO+ThinLTO flow. Reuse the v8.5 Windows image, forward the build mode into the container, and use its CMake instead of the non-Windows downloader. Allow 600 minutes for the two LLVM/Julia builds on the CI agents. Run allow-fail tests and gate publication on this platform's build and test jobs. Recognize windows* in executable naming, test handling and packaging so the optimized flavor receives the existing installer, zip and signing flow. Publish under windowsopt without changing the ordinary Windows nightly destinations. Labeled full-CI PRs get build/test jobs only. Requires the Windows support in JuliaLang/julia's tb/opt-windows. Keep this limited to x86-64; i686 needs a separate toolchain arrangement to avoid 32-bit address-space limits during ThinLTO linking.
maleadt
force-pushed
the
tb/opt-windows
branch
from
September 25, 2026 16:06
1f59015 to
95c92df
Compare
Member
Author
|
All Windows jobs are passing here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This moves Julia's Windows builds to rootfs-images v8.10 (GCC 15.2) and adds daily optimized Windows x86-64 nightlies, which need that image. Both are in one PR so a single CI run covers them.
Windows builds in rootfs-images v8.10
The v8.10
package-windows-{x86_64,i686}images compile with GCC 15.2 and binutils 2.45.1 from GCCToolchain_jll (JuliaCI/rootfs-images#294, JuliaPackaging/Yggdrasil#14916). v8.5 used MSYS2's GCC 16.1 on x86_64 and mingw-builds GCC 12.2 on i686. The new toolchain is the one CompilerSupportLibraries_jll is built with, so the headers and import libraries now match the runtime DLLs Julia ships. This is the Windows counterpart of #638.v8.10 differs from v8.9 only in carrying MSYS2's
-mno-align-vector-insnpatch, enabled by default (JuliaCI/rootfs-images#295). Without it, the coverage job's-march=nativebuild crashed on its first run ofjulia.exein v8.9, on an aligned AVX store to a stack slot GCC cannot align on 64-bit Windows (julia-buildkite-ci build 182).Every Windows
DOCKER_TAGpin moves from v8.5 to v8.10: the per-commit build and upload rows, the no-GPL rows and the Windows coverage job.i686 needs JuliaLang/julia#63350 (merged). With the new MinGW headers,
isfinitebecomes an out-of-line call, and without that PR's-mfpmath=ssethe rest ofjulia_fmastays in x87 precision, soBase.fma_floatreturned NaN.Optimized Windows nightlies
The new
x86_64-w64-mingw32optbuild uses Julia'scontrib/optimizedflow (JuliaLang/julia#63214) with PGO and ThinLTO, without BOLT. Artifacts are published underjulialangnightlies/bin/windowsopt/, going through the same installer, zip and signing steps as the regular Windows nightlies. Thewinntaliases stay limited to the regular build. Registering a juliaup channel is separate work.The optimized build is why the image had to change. It compiles LLVM itself, and with v8.5's GCC 16 headers LLVM needs libstdc++ symbols that CSL's DLLs lack (
undefined symbol: std::__get_once_callable(), julia-buildkite-ci build 170). In v8.10 it needs no Julia change, because clang finds the toolchain throughPATH.Windows-specific changes:
JULIA_CI_BUILD_MODEis added to that list.contrib/download_cmake.shhas no Windows binaries, so the build uses the CMake from the image.build_envs.sh,test_julia.shandupload_julia.shnow matchwindows*instead of exact names. This gives the optimized build its.exesuffix and the Windows packaging, and also applies the executable and test handling to the no-GPL build.The build has a 600-minute timeout, as it builds LLVM and Julia twice. It took about 100 minutes, including packaging, in a Windows Server 2022 VM, so the CI duration is still an estimate. Tests keep the regular 225-minute timeout. Only x86-64 is enabled, because the 32-bit toolchain runs out of address space during ThinLTO links.
Validation
Validated in a Windows Server 2022 VM, using images built from #294's Dockerfiles and
build_julia.shwith a stubbed Buildkite agent. Each build passed an import audit: every PE import resolves against CSL's DLLs, and the shipped DLLs are CSL's. Each also passed the core, numbers, strings, math, misc, threads, ccall and exceptions tests:Those builds used
MAKE_FLAGS=VERBOSE=1, so this CI run is the first test of the-Werrorflags with GCC 15.2. S3 staging, signing and publishing were not exercised. The renderer tests cover the new jobs, the mode forwarding, the timeouts and the publish gating.