GH-140479: Update JIT builds to use LLVM 21 (#140973)
This commit is contained in:
committed by
GitHub
parent
9cd5427d96
commit
d162c42790
8
.github/workflows/jit.yml
vendored
8
.github/workflows/jit.yml
vendored
@@ -68,7 +68,7 @@ jobs:
|
||||
- true
|
||||
- false
|
||||
llvm:
|
||||
- 20
|
||||
- 21
|
||||
include:
|
||||
- target: i686-pc-windows-msvc/msvc
|
||||
architecture: Win32
|
||||
@@ -138,7 +138,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
llvm:
|
||||
- 20
|
||||
- 21
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -166,7 +166,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
llvm:
|
||||
- 20
|
||||
- 21
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -193,7 +193,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
llvm:
|
||||
- 20
|
||||
- 21
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Update JIT compilation to use LLVM 21 at build time.
|
||||
@@ -82,7 +82,7 @@ if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi-3.4.4
|
||||
if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-3.0.18
|
||||
if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.15.0
|
||||
if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06
|
||||
if NOT "%IncludeLLVM%"=="false" set binaries=%binaries% llvm-20.1.8.0
|
||||
if NOT "%IncludeLLVM%"=="false" set binaries=%binaries% llvm-21.1.4.0
|
||||
|
||||
for %%b in (%binaries%) do (
|
||||
if exist "%EXTERNALS_DIR%\%%b" (
|
||||
@@ -92,7 +92,7 @@ for %%b in (%binaries%) do (
|
||||
git clone --depth 1 https://github.com/%ORG%/cpython-bin-deps --branch %%b "%EXTERNALS_DIR%\%%b"
|
||||
) else (
|
||||
echo.Fetching %%b...
|
||||
if "%%b"=="llvm-20.1.8.0" (
|
||||
if "%%b"=="llvm-21.1.4.0" (
|
||||
%PYTHON% -E "%PCBUILD%\get_external.py" --release --organization %ORG% --externals-dir "%EXTERNALS_DIR%" %%b
|
||||
) else (
|
||||
%PYTHON% -E "%PCBUILD%\get_external.py" --binary --organization %ORG% --externals-dir "%EXTERNALS_DIR%" %%b
|
||||
|
||||
@@ -9,32 +9,32 @@ Python 3.11 or newer is required to build the JIT.
|
||||
|
||||
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).
|
||||
|
||||
LLVM version 20 is the officially supported version. You can modify if needed using the `LLVM_VERSION` env var during configure. 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.
|
||||
LLVM version 21 is the officially supported version. You can modify if needed using the `LLVM_VERSION` env var during configure. 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.
|
||||
|
||||
It's easy to install all of the required tools:
|
||||
|
||||
### Linux
|
||||
|
||||
Install LLVM 20 on Ubuntu/Debian:
|
||||
Install LLVM 21 on Ubuntu/Debian:
|
||||
|
||||
```sh
|
||||
wget https://apt.llvm.org/llvm.sh
|
||||
chmod +x llvm.sh
|
||||
sudo ./llvm.sh 20
|
||||
sudo ./llvm.sh 21
|
||||
```
|
||||
|
||||
Install LLVM 20 on Fedora Linux 40 or newer:
|
||||
Install LLVM 21 on Fedora Linux 40 or newer:
|
||||
|
||||
```sh
|
||||
sudo dnf install 'clang(major) = 20' 'llvm(major) = 20'
|
||||
sudo dnf install 'clang(major) = 21' 'llvm(major) = 21'
|
||||
```
|
||||
|
||||
### macOS
|
||||
|
||||
Install LLVM 20 with [Homebrew](https://brew.sh):
|
||||
Install LLVM 21 with [Homebrew](https://brew.sh):
|
||||
|
||||
```sh
|
||||
brew install llvm@20
|
||||
brew install llvm@21
|
||||
```
|
||||
|
||||
Homebrew won't add any of the tools to your `$PATH`. That's okay; the build script knows how to find them.
|
||||
@@ -43,18 +43,18 @@ Homebrew won't add any of the tools to your `$PATH`. That's okay; the build scri
|
||||
|
||||
LLVM is downloaded automatically (along with other external binary dependencies) by `PCbuild\build.bat`.
|
||||
|
||||
Otherwise, you can install LLVM 20 [by searching for it on LLVM's GitHub releases page](https://github.com/llvm/llvm-project/releases?q=20), 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".**
|
||||
Otherwise, you can install LLVM 21 [by searching for it on LLVM's GitHub releases page](https://github.com/llvm/llvm-project/releases?q=21), 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".**
|
||||
|
||||
Alternatively, you can use [chocolatey](https://chocolatey.org):
|
||||
|
||||
```sh
|
||||
choco install llvm --version=20.1.8
|
||||
choco install llvm --version=21.1.0
|
||||
```
|
||||
|
||||
### Dev Containers
|
||||
|
||||
If you are working on CPython in a [Codespaces instance](https://devguide.python.org/getting-started/setup-building/#using-codespaces), there's no
|
||||
need to install LLVM as the Fedora 42 base image includes LLVM 20 out of the box.
|
||||
need to install LLVM as the Fedora 43 base image includes LLVM 21 out of the box.
|
||||
|
||||
## Building
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ import typing
|
||||
import _targets
|
||||
|
||||
|
||||
_LLVM_VERSION = "20"
|
||||
_EXTERNALS_LLVM_TAG = "llvm-20.1.8.0"
|
||||
_LLVM_VERSION = "21"
|
||||
_EXTERNALS_LLVM_TAG = "llvm-21.1.4.0"
|
||||
|
||||
_P = typing.ParamSpec("_P")
|
||||
_R = typing.TypeVar("_R")
|
||||
|
||||
Reference in New Issue
Block a user