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