You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This version of CPython can be built with an experimental just-in-time compiler[^pep-744]. While most everything you already know about building and using CPython is unchanged, you will probably need to install a compatible version of LLVM first.
4
+
This version of CPython can be built with an experimental just-in-time compiler[^pep-744].
5
5
6
-
## Installing LLVM
6
+
## Building CPython with the JIT enabled
7
+
8
+
For `PCbuild`-based builds, pass the new `--experimental-jit` option to `build.bat`.
9
+
10
+
For all other builds, pass the new `--enable-experimental-jit` option to `configure`.
11
+
12
+
Otherwise, just configure and build as you normally would. Cross-compiling "just works", since the JIT is built for the host platform.
13
+
14
+
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/whatsnew/3.13.html#experimental-jit-compiler).
15
+
16
+
## Contributing to the JIT
17
+
18
+
While LLVM is not a build-time dependency as stencils as hosted in `Tools/jit/stencils`, you may still want to install LLVM to simplify your local development process (e.g. not have to wait for a CI run to regenerate the stencil for your platform).
19
+
20
+
### Installing LLVM
7
21
8
22
The JIT compiler does not require end users to install any third-party dependencies, but part of it must be *built* using LLVM[^why-llvm]. You are *not* required to build the rest of CPython using LLVM, or even the same version of LLVM (in fact, this is uncommon).
9
23
10
24
LLVM version 19 is required. Both `clang` and `llvm-readobj` need to be installed and discoverable (version suffixes, like `clang-19`, are okay). It's highly recommended that you also have `llvm-objdump` available, since this allows the build script to dump human-readable assembly for the generated code.
11
25
12
26
It's easy to install all of the required tools:
13
27
14
-
### Linux
28
+
####Linux
15
29
16
30
Install LLVM 19 on Ubuntu/Debian:
17
31
@@ -27,7 +41,7 @@ Install LLVM 19 on Fedora Linux 40 or newer:
Homebrew won't add any of the tools to your `$PATH`. That's okay; the build script knows how to find them.
39
53
40
-
### Windows
54
+
####Windows
41
55
42
56
Install LLVM 19 [by searching for it on LLVM's GitHub releases page](https://github.com/llvm/llvm-project/releases?q=19), clicking on "Assets", downloading the appropriate Windows installer for your platform (likely the file ending with `-win64.exe`), and running it. **When installing, be sure to select the option labeled "Add LLVM to the system PATH".**
43
57
@@ -47,17 +61,6 @@ Alternatively, you can use [chocolatey](https://chocolatey.org):
47
61
choco install llvm --version=19.1.0
48
62
```
49
63
50
-
51
-
## Building
52
-
53
-
For `PCbuild`-based builds, pass the new `--experimental-jit` option to `build.bat`.
54
-
55
-
For all other builds, pass the new `--enable-experimental-jit` option to `configure`.
56
-
57
-
Otherwise, just configure and build as you normally would. Cross-compiling "just works", since the JIT is built for the host platform.
58
-
59
-
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/whatsnew/3.13.html#experimental-jit-compiler).
[^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.
0 commit comments