Skip to content

Move to exactly LLVM 23.1.3 - #127

Merged
Leitwolf11 merged 4 commits into
mainfrom
feature/llvm-23
Nov 2, 2026
Merged

Leitwolf11 merged 4 commits into
mainfrom
feature/llvm-23

Conversation

@Leitwolf11

Copy link
Copy Markdown
Contributor

Moves the compiler to exactly LLVM 23.1.3 on every platform.

  • Windows and macOS use the official 23.1.3 release archives, checked by SHA-256.
  • Linux uses the libc++ archives of toolchain-llvm-23.1.3-libcxx-1, with digests recorded in the Go helper and both Containerfiles.
  • The LLVM repository rule fails the build when llvm-config --version is not 23.1.3.
  • JitSession.cpp follows the changed ORC creator signature; on Windows the backend links zlib and zstd.

Verified locally on Windows: develop build with the version check, the bundle, and the native suites; go test ./internal/development. The Linux C++ compiler stays the distribution's clang. macOS now uses the release archive rather than Homebrew's LLVM, so its zstd lookup is proven only by this PR's CI.

Leitwolf11 and others added 3 commits November 2, 2026 00:50
The Windows jobs check the digest of the archive. macOS takes the release
of LLVM with its digest instead of Homebrew's formula, which moves to
every new version. LLVM 23 hands the object linking layer creator a
memory manager, and its compression reaches the backend without LLD, so
the backend links zlib and zstd on Windows.

Linux follows once the toolchain archives are published.
Linux now takes the libc++ archives of toolchain-llvm-23.1.3-libcxx-1:
the version, revision and digests in the Go helper and the digests in
both Containerfiles agree, which the helper's test enforces.

The LLVM repository rule compares llvm-config --version with 23.1.3 and
stops the build otherwise, so no platform can drift to another release
unnoticed. Windows was built with the check in place; the other platforms
are covered by this branch's CI. The Linux C++ compiler stays the
distribution's clang, which builds against LLVM's libraries and headers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

@inspect-review inspect-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

inspect review

Triage: 36 entities analyzed | 0 critical, 0 high, 32 medium, 4 low
Verdict: standard_review

Findings (0)


Reviewed by inspect | Entity-level triage found 0 high-risk changes

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Pin the compiler to LLVM 23.1.3 on every platform

⚙️ Configuration changes ✨ Enhancement 🧪 Tests 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Pin Windows, macOS, and Linux LLVM archives to verified 23.1.3 releases.
• Reject other LLVM versions and adapt the backend to LLVM 23’s JIT and linking requirements.
• Update toolchain documentation and tests to reflect the pinned release.
Diagram

graph TD
  W["Windows archive"] --> R["LLVM discovery"] --> V{"Version 23.1.3?"} --> B["Native backend"]
  M["macOS archive"] --> R
  L["Linux archives"] --> R
  C["Windows compression"] --> B
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Centralize cross-platform toolchain provisioning
  • ➕ Keep archive versions and digests in one place across CI, helpers, and containers.
  • ➕ Reduce duplication when upgrading LLVM again.
  • ➖ Requires new provisioning tooling for distinct platform archive formats and build environments.
  • ➖ Broadens the scope and risk of this version upgrade.

Recommendation: Keep the platform-specific provisioning for this upgrade: verified archives and Bazel’s exact-version gate address version drift without introducing a new toolchain layer. Consider centralizing the repeated pins if future upgrades make synchronization costly.

Files changed (17) +94 / -43

Enhancement (2) +12 / -2
BUILD.bazelLink Windows backend compression dependencies +10/-1

Link Windows backend compression dependencies

• Adds Windows-only zlib and zstd dependencies required when LLVM 23’s compression code is linked into the backend without LLD.

Talac/Backend/LLVM/BUILD.bazel

JitSession.cppMatch LLVM 23’s ORC layer creator signature +2/-1

Match LLVM 23’s ORC layer creator signature

• Adds the memory-manager argument to the Windows object-linking-layer creator callback while retaining its existing section allocation behavior.

Talac/Backend/LLVM/JitSession.cpp

Tests (2) +3 / -3
LinkPlanTests.cppRefresh linker parsing fixtures for LLVM 23.1.3 +2/-2

Refresh linker parsing fixtures for LLVM 23.1.3

• Changes the sample clang version strings in linker command parsing tests to 23.1.3.

Talac/Linker/Tests/LinkPlanTests.cpp

llvm_toolchain_test.goExpect the new immutable Linux toolchain release +1/-1

Expect the new immutable Linux toolchain release

• Updates the expected Fedora archive URL to the LLVM 23.1.3 libc++ release. Existing tests continue to check that container URLs and digests match the helper.

