https://github.com/python/cpython/commit/1f381a579cc50aa82838de84c2294b4979586bd9
commit: 1f381a579cc50aa82838de84c2294b4979586bd9
branch: main
author: Savannah Ostrowski <[email protected]>
committer: savannahostrowski <[email protected]>
date: 2025-11-12T18:26:50Z
summary:

Add details about JIT build infrastructure and updating dependencies to 
`Tools/jit` (#141167)

files:
A Tools/jit/jit_infra.md
M Tools/jit/README.md

diff --git a/Tools/jit/README.md b/Tools/jit/README.md
index dd7deb7b256449..c70c0c47d94ad2 100644
--- a/Tools/jit/README.md
+++ b/Tools/jit/README.md
@@ -66,6 +66,9 @@ Otherwise, just configure and build as you normally would. 
Cross-compiling "just
 
 The JIT can also be enabled or disabled using the `PYTHON_JIT` environment 
variable, even on builds where it is enabled or disabled by default. More 
details about configuring CPython with the JIT and optional values for 
`--enable-experimental-jit` can be found 
[here](https://docs.python.org/dev/using/configure.html#cmdoption-enable-experimental-jit).
 
+## Miscellaneous
+If you're looking for information on how to update the JIT build dependencies, 
see [JIT Build Infrastructure](jit_infra.md).
+
 [^pep-744]: [PEP 744](https://peps.python.org/pep-0744/)
 
 [^why-llvm]: Clang is specifically needed because it's the only C compiler 
with support for guaranteed tail calls (`musttail`), which are required by 
CPython's continuation-passing-style approach to JIT compilation. Since LLVM 
also includes other functionalities we need (namely, object file parsing and 
disassembly), it's convenient to only support one toolchain at this time.
diff --git a/Tools/jit/jit_infra.md b/Tools/jit/jit_infra.md
new file mode 100644
index 00000000000000..1a954755611d19
--- /dev/null
+++ b/Tools/jit/jit_infra.md
@@ -0,0 +1,28 @@
+# JIT Build Infrastructure
+
+This document includes details about the intricacies of the JIT build 
infrastructure.
+
+## Updating LLVM
+
+When we update LLVM, we need to also update the LLVM release artifact for 
Windows builds. This is because Windows builds automatically pull prebuilt LLVM 
binaries in our pipelines (e.g. notice that `.github/workflows/jit.yml` does 
not explicitly download LLVM or build it from source).
+
+To update the LLVM release artifact for Windows builds, follow these steps:
+1. Go to the [LLVM releases 
page](https://github.com/llvm/llvm-project/releases).
+1. Download x86_64 Windows artifact for the desired LLVM version (e.g. 
`clang+llvm-21.1.4-x86_64-pc-windows-msvc.tar.xz`).
+1. Extract and repackage the tarball with the correct directory structure. For 
example:
+   ```bash
+   tar -xf clang+llvm-21.1.4-x86_64-pc-windows-msvc.tar.xz
+   mv clang+llvm-21.1.4-x86_64-pc-windows-msvc llvm-21.1.4.0
+   tar -cf - llvm-21.1.4.0 | pv | xz > llvm-21.1.4.0.tar.xz  
+   ```
+    The tarball must contain a top-level directory named `llvm-{version}.0/`.
+1. Go to [cpython-bin-deps](https://github.com/python/cpython-bin-deps).
+1. Create a new release with the updated LLVM artifact.
+    - Create a new tag to match the LLVM version (e.g. `llvm-21.1.4.0`).
+    - Specify the release title (e.g. `LLVM 21.1.4 for x86_64 Windows`).
+    - Upload the asset (you can leave all other fields the same).
+
+### Other notes
+- You must make sure that the name of the artifact matches exactly what is 
expected in `Tools/jit/_llvm.py` and `PCbuild/get_externals.py`.
+- We don't need multiple release artifacts for each architecture because LLVM 
can cross-compile for different architectures on Windows; x86_64 is sufficient.
+- You must have permissions to create releases in the `cpython-bin-deps` 
repository. If you don't have permissions, you should contact one of the 
organization admins.
\ No newline at end of file

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to