https://github.com/python/cpython/commit/a8ee1e16f545d721318afe8fe5330ddb4df7e3e3
commit: a8ee1e16f545d721318afe8fe5330ddb4df7e3e3
branch: main
author: Ken Jin <ken...@python.org>
committer: Fidget-Spinner <kenjin4...@gmail.com>
date: 2025-03-11T10:52:56+08:00
summary:

gh-130039: Tailcall for windows builds (GH-130040)



Co-authored-by: Hugo van Kemenade <1324225+hug...@users.noreply.github.com>

files:
M .github/workflows/tail-call.yml
M Include/internal/pycore_debug_offsets.h
M PCbuild/build.bat
M PCbuild/pythoncore.vcxproj

diff --git a/.github/workflows/tail-call.yml b/.github/workflows/tail-call.yml
index 33b37ca52fbdd0..3bee758e2ad2cf 100644
--- a/.github/workflows/tail-call.yml
+++ b/.github/workflows/tail-call.yml
@@ -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
 
diff --git a/Include/internal/pycore_debug_offsets.h 
b/Include/internal/pycore_debug_offsets.h
index 44feb079571a73..a61096c17f143b 100644
--- a/Include/internal/pycore_debug_offsets.h
+++ b/Include/internal/pycore_debug_offsets.h
@@ -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)))
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index d3e3894c203a65..9fbc3e62ce75cc 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -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
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 3b3c3972987db8..cef0e81e11972c 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -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>

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to