mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-130039: Tailcall for windows builds (GH-130040)
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
This commit is contained in:
parent
4192ce17ba
commit
a8ee1e16f5
4 changed files with 25 additions and 11 deletions
30
.github/workflows/tail-call.yml
vendored
30
.github/workflows/tail-call.yml
vendored
|
@ -2,12 +2,14 @@ name: Tail calling interpreter
|
|||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/tail-call.yml'
|
||||
- 'Python/bytecodes.c'
|
||||
- 'Python/ceval.c'
|
||||
- 'Python/ceval_macros.h'
|
||||
- 'Python/generated_cases.c.h'
|
||||
push:
|
||||
paths:
|
||||
- '.github/workflows/tail-call.yml'
|
||||
- 'Python/bytecodes.c'
|
||||
- 'Python/ceval.c'
|
||||
- 'Python/ceval_macros.h'
|
||||
|
@ -35,7 +37,7 @@ jobs:
|
|||
target:
|
||||
# Un-comment as we add support for more platforms for tail-calling interpreters.
|
||||
# - i686-pc-windows-msvc/msvc
|
||||
# - x86_64-pc-windows-msvc/msvc
|
||||
- x86_64-pc-windows-msvc/msvc
|
||||
# - aarch64-pc-windows-msvc/msvc
|
||||
- x86_64-apple-darwin/clang
|
||||
- aarch64-apple-darwin/clang
|
||||
|
@ -48,9 +50,9 @@ jobs:
|
|||
# - target: i686-pc-windows-msvc/msvc
|
||||
# architecture: Win32
|
||||
# runner: windows-latest
|
||||
# - target: x86_64-pc-windows-msvc/msvc
|
||||
# architecture: x64
|
||||
# runner: windows-latest
|
||||
- target: x86_64-pc-windows-msvc/msvc
|
||||
architecture: x64
|
||||
runner: windows-latest
|
||||
# - target: aarch64-pc-windows-msvc/msvc
|
||||
# architecture: ARM64
|
||||
# runner: windows-latest
|
||||
|
@ -79,23 +81,31 @@ jobs:
|
|||
|
||||
- name: Native Windows (debug)
|
||||
if: runner.os == 'Windows' && matrix.architecture != 'ARM64'
|
||||
shell: cmd
|
||||
run: |
|
||||
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0
|
||||
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.5
|
||||
set PlatformToolset=clangcl
|
||||
set LLVMToolsVersion=${{ matrix.llvm }}.1.5
|
||||
set LLVMInstallDir=C:\Program Files\LLVM
|
||||
./PCbuild/build.bat --tail-call-interp -d -p ${{ matrix.architecture }}
|
||||
./PCbuild/rt.bat -d -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3
|
||||
|
||||
# No tests (yet):
|
||||
- name: Emulated Windows (release)
|
||||
if: runner.os == 'Windows' && matrix.architecture == 'ARM64'
|
||||
shell: cmd
|
||||
run: |
|
||||
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0
|
||||
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.5
|
||||
set PlatformToolset=clangcl
|
||||
set LLVMToolsVersion=${{ matrix.llvm }}.1.5
|
||||
set LLVMInstallDir=C:\Program Files\LLVM
|
||||
./PCbuild/build.bat --tail-call-interp -p ${{ matrix.architecture }}
|
||||
|
||||
# The `find` line is required as a result of https://github.com/actions/runner-images/issues/9966.
|
||||
# This is a bug in the macOS runner image where the pre-installed Python is installed in the same
|
||||
# directory as the Homebrew Python, which causes the build to fail for macos-13. This line removes
|
||||
# the symlink to the pre-installed Python so that the Homebrew Python is used instead.
|
||||
- name: Native macOS (debug)
|
||||
- name: Native macOS (release)
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
brew update
|
||||
|
@ -104,16 +114,16 @@ jobs:
|
|||
export SDKROOT="$(xcrun --show-sdk-path)"
|
||||
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
|
||||
export PATH="/usr/local/opt/llvm/bin:$PATH"
|
||||
CC=clang-19 ./configure --with-tail-call-interp --with-pydebug
|
||||
CC=clang-19 ./configure --with-tail-call-interp
|
||||
make all --jobs 4
|
||||
./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3
|
||||
|
||||
- name: Native Linux (release)
|
||||
- name: Native Linux (debug)
|
||||
if: runner.os == 'Linux' && matrix.target != 'free-threading'
|
||||
run: |
|
||||
sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }}
|
||||
export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH"
|
||||
CC=clang-19 ./configure --with-tail-call-interp
|
||||
CC=clang-19 ./configure --with-tail-call-interp --with-pydebug
|
||||
make all --jobs 4
|
||||
./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ extern "C" {
|
|||
declaration \
|
||||
_GENERATE_DEBUG_SECTION_LINUX(name)
|
||||
|
||||
#if defined(MS_WINDOWS)
|
||||
#if defined(MS_WINDOWS) && !defined(__clang__)
|
||||
#define _GENERATE_DEBUG_SECTION_WINDOWS(name) \
|
||||
_Pragma(Py_STRINGIFY(section(Py_STRINGIFY(name), read, write))) \
|
||||
__declspec(allocate(Py_STRINGIFY(name)))
|
||||
|
|
|
@ -40,6 +40,7 @@ echo. --experimental-jit Enable the experimental just-in-time compiler
|
|||
echo. --experimental-jit-off Ditto but off by default (PYTHON_JIT=1 enables).
|
||||
echo. --experimental-jit-interpreter Enable the experimental Tier 2 interpreter.
|
||||
echo. --pystats Enable PyStats collection.
|
||||
echo. --tail-call-interp Enable tail-calling interpreter (requires LLVM 19 or higher).
|
||||
echo.
|
||||
echo.Available flags to avoid building certain modules.
|
||||
echo.These flags have no effect if '-e' is not given:
|
||||
|
@ -95,6 +96,7 @@ if "%~1"=="--experimental-jit-off" (set UseJIT=true) & (set UseTIER2=3) & shift
|
|||
if "%~1"=="--experimental-jit-interpreter" (set UseTIER2=4) & shift & goto CheckOpts
|
||||
if "%~1"=="--experimental-jit-interpreter-off" (set UseTIER2=6) & shift & goto CheckOpts
|
||||
if "%~1"=="--pystats" (set PyStats=1) & shift & goto CheckOpts
|
||||
if "%~1"=="--tail-call-interp" (set UseTailCallInterp=true) & shift & goto CheckOpts
|
||||
rem These use the actual property names used by MSBuild. We could just let
|
||||
rem them in through the environment, but we specify them on the command line
|
||||
rem anyway for visibility so set defaults after this
|
||||
|
@ -189,6 +191,7 @@ echo on
|
|||
/p:UseJIT=%UseJIT%^
|
||||
/p:UseTIER2=%UseTIER2%^
|
||||
/p:PyStats=%PyStats%^
|
||||
/p:UseTailCallInterp=%UseTailCallInterp%^
|
||||
%1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
|
||||
@echo off
|
||||
|
|
|
@ -106,6 +106,7 @@
|
|||
<PreprocessorDefinitions Condition="$(IncludeExternals)">_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(UseJIT)' == 'true'">_Py_JIT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(UseTIER2)' != '' and '$(UseTIER2)' != '0'">_Py_TIER2=$(UseTIER2);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(UseTailCallInterp)' == 'true'">Py_TAIL_CALL_INTERP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>version.lib;ws2_32.lib;pathcch.lib;bcrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue