blob: aac3f7f6766db71824ef718ee976910f8347a7d7 [file] [log] [blame]
Zachary Ware4c9c8482015-04-13 11:59:54 -05001@echo off
Zachary Ware67323432015-09-02 13:21:19 -05002goto Run
3:Usage
4echo.%~nx0 [flags and arguments] [quoted MSBuild options]
5echo.
6echo.Build CPython from the command line. Requires the appropriate
7echo.version(s) of Microsoft Visual Studio to be installed (see readme.txt).
8echo.Also requires Subversion (svn.exe) to be on PATH if the '-e' flag is
9echo.given.
10echo.
11echo.After the flags recognized by this script, up to 9 arguments to be passed
12echo.directly to MSBuild may be passed. If the argument contains an '=', the
Charles8619c542017-05-13 06:23:15 +070013echo.entire argument must be quoted (e.g. `%~nx0 "/p:PlatformToolset=v100"`).
14echo.Alternatively you can put extra flags for MSBuild in a file named
15echo.`msbuild.rsp` in the `PCbuild` directory, one flag per line. This file
16echo.will be picked automatically by MSBuild. Flags put in this file does not
17echo.need to be quoted. You can still use environment variables inside the
18echo.response file.
Zachary Ware67323432015-09-02 13:21:19 -050019echo.
20echo.Available flags:
21echo. -h Display this help message
22echo. -V Display version information for the current build
23echo. -r Target Rebuild instead of Build
24echo. -d Set the configuration to Debug
25echo. -e Build external libraries fetched by get_externals.bat
Zachary Wareb27f3c32015-09-03 23:43:54 -050026echo. Extension modules that depend on external libraries will not attempt
27echo. to build if this flag is not present
Zachary Ware67323432015-09-02 13:21:19 -050028echo. -m Enable parallel build (enabled by default)
29echo. -M Disable parallel build
30echo. -v Increased output messages
31echo. -k Attempt to kill any running Pythons before building (usually done
32echo. automatically by the pythoncore project)
Zachary Warebed30c32016-01-12 01:26:50 -060033echo. --pgo Build with Profile-Guided Optimization. This flag
34echo. overrides -c and -d
35echo. --test-marker Enable the test marker within the build.
Zachary Ware67323432015-09-02 13:21:19 -050036echo.
Zachary Wareb27f3c32015-09-03 23:43:54 -050037echo.Available flags to avoid building certain modules.
38echo.These flags have no effect if '-e' is not given:
39echo. --no-ssl Do not attempt to build _ssl
40echo. --no-tkinter Do not attempt to build Tkinter
41echo.
Zachary Ware67323432015-09-02 13:21:19 -050042echo.Available arguments:
43echo. -c Release ^| Debug ^| PGInstrument ^| PGUpdate
44echo. Set the configuration (default: Release)
45echo. -p x64 ^| Win32
46echo. Set the platform (default: Win32)
47echo. -t Build ^| Rebuild ^| Clean ^| CleanAll
48echo. Set the target manually
Zachary Warebed30c32016-01-12 01:26:50 -060049echo. --pgo-job The job to use for PGO training; implies --pgo
50echo. (default: "-m test --pgo")
Zachary Ware67323432015-09-02 13:21:19 -050051exit /b 127
Zachary Ware4c9c8482015-04-13 11:59:54 -050052
Zachary Ware67323432015-09-02 13:21:19 -050053:Run
Zachary Ware4c9c8482015-04-13 11:59:54 -050054setlocal
55set platf=Win32
Zachary Ware774ac372015-04-13 12:11:40 -050056set vs_platf=x86
Zachary Ware4c9c8482015-04-13 11:59:54 -050057set conf=Release
Zachary Ware774ac372015-04-13 12:11:40 -050058set target=Build
Zachary Ware4c9c8482015-04-13 11:59:54 -050059set dir=%~dp0
Zachary Ware774ac372015-04-13 12:11:40 -050060set parallel=/m
61set verbose=/nologo /v:m
Zachary Ware6250df82015-06-09 23:16:52 -050062set kill=
Zachary Warebed30c32016-01-12 01:26:50 -060063set do_pgo=
64set pgo_job=-m test --pgo
65set on_64_bit=true
66
67rem This may not be 100% accurate, but close enough.
68if "%ProgramFiles(x86)%"=="" (set on_64_bit=false)
Zachary Ware4c9c8482015-04-13 11:59:54 -050069
70:CheckOpts
Zachary Ware67323432015-09-02 13:21:19 -050071if "%~1"=="-h" goto Usage
Steve Dowere1f68052015-07-20 21:34:45 -070072if "%~1"=="-c" (set conf=%2) & shift & shift & goto CheckOpts
73if "%~1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts
74if "%~1"=="-r" (set target=Rebuild) & shift & goto CheckOpts
75if "%~1"=="-t" (set target=%2) & shift & shift & goto CheckOpts
76if "%~1"=="-d" (set conf=Debug) & shift & goto CheckOpts
Steve Dowere1f68052015-07-20 21:34:45 -070077if "%~1"=="-m" (set parallel=/m) & shift & goto CheckOpts
78if "%~1"=="-M" (set parallel=) & shift & goto CheckOpts
79if "%~1"=="-v" (set verbose=/v:n) & shift & goto CheckOpts
80if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts
Zachary Warebed30c32016-01-12 01:26:50 -060081if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts
82if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts
Steve Dower940f6a82015-10-31 12:17:11 -070083if "%~1"=="--test-marker" (set UseTestMarker=true) & shift & goto CheckOpts
Steve Dowere1f68052015-07-20 21:34:45 -070084if "%~1"=="-V" shift & goto Version
Zachary Wareb27f3c32015-09-03 23:43:54 -050085rem These use the actual property names used by MSBuild. We could just let
86rem them in through the environment, but we specify them on the command line
87rem anyway for visibility so set defaults after this
Zachary Warea6deff22015-09-04 01:10:23 -050088if "%~1"=="-e" (set IncludeExternals=true) & shift & goto CheckOpts
Zachary Wareb27f3c32015-09-03 23:43:54 -050089if "%~1"=="--no-ssl" (set IncludeSSL=false) & shift & goto CheckOpts
90if "%~1"=="--no-tkinter" (set IncludeTkinter=false) & shift & goto CheckOpts
91
92if "%IncludeExternals%"=="" set IncludeExternals=false
93if "%IncludeSSL%"=="" set IncludeSSL=true
94if "%IncludeTkinter%"=="" set IncludeTkinter=true
Zachary Ware4c9c8482015-04-13 11:59:54 -050095
Zachary Warea6deff22015-09-04 01:10:23 -050096if "%IncludeExternals%"=="true" call "%dir%get_externals.bat"
97
Zachary Warebed30c32016-01-12 01:26:50 -060098if "%platf%"=="x64" (
99 if "%on_64_bit%"=="true" (
100 rem This ought to always be correct these days...
101 set vs_platf=amd64
102 ) else (
103 if "%do_pgo%"=="true" (
104 echo.ERROR: Cannot cross-compile with PGO
105 echo. 32bit operating system detected, if this is incorrect,
106 echo. make sure the ProgramFiles(x86^) environment variable is set
107 exit /b 1
108 )
109 set vs_platf=x86_amd64
110 )
111)
Zachary Ware774ac372015-04-13 12:11:40 -0500112
Steve Dowera0c07d22017-03-03 21:20:37 -0800113if not exist "%GIT%" where git > "%TEMP%\git.loc" 2> nul && set /P GIT= < "%TEMP%\git.loc" & del "%TEMP%\git.loc"
114if exist "%GIT%" set GITProperty=/p:GIT="%GIT%"
115if not exist "%GIT%" echo Cannot find Git on PATH & set GITProperty=
Steve Dower190dbd92016-12-03 11:18:53 -0800116
Zachary Ware774ac372015-04-13 12:11:40 -0500117rem Setup the environment
118call "%dir%env.bat" %vs_platf% >nul
119
Zachary Warebed30c32016-01-12 01:26:50 -0600120if "%kill%"=="true" call :Kill
Zachary Ware6250df82015-06-09 23:16:52 -0500121
Zachary Warebed30c32016-01-12 01:26:50 -0600122if "%do_pgo%"=="true" (
123 set conf=PGInstrument
Charles291557e2017-05-10 04:58:48 +0700124 call :Build %1 %2 %3 %4 %5 %6 %7 %8 %9
Zachary Warebed30c32016-01-12 01:26:50 -0600125 del /s "%dir%\*.pgc"
126 del /s "%dir%\..\Lib\*.pyc"
127 echo on
128 call "%dir%\..\python.bat" %pgo_job%
129 @echo off
130 call :Kill
131 set conf=PGUpdate
Steve Dower4468bed2016-11-14 16:13:56 -0800132 set target=Build
Zachary Warebed30c32016-01-12 01:26:50 -0600133)
134goto Build
Zachary Warebed30c32016-01-12 01:26:50 -0600135:Kill
136echo on
137msbuild "%dir%\pythoncore.vcxproj" /t:KillPython %verbose%^
138 /p:Configuration=%conf% /p:Platform=%platf%^
139 /p:KillPython=true
140
141@echo off
142goto :eof
143
144:Build
Zachary Ware774ac372015-04-13 12:11:40 -0500145rem Call on MSBuild to do the work, echo the command.
146rem Passing %1-9 is not the preferred option, but argument parsing in
147rem batch is, shall we say, "lackluster"
148echo on
Zachary Wareb27f3c32015-09-03 23:43:54 -0500149msbuild "%dir%pcbuild.proj" /t:%target% %parallel% %verbose%^
150 /p:Configuration=%conf% /p:Platform=%platf%^
151 /p:IncludeExternals=%IncludeExternals%^
152 /p:IncludeSSL=%IncludeSSL% /p:IncludeTkinter=%IncludeTkinter%^
Steve Dowera0c07d22017-03-03 21:20:37 -0800153 /p:UseTestMarker=%UseTestMarker% %GITProperty%^
Zachary Wareb27f3c32015-09-03 23:43:54 -0500154 %1 %2 %3 %4 %5 %6 %7 %8 %9
Steve Dower49437492015-07-08 20:18:44 -0700155
Zachary Warebed30c32016-01-12 01:26:50 -0600156@echo off
157goto :eof
Steve Dower49437492015-07-08 20:18:44 -0700158
159:Version
160rem Display the current build version information
161msbuild "%dir%python.props" /t:ShowVersionInfo /v:m /nologo %1 %2 %3 %4 %5 %6 %7 %8 %9