helpers/internal/development/llvm_toolchain_test.go

Documentation (6) +15 / -9
CHANGELOG.mdRecord the exact LLVM version requirement +5/-0

Record the exact LLVM version requirement

• Documents LLVM 23.1.3 as the required compiler build version and notes that other llvm-config versions fail the build.

CHANGELOG.md

BUILDING.mdUpdate platform LLVM installation guidance +3/-2

Update platform LLVM installation guidance

• Directs macOS users to an LLVM 23.1.3 release rather than a moving Homebrew formula. Updates the Linux helper’s documented toolchain version.

Documents/BUILDING.md

TROUBLESHOOTING.mdPoint macOS SDK troubleshooting at LLVM_ROOT +3/-3

Point macOS SDK troubleshooting at LLVM_ROOT

• Replaces the Homebrew-specific clang configuration path with the release installation’s LLVM_ROOT path.

Documents/Contributing/TROUBLESHOOTING.md

TESTING.mdClarify the source of macOS LLVM libraries +2/-2

Clarify the source of macOS LLVM libraries

• Updates sanitizer guidance to identify the LLVM release, rather than Homebrew, as the source of macOS LLVM libraries.

Documents/TESTING.md

fuzz.goRemove Homebrew wording from macOS fuzz runtime error +1/-1

Remove Homebrew wording from macOS fuzz runtime error

• Makes the libFuzzer runtime discovery error describe LLVM generally now that macOS CI uses an official release archive.

helpers/internal/development/fuzz.go

host.goCorrect macOS sanitizer toolchain commentary +1/-1

Correct macOS sanitizer toolchain commentary

• Identifies the LLVM release, rather than Homebrew, as the source of uninstrumented macOS LLVM libraries.

helpers/internal/development/host.go

Other (7) +64 / -29
benchmarks.ymlPin Windows benchmark CI to verified LLVM 23.1.3 +8/-4

Pin Windows benchmark CI to verified LLVM 23.1.3

• Updates the Windows LLVM cache and release URL. Checks the downloaded archive’s SHA-256 before extraction.

.github/workflows/benchmarks.yml

compiler-tier1.ymlPin Windows and macOS compiler CI toolchains +29/-13

Pin Windows and macOS compiler CI toolchains

• Moves Windows to the verified LLVM 23.1.3 archive and replaces Homebrew LLVM on macOS with a cached, verified official release. Adjusts macOS LLD setup commentary and SDK configuration lookup for the new LLVM root.

.github/workflows/compiler-tier1.yml

fuzzing.ymlVerify LLVM 23.1.3 in Windows fuzzing CI +6/-2

Verify LLVM 23.1.3 in Windows fuzzing CI

• Switches the Windows fuzzing job to the LLVM 23.1.3 release and verifies its SHA-256 before unpacking.

.github/workflows/fuzzing.yml

llvm.bzlReject LLVM versions other than 23.1.3 +11/-0

Reject LLVM versions other than 23.1.3

• Checks the discovered llvm-config version before resolving headers and libraries. Fails repository setup with guidance when it is not exactly 23.1.3.

Talac/Build/Bazel/llvm.bzl

ContainerfileInstall verified LLVM 23.1.3 in Fedora container +3/-3

Install verified LLVM 23.1.3 in Fedora container

• Switches the Fedora container to the new libc++ toolchain release, updates its SHA-256 check, and adjusts the extracted directory name.

helpers/containers/fedora-43/Containerfile

ContainerfileInstall verified LLVM 23.1.3 in Ubuntu container +3/-3

Install verified LLVM 23.1.3 in Ubuntu container

• Switches the Ubuntu container to the new libc++ toolchain release, updates its SHA-256 check, and adjusts the extracted directory name.

helpers/containers/ubuntu-26.04/Containerfile

llvm_toolchain.goPin Linux helper to LLVM 23.1.3 libc++ archives +4/-4

Pin Linux helper to LLVM 23.1.3 libc++ archives

• Updates the toolchain version, release revision, and Fedora and Ubuntu archive digests used for verified Linux downloads.

helpers/internal/development/llvm_toolchain.go

@qodo-code-review

qodo-code-review Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Website bootstrap leads to failed builds ✗ Dismissed
Description
_llvm_repository_impl now requires LLVM 23.1.3, but prebuild install uses moving Homebrew and
winget packages and treats executable presence as sufficient, while the website presents bootstrap
followed by a build as a complete setup path. On a fresh macOS or Windows machine where the package
manager supplies another version, bootstrap can report success before the Bazel build fails during
LLVM discovery; macOS readers are not told to install the required release separately.
Code

