Build glslc without a precompiled header so the arm64 Vulkan leg survives runner image updates - #213
Merged
Conversation
… Vulkan leg survives runner image updates
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
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.
Why
Run 34459747884 (the first prebuilt run after #212) failed on
Vulkan / linux/arm64in theBuild glslc (arm64)step:glslang builds a clang precompiled header (
ENABLE_PCHdefaults to ON) and the shaderc build runs under ccache, so the.pchproduced by the previous run (restore keyccache-vulkan-linux-arm64-b10883-mix-bea84f7-34437354177-1) came back as a cache hit. Clang validates a PCH against the mtime of every system header it saw when it was built, and the arm64 runner image had reinstalledlinux-libc-devbetween the two runs, so every translation unit that includes the PCH is rejected. Theinclude_file_mtimesloppiness only covers ccache's own lookup; it cannot stop clang from checking the header mtimes recorded inside the PCH. The x64 leg does not build glslc (it installs the LunarG package), which is why only arm64 failed.The same failure will recur on the first arm64 run after every runner image refresh, and re-running the job cannot help because the same cache is restored.
What changes
-DENABLE_PCH=OFFon the shaderc configure. Without the PCH every glslang object is an ordinary ccache entry keyed on preprocessed content, which is exactly what the rest of the Vulkan build already relies on. The glslc binary is unchanged; the cold build is a few seconds slower on 285 objects, the warm build is the same.Validation
ENABLE_PCHis the glslang option in the pinned shaderc 2025.2 tarball (third_party/glslang/CMakeLists.txt:123, consumed byglslang_pch()at line 272).