diff options
author | Brandt Bucher <brandtbucher@microsoft.com> | 2024-01-29 02:48:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-29 02:48:48 (GMT) |
commit | f6d9e5926b6138994eaa60d1c36462e36105733d (patch) | |
tree | 53362fa9918ab65519ccf9a343cfcdfcfa9c4f6f /PCbuild | |
parent | f7c05d7ad3075a1dbeed86b6b12903032e4afba6 (diff) | |
download | cpython-f6d9e5926b6138994eaa60d1c36462e36105733d.zip cpython-f6d9e5926b6138994eaa60d1c36462e36105733d.tar.gz cpython-f6d9e5926b6138994eaa60d1c36462e36105733d.tar.bz2 |
GH-113464: Add a JIT backend for tier 2 (GH-113465)
Add an option (--enable-experimental-jit for configure-based builds
or --experimental-jit for PCbuild-based ones) to build an
*experimental* just-in-time compiler, based on copy-and-patch (https://fredrikbk.com/publications/copy-and-patch.pdf).
See Tools/jit/README.md for more information on how to install the required build-time tooling.
Diffstat (limited to 'PCbuild')
-rw-r--r-- | PCbuild/_freeze_module.vcxproj | 1 | ||||
-rw-r--r-- | PCbuild/_freeze_module.vcxproj.filters | 3 | ||||
-rw-r--r-- | PCbuild/build.bat | 3 | ||||
-rw-r--r-- | PCbuild/pythoncore.vcxproj | 3 | ||||
-rw-r--r-- | PCbuild/pythoncore.vcxproj.filters | 6 | ||||
-rw-r--r-- | PCbuild/regen.targets | 23 |
6 files changed, 38 insertions, 1 deletions
diff --git a/PCbuild/_freeze_module.vcxproj b/PCbuild/_freeze_module.vcxproj index dde801f..35788ec 100644 --- a/PCbuild/_freeze_module.vcxproj +++ b/PCbuild/_freeze_module.vcxproj @@ -224,6 +224,7 @@ <ClCompile Include="..\Python\initconfig.c" /> <ClCompile Include="..\Python\intrinsics.c" /> <ClCompile Include="..\Python\instrumentation.c" /> + <ClCompile Include="..\Python\jit.c" /> <ClCompile Include="..\Python\legacy_tracing.c" /> <ClCompile Include="..\Python\lock.c" /> <ClCompile Include="..\Python\marshal.c" /> diff --git a/PCbuild/_freeze_module.vcxproj.filters b/PCbuild/_freeze_module.vcxproj.filters index 90ccb95..7a44179 100644 --- a/PCbuild/_freeze_module.vcxproj.filters +++ b/PCbuild/_freeze_module.vcxproj.filters @@ -250,6 +250,9 @@ <ClCompile Include="..\Objects\iterobject.c"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\Python\jit.c"> + <Filter>Source Files</Filter> + </ClCompile> <ClCompile Include="..\Objects\listobject.c"> <Filter>Source Files</Filter> </ClCompile> diff --git a/PCbuild/build.bat b/PCbuild/build.bat index e61267b..83b50db 100644 --- a/PCbuild/build.bat +++ b/PCbuild/build.bat @@ -36,6 +36,7 @@ echo. overrides -c and -d echo. --disable-gil Enable experimental support for running without the GIL. echo. --test-marker Enable the test marker within the build. echo. --regen Regenerate all opcodes, grammar and tokens. +echo. --experimental-jit Enable the experimental just-in-time compiler. echo. echo.Available flags to avoid building certain modules. echo.These flags have no effect if '-e' is not given: @@ -85,6 +86,7 @@ if "%~1"=="--disable-gil" (set UseDisableGil=true) & shift & goto CheckOpts if "%~1"=="--test-marker" (set UseTestMarker=true) & shift & goto CheckOpts if "%~1"=="-V" shift & goto Version if "%~1"=="--regen" (set Regen=true) & shift & goto CheckOpts +if "%~1"=="--experimental-jit" (set UseJIT=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 @@ -176,6 +178,7 @@ echo on /p:IncludeSSL=%IncludeSSL% /p:IncludeTkinter=%IncludeTkinter%^ /p:DisableGil=%UseDisableGil%^ /p:UseTestMarker=%UseTestMarker% %GITProperty%^ + /p:UseJIT=%UseJIT%^ %1 %2 %3 %4 %5 %6 %7 %8 %9 @echo off diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index e0b9fc1..e1ff976 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -104,6 +104,7 @@ <AdditionalIncludeDirectories Condition="$(IncludeExternals)">$(zlibDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_USRDLL;Py_BUILD_CORE;Py_BUILD_CORE_BUILTIN;Py_ENABLE_SHARED;MS_DLL_ID="$(SysWinVer)";%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="$(IncludeExternals)">_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(UseJIT)' == 'true'">_Py_JIT;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <AdditionalDependencies>version.lib;ws2_32.lib;pathcch.lib;bcrypt.lib;%(AdditionalDependencies)</AdditionalDependencies> @@ -247,6 +248,7 @@ <ClInclude Include="..\Include\internal\pycore_initconfig.h" /> <ClInclude Include="..\Include\internal\pycore_interp.h" /> <ClInclude Include="..\Include\internal\pycore_intrinsics.h" /> + <ClInclude Include="..\Include\internal\pycore_jit.h" /> <ClInclude Include="..\Include\internal\pycore_list.h" /> <ClInclude Include="..\Include\internal\pycore_llist.h" /> <ClInclude Include="..\Include\internal\pycore_lock.h" /> @@ -585,6 +587,7 @@ <ClCompile Include="..\Python\initconfig.c" /> <ClCompile Include="..\Python\intrinsics.c" /> <ClCompile Include="..\Python\instrumentation.c" /> + <ClCompile Include="..\Python\jit.c" /> <ClCompile Include="..\Python\legacy_tracing.c" /> <ClCompile Include="..\Python\lock.c" /> <ClCompile Include="..\Python\marshal.c" /> diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters index fd79436..4c55f23 100644 --- a/PCbuild/pythoncore.vcxproj.filters +++ b/PCbuild/pythoncore.vcxproj.filters @@ -669,6 +669,9 @@ <ClInclude Include="..\Include\internal\pycore_intrinsics.h"> <Filter>Include\cpython</Filter> </ClInclude> + <ClInclude Include="..\Include\internal\pycore_jit.h"> + <Filter>Include\internal</Filter> + </ClInclude> <ClInclude Include="..\Include\internal\pycore_list.h"> <Filter>Include\internal</Filter> </ClInclude> @@ -1337,6 +1340,9 @@ <ClCompile Include="..\Python\instrumentation.c"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\Python\jit.c"> + <Filter>Python</Filter> + </ClCompile> <ClCompile Include="..\Python\legacy_tracing.c"> <Filter>Source Files</Filter> </ClCompile> diff --git a/PCbuild/regen.targets b/PCbuild/regen.targets index cc9469c..a90620d 100644 --- a/PCbuild/regen.targets +++ b/PCbuild/regen.targets @@ -28,6 +28,9 @@ </_TokenOutputs> <_KeywordSources Include="$(PySourcePath)Grammar\python.gram;$(PySourcePath)Grammar\Tokens" /> <_KeywordOutputs Include="$(PySourcePath)Lib\keyword.py" /> + <!-- Taken from _Target._compute_digest in Tools\jit\_targets.py: --> + <_JITSources Include="$(PySourcePath)Python\executor_cases.c.h;$(GeneratedPyConfigDir)pyconfig.h;$(PySourcePath)Tools\jit\**"/> + <_JITOutputs Include="$(GeneratedPyConfigDir)jit_stencils.h"/> </ItemGroup> <Target Name="_TouchRegenSources" Condition="$(ForceRegen) == 'true'"> @@ -76,10 +79,28 @@ <Exec Command="$(PythonForBuild) Tools\build\generate_global_objects.py" WorkingDirectory="$(PySourcePath)" /> </Target> + + <Target Name="_RegenJIT" + Condition="'$(UseJIT)' == 'true'" + DependsOnTargets="_UpdatePyconfig;FindPythonForBuild" + Inputs="@(_JITSources)" + Outputs="@(_JITOutputs)"> + <PropertyGroup> + <JITArgs Condition="$(Platform) == 'ARM64'">aarch64-pc-windows-msvc</JITArgs> + <JITArgs Condition="$(Platform) == 'Win32'">i686-pc-windows-msvc</JITArgs> + <JITArgs Condition="$(Platform) == 'x64'">x86_64-pc-windows-msvc</JITArgs> + <JITArgs Condition="$(Configuration) == 'Debug'">$(JITArgs) --debug</JITArgs> + </PropertyGroup> + <Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\jit\build.py" $(JITArgs)' + WorkingDirectory="$(GeneratedPyConfigDir)"/> + </Target> - <Target Name="Regen" + <Target Name="_RegenNoPGUpdate" Condition="$(Configuration) != 'PGUpdate'" DependsOnTargets="_TouchRegenSources;_RegenPegen;_RegenAST_H;_RegenTokens;_RegenKeywords;_RegenGlobalObjects"> + </Target> + + <Target Name="Regen" DependsOnTargets="_RegenNoPGUpdate;_RegenJIT"> <Message Text="Generated sources are up to date" Importance="high" /> </Target> |