Talac/Build/Bazel/llvm.bzl[R112-114]

+    version = repository_ctx.execute([config, "--version"], quiet = True)
+    if version.return_code != 0 or version.stdout.strip() != _LLVM_VERSION:
+        fail("talac builds with LLVM {} exactly; {} reports {}. Set LLVM_ROOT to that release.".format(
Evidence
The repository rule enforces an exact LLVM version, while the bootstrap uses unversioned Homebrew
and winget packages, checks readiness by executable presence, and installs those packages when
absent. Tala’s build guide notes that the Homebrew LLVM formula moves between versions, but the
website places bootstrap immediately before the build commands without mentioning a separate release
installation.

tala -> website
Talac/Build/Bazel/llvm.bzl[3-4]
Talac/Build/Bazel/llvm.bzl[112-118]
Documents/BUILDING.md[57-60]
helpers/cmd/prebuild/main.go[190-195]
Talac/Build/Bazel/llvm.bzl[99-118]
helpers/cmd/prebuild/main.go[190-196]
helpers/cmd/prebuild/main.go[303-343]
helpers/cmd/prebuild/main.go[411-453]
External repo: Progmasoft/website, frontend/src/pages/GettingStartedPage.vue [24-32]
External repo: Progmasoft/website, frontend/src/pages/GettingStartedPage.vue [289-301]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The exact LLVM 23.1.3 requirement is not reflected in the Windows and macOS bootstrap paths or the website’s bootstrap-to-build instructions. A moving package-manager release can pass bootstrap’s executable check but fail during the subsequent Bazel build.

## Fix Focus Areas
- Talac/Build/Bazel/llvm.bzl[112-118]
- Documents/BUILDING.md[57-60]
- /cross_repos/website/frontend/src/pages/GettingStartedPage.vue[24-26]
- /cross_repos/website/frontend/src/pages/GettingStartedPage.vue[289-300]
- helpers/cmd/prebuild/main.go[190-196]
- helpers/cmd/prebuild/main.go[303-343]
- helpers/cmd/prebuild/main.go[411-453]

## Recommended Fix
Make the Windows and macOS bootstrap paths install or explicitly require LLVM 23.1.3 rather than treating any package-manager LLVM as sufficient. Check the installed version during bootstrap and give an actionable error for an incompatible installation. Align the website guide in all supported locales with that behavior; if bootstrap does not supply the exact macOS release, tell readers to install LLVM 23.1.3 separately and set `LLVM_ROOT` before building.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
⚠️ Tickets: not configured — No jira, linear integration is connected for the linked tickets
✅ Web pages:
  +4 more
✅ Cross-repo context — repo relationships
  Explored: repo: Progmasoft/website (sha: 62147501) — View relationship
Review mode: Auto: ⚖️ Balanced: Downgraded extended -> standard: change is below the extended eligibility bar (hunks 24/18, lines 137/200; both must reach the floor). Router rationale: Cross-platform toolchain, CI, Bazel, and runtime changes create many independent failure paths.

Grey Divider

Tip of the day
💡 Did you know, you can copy the agent prompt from any finding and feed it to your IDE agent

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread Talac/Build/Bazel/llvm.bzl Resolved
The release of LLVM for macOS has no RTTI, unlike Homebrew's, so
JitSession.cpp did not link: ErrorInfo<ErrorList> needs the type
information of ErrorInfoBase. The backend now compiles without RTTI on
macOS.

The macOS job ran out of its 75 minutes because a new LLVM leaves the
build cache empty. It gets the time for a cold build of each step.

prebuild took any llvm-config as ready, and the build then refused it.
On Windows and macOS it now reports a wrong version and where to get the
right one; a test keeps its version equal to the one llvm.bzl requires.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

@inspect-review inspect-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

inspect review

Triage: 42 entities analyzed | 0 critical, 0 high, 36 medium, 6 low
Verdict: standard_review

Findings (0)


Reviewed by inspect | Entity-level triage found 0 high-risk changes

@Leitwolf11

Copy link
Copy Markdown
Contributor Author

Self-review: every platform now builds against exactly LLVM 23.1.3 and llvm.bzl refuses any other. macOS needed -fno-rtti for the backend, since LLVM's macOS release has no RTTI, and a longer job limit for the one cold build after the cache key changed; that cold run passed. Qodo's bootstrap finding is handled: prebuild check reports a wrong LLVM version on Windows and macOS with the release to get, and a test keeps prebuild and llvm.bzl on the same version; the guide points readers at that check, so it stays. inspect-review found nothing. 40 checks green on a9cf2db.

@Leitwolf11
Leitwolf11 merged commit 277539d into main Nov 2, 2026
43 checks passed
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.

1 participant