[Python-checkins] cpython (3.5): Issue #25348: Add --pgo and --pgo-job flags to PCbuild\build.bat

zach.ware python-checkins at python.org
Tue Jan 12 02:32:04 EST 2016


https://hg.python.org/cpython/rev/01ab138f4133
changeset:   99871:01ab138f4133
branch:      3.5
parent:      99868:36a54e30bcbd
user:        Zachary Ware <zachary.ware at gmail.com>
date:        Tue Jan 12 01:26:50 2016 -0600
summary:
  Issue #25348: Add --pgo and --pgo-job flags to PCbuild\build.bat

files:
  Misc/NEWS             |   5 ++
  PCbuild/build.bat     |  57 ++++++++++++++++++++++++++++--
  PCbuild/build_pgo.bat |  50 ++-------------------------
  3 files changed, 61 insertions(+), 51 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -151,6 +151,11 @@
 Build
 -----
 
+- Issue #25348: Added ``--pgo`` and ``--pgo-job`` arguments to
+  ``PCbuild\build.bat`` for building with Profile-Guided Optimization.  The
+  old ``PCbuild\build_pgo.bat`` script is now deprecated, and simply calls
+  ``PCbuild\build.bat --pgo %*``.
+
 - Issue #25827: Add support for building with ICC to ``configure``, including
   a new ``--with-icc`` flag.
 
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -25,6 +25,9 @@
 echo.  -v  Increased output messages
 echo.  -k  Attempt to kill any running Pythons before building (usually done
 echo.      automatically by the pythoncore project)
+echo.  --pgo          Build with Profile-Guided Optimization.  This flag
+echo.                 overrides -c and -d
+echo.  --test-marker  Enable the test marker within the build.
 echo.
 echo.Available flags to avoid building certain modules.
 echo.These flags have no effect if '-e' is not given:
@@ -38,7 +41,8 @@
 echo.     Set the platform (default: Win32)
 echo.  -t Build ^| Rebuild ^| Clean ^| CleanAll
 echo.     Set the target manually
-echo.  --test-marker  Enable the test marker within the build.
+echo.  --pgo-job  The job to use for PGO training; implies --pgo
+echo.             (default: "-m test --pgo")
 exit /b 127
 
 :Run
@@ -51,6 +55,12 @@
 set parallel=/m
 set verbose=/nologo /v:m
 set kill=
+set do_pgo=
+set pgo_job=-m test --pgo
+set on_64_bit=true
+
+rem This may not be 100% accurate, but close enough.
+if "%ProgramFiles(x86)%"=="" (set on_64_bit=false)
 
 :CheckOpts
 if "%~1"=="-h" goto Usage
@@ -63,6 +73,8 @@
 if "%~1"=="-M" (set parallel=) & shift & goto CheckOpts
 if "%~1"=="-v" (set verbose=/v:n) & shift & goto CheckOpts
 if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts
+if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts
+if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts
 if "%~1"=="--test-marker" (set UseTestMarker=true) & shift & goto CheckOpts
 if "%~1"=="-V" shift & goto Version
 rem These use the actual property names used by MSBuild.  We could just let
@@ -78,15 +90,49 @@
 
 if "%IncludeExternals%"=="true" call "%dir%get_externals.bat"
 
-if "%platf%"=="x64" (set vs_platf=x86_amd64)
+if "%platf%"=="x64" (
+    if "%on_64_bit%"=="true" (
+        rem This ought to always be correct these days...
+        set vs_platf=amd64
+    ) else (
+        if "%do_pgo%"=="true" (
+            echo.ERROR: Cannot cross-compile with PGO
+            echo.    32bit operating system detected, if this is incorrect,
+            echo.    make sure the ProgramFiles(x86^) environment variable is set
+            exit /b 1
+        )
+        set vs_platf=x86_amd64
+    )
+)
 
 rem Setup the environment
 call "%dir%env.bat" %vs_platf% >nul
 
-if "%kill%"=="true" (
-    msbuild /v:m /nologo /target:KillPython "%dir%\pythoncore.vcxproj" /p:Configuration=%conf% /p:Platform=%platf% /p:KillPython=true
+if "%kill%"=="true" call :Kill
+
+if "%do_pgo%"=="true" (
+    set conf=PGInstrument
+    call :Build
+    del /s "%dir%\*.pgc"
+    del /s "%dir%\..\Lib\*.pyc"
+    echo on
+    call "%dir%\..\python.bat" %pgo_job%
+    @echo off
+    call :Kill
+    set conf=PGUpdate
 )
+goto Build
 
+:Kill
+echo on
+msbuild "%dir%\pythoncore.vcxproj" /t:KillPython %verbose%^
+ /p:Configuration=%conf% /p:Platform=%platf%^
+ /p:KillPython=true
+
+ at echo off
+goto :eof
+
+:Build
 rem Call on MSBuild to do the work, echo the command.
 rem Passing %1-9 is not the preferred option, but argument parsing in
 rem batch is, shall we say, "lackluster"
@@ -98,7 +144,8 @@
  /p:UseTestMarker=%UseTestMarker%^
  %1 %2 %3 %4 %5 %6 %7 %8 %9
 
- at goto :eof
+ at echo off
+goto :eof
 
 :Version
 rem Display the current build version information
diff --git a/PCbuild/build_pgo.bat b/PCbuild/build_pgo.bat
--- a/PCbuild/build_pgo.bat
+++ b/PCbuild/build_pgo.bat
@@ -1,48 +1,6 @@
 @echo off
-rem A batch program to build PGO (Profile guided optimization) by first
-rem building instrumented binaries, then running the testsuite, and
-rem finally building the optimized code.
-rem Note, after the first instrumented run, one can just keep on
-rem building the PGUpdate configuration while developing.
+echo.DeprecationWarning:
+echo.    This script is deprecated, use `build.bat --pgo` instead.
+echo.
 
-setlocal
-set platf=Win32
-set parallel=/m
-set dir=%~dp0
-
-rem use the performance testsuite.  This is quick and simple
-set job1="%dir%..\tools\pybench\pybench.py" -n 1 -C 1 --with-gc
-set path1="%dir%..\tools\pybench"
-
-rem or the whole testsuite for more thorough testing
-set job2="%dir%..\lib\test\regrtest.py"
-set path2="%dir%..\lib"
-
-set job=%job1%
-set clrpath=%path1%
-
-:CheckOpts
-if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts
-if "%1"=="-2" (set job=%job2%) & (set clrpath=%path2%) & shift & goto CheckOpts
-if "%1"=="-M" (set parallel=) & shift & goto CheckOpts
-
-
-rem We cannot cross compile PGO builds, as the optimization needs to be run natively
-set vs_platf=x86
-set PGO=%dir%win32-pgo
-
-if "%platf%"=="x64" (set vs_platf=amd64) & (set PGO=%dir%amd64-pgo)
-rem Setup the environment
-call "%dir%env.bat" %vs_platf%
-
-
-rem build the instrumented version
-msbuild "%dir%pcbuild.proj" %parallel% /t:Build /p:Configuration=PGInstrument /p:Platform=%platf% %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-rem remove .pyc files, .pgc files and execute the job
-"%PGO%\python.exe" "%dir%rmpyc.py" %clrpath%
-del "%PGO%\*.pgc"
-"%PGO%\python.exe" %job%
-
-rem build optimized version
-msbuild "%dir%pcbuild.proj" %parallel% /t:Build /p:Configuration=PGUpdate /p:Platform=%platf% %1 %2 %3 %4 %5 %6 %7 %8 %9
+call "%~dp0build.bat" --pgo %*

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list