blob: 883e3d360a8152b8aafad2351808d6983beffe2f [file] [log] [blame]
Tim Golden7d052362013-10-25 08:58:16 +01001Building Python using Microsoft Visual C++
2------------------------------------------
Christian Heimes57dddfb2008-01-02 18:30:52 +00003
Tim Golden7d052362013-10-25 08:58:16 +01004This directory is used to build CPython for Microsoft Windows NT version
55.1 or higher (Windows XP, Windows Server 2003, or later) on 32 and 64
6bit platforms. Using this directory requires an installation of
7Microsoft Visual C++ 2010 (MSVC 10.0) of any edition. The specific
8requirements are as follows:
9Visual C++ 2010 Express Edition
10 Required for building 32-bit Debug and Release configuration builds.
11 This edition does not support "solution folders", which pcbuild.sln
12 uses; this will not prevent building.
13Visual Studio 2010 Standard Edition
14 Required for building 64-bit Debug and Release configuration builds
15Visual Studio 2010 Professional Edition
16 Required for building Release configuration builds that make use of
17 Profile Guided Optimization (PGO), on either platform. The official
18 Python releases are built with Professional Edition using PGO.
Trent Nelson52037272008-04-02 15:06:49 +000019
Tim Golden7d052362013-10-25 08:58:16 +010020All you need to do to build is open the solution "pcbuild.sln" in Visual
21Studio, select the desired combination of configuration and platform,
22then build with "Build Solution" or the F7 keyboard shortcut. You can
23also build from the command line using the "build.bat" script in this
24directory. The solution is configured to build the projects in the
25correct order.
Guido van Rossum15b239f1998-05-26 14:16:23 +000026
Tim Golden7d052362013-10-25 08:58:16 +010027The solution currently supports two platforms. The Win32 platform is
28used to build standard x86-compatible 32-bit binaries, output into this
29directory. The x64 platform is used for building 64-bit AMD64 (aka
30x86_64 or EM64T) binaries, output into the amd64 sub-directory which
31will be created if it doesn't already exist. The Itanium (IA-64)
32platform is no longer supported. See the "Building for AMD64" section
33below for more information about 64-bit builds.
Guido van Rossum15b239f1998-05-26 14:16:23 +000034
Tim Golden7d052362013-10-25 08:58:16 +010035Four configuration options are supported by the solution:
36Debug
37 Used to build Python with extra debugging capabilities, equivalent
38 to using ./configure --with-pydebug on UNIX. All binaries built
39 using this configuration have "_d" added to their name:
40 python34_d.dll, python_d.exe, parser_d.pyd, and so on. Both the
41 build and rt (run test) batch files in this directory accept a -d
42 option for debug builds. If you are building Python to help with
43 development of CPython, you will most likely use this configuration.
44PGInstrument, PGUpdate
45 Used to build Python in Release configuration using PGO, which
46 requires Professional Edition of Visual Studio. See the "Profile
47 Guided Optimization" section below for more information. Build
48 output from each of these configurations lands in its own
49 sub-directory of this directory. The official Python releases are
50 built using these configurations.
51Release
52 Used to build Python as it is meant to be used in production
53 settings, though without PGO.
Guido van Rossum15b239f1998-05-26 14:16:23 +000054
Christian Heimes5b5e81c2007-12-31 16:14:33 +000055
Christian Heimes57dddfb2008-01-02 18:30:52 +000056Legacy support
57--------------
58
Tim Golden7d052362013-10-25 08:58:16 +010059You can find build directories for older versions of Visual Studio and
60Visual C++ in the PC directory. The legacy build directories are no
61longer actively maintained and may not work out of the box.
Christian Heimes57dddfb2008-01-02 18:30:52 +000062
Tim Golden7d052362013-10-25 08:58:16 +010063Currently, the only legacy build directory is PC\VS9.0, for Visual
64Studio 2008 (9.0).
Christian Heimes57dddfb2008-01-02 18:30:52 +000065
66
Tim Golden7d052362013-10-25 08:58:16 +010067C Runtime
Christian Heimes57dddfb2008-01-02 18:30:52 +000068---------
69
Tim Golden7d052362013-10-25 08:58:16 +010070Visual Studio 2010 uses version 10 of the C runtime (MSVCRT10). The
71executables no longer use the "Side by Side" assemblies used in previous
72versions of the compiler. This simplifies distribution of applications.
Christian Heimes57dddfb2008-01-02 18:30:52 +000073
Tim Golden7d052362013-10-25 08:58:16 +010074The run time libraries are available under the VC/Redist folder of your
75Visual Studio distribution. For more info, see the Readme in the
76VC/Redist folder.
Guido van Rossume79cf321998-07-07 22:35:03 +000077
Tim Golden7d052362013-10-25 08:58:16 +010078
79Sub-Projects
80------------
81
82The CPython project is split up into several smaller sub-projects which
83are managed by the pcbuild.sln solution file. Each sub-project is
84represented by a .vcxproj and a .vcxproj.filters file starting with the
85name of the sub-project. These sub-projects fall into a few general
86categories:
87
88The following sub-projects represent the bare minimum required to build
89a functioning CPython interpreter. If nothing else builds but these,
90you'll have a very limited but usable python.exe:
Tim Peters97c96402001-01-17 23:23:13 +000091pythoncore
Tim Peters4b5fb072000-07-01 00:03:43 +000092 .dll and .lib
93python
94 .exe
Tim Golden7d052362013-10-25 08:58:16 +010095kill_python
96 kill_python.exe, a small program designed to kill any instances of
97 python(_d).exe that are running and live in the build output
98 directory; this is meant to avoid build issues due to locked files
99make_buildinfo, make_versioninfo
100 helpers to provide necessary information to the build process
101
102These sub-projects provide extra executables that are useful for running
103CPython in different ways:
Tim Peters4b5fb072000-07-01 00:03:43 +0000104pythonw
Tim Golden7d052362013-10-25 08:58:16 +0100105 pythonw.exe, a variant of python.exe that doesn't open a Command
106 Prompt window
107pylauncher
108 py.exe, the Python Launcher for Windows, see
109 http://docs.python.org/3/using/windows.html#launcher
110pywlauncher
111 pyw.exe, a variant of py.exe that doesn't open a Command Prompt
112 window
113
114These are miscellaneous sub-projects that don't really fit the other
115categories. By default, these projects do not build in Debug
116configuration:
117_freeze_importlib
118 _freeze_importlib.exe, used to regenerate Python\importlib.h after
119 changes have been made to Lib\importlib\_bootstrap.py
120bdist_wininst
121 ..\Lib\distutils\command\wininst-10.0[-amd64].exe, the base
122 executable used by the distutils bdist_wininst command
123python3dll
124 python3.dll, the PEP 384 Stable ABI dll
125xxlimited
126 builds an example module that makes use of the PEP 384 Stable ABI,
127 see Modules\xxlimited.c
128
129The following sub-projects are for individual modules of the standard
130library which are implemented in C; each one builds a DLL (renamed to
131.pyd) of the same name as the project:
132_ctypes
133_ctypes_test
134_decimal
135_elementtree
136_hashlib
137_msi
138_multiprocessing
139_overlapped
140_sha3
Tim Peters4b5fb072000-07-01 00:03:43 +0000141_socket
Tim Petersd66595f2001-02-04 03:09:53 +0000142_testcapi
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100143_testbuffer
Tim Golden7d052362013-10-25 08:58:16 +0100144_testimportmultiple
Tim Petersb012a152002-02-13 23:56:46 +0000145pyexpat
Tim Peters4b5fb072000-07-01 00:03:43 +0000146select
Tim Peters19f52c22001-01-24 10:07:22 +0000147unicodedata
Tim Peters4b5fb072000-07-01 00:03:43 +0000148winsound
Tim Peters4b5fb072000-07-01 00:03:43 +0000149
Tim Golden7d052362013-10-25 08:58:16 +0100150The following Python-controlled sub-projects wrap external projects.
151Note that these external libraries are not necessary for a working
152interpreter, but they do implement several major features. See the
153"Getting External Sources" section below for additional information
154about getting the source for building these libraries. The sub-projects
155are:
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200156_bz2
Tim Golden7d052362013-10-25 08:58:16 +0100157 Python wrapper for version 1.0.6 of the libbzip2 compression library
158 Homepage:
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200159 http://www.bzip.org/
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200160_lzma
Tim Golden7d052362013-10-25 08:58:16 +0100161 Python wrapper for the liblzma compression library, using pre-built
162 binaries of XZ Utils version 5.0.3
163 Homepage:
164 http://tukaani.org/xz/
Mark Hammondf229f9f2002-12-03 05:47:26 +0000165_ssl
Tim Golden7d052362013-10-25 08:58:16 +0100166 Python wrapper for version 1.0.1e of the OpenSSL secure sockets
167 library, which is built by ssl.vcxproj
168 Homepage:
169 http://www.openssl.org/
Tim Peters4b5fb072000-07-01 00:03:43 +0000170
Tim Golden7d052362013-10-25 08:58:16 +0100171 Building OpenSSL requires nasm.exe (the Netwide Assembler), version
172 2.10 or newer from
173 http://www.nasm.us/
174 to be somewhere on your PATH. More recent versions of OpenSSL may
175 need a later version of NASM. If OpenSSL's self tests don't pass,
176 you should first try to update NASM and do a full rebuild of
177 OpenSSL.
Mark Hammondf229f9f2002-12-03 05:47:26 +0000178
Tim Golden7d052362013-10-25 08:58:16 +0100179 If you like to use the official sources instead of the files from
180 python.org's subversion repository, Perl is required to build the
181 necessary makefiles and assembly files. ActivePerl is available
182 from
Hirokazu Yamamoto7c3d7092010-10-28 17:57:25 +0000183 http://www.activestate.com/activeperl/
Tim Golden7d052362013-10-25 08:58:16 +0100184 The svn.python.org version contains pre-built makefiles and assembly
185 files.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000186
Tim Golden7d052362013-10-25 08:58:16 +0100187 The build process makes sure that no patented algorithms are
188 included. For now RC5, MDC2 and IDEA are excluded from the build.
189 You may have to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if
190 using official sources; the svn.python.org-hosted version is already
191 fixed.
Mark Hammondf229f9f2002-12-03 05:47:26 +0000192
Tim Golden7d052362013-10-25 08:58:16 +0100193 The ssl.vcxproj sub-project simply invokes PCbuild/build_ssl.py,
194 which locates and builds OpenSSL.
Mark Hammondf229f9f2002-12-03 05:47:26 +0000195
196 build_ssl.py attempts to catch the most common errors (such as not
197 being able to find OpenSSL sources, or not being able to find a Perl
Tim Golden7d052362013-10-25 08:58:16 +0100198 that works with OpenSSL) and give a reasonable error message. If
199 you have a problem that doesn't seem to be handled correctly (e.g.,
200 you know you have ActivePerl but we can't find it), please take a
201 peek at build_ssl.py and suggest patches. Note that build_ssl.py
Mark Hammondf229f9f2002-12-03 05:47:26 +0000202 should be able to be run directly from the command-line.
203
Tim Golden7d052362013-10-25 08:58:16 +0100204 The ssl sub-project does not have the ability to clean the OpenSSL
205 build; if you need to rebuild, you'll have to clean it by hand.
206_sqlite3
207 Wraps SQLite 3.7.12, which is itself built by sqlite3.vcxproj
208 Homepage:
209 http://www.sqlite.org/
210_tkinter
211 Wraps version 8.5.11 of the Tk windowing system.
212 Homepage:
213 http://www.tcl.tk/
Tim Peters4b5fb072000-07-01 00:03:43 +0000214
Tim Golden7d052362013-10-25 08:58:16 +0100215 Unlike the other external libraries listed above, Tk must be built
216 separately before the _tkinter module can be built. This means that
217 a pre-built Tcl/Tk installation is expected in ..\..\tcltk (tcltk64
218 for 64-bit) relative to this directory. See "Getting External
219 Sources" below for the easiest method to ensure Tcl/Tk is built.
Trent Nelson52037272008-04-02 15:06:49 +0000220
Trent Nelson52037272008-04-02 15:06:49 +0000221
Tim Golden7d052362013-10-25 08:58:16 +0100222Getting External Sources
223------------------------
224
225The last category of sub-projects listed above wrap external projects
226Python doesn't control, and as such a little more work is required in
227order to download the relevant source files for each project before they
228can be built. The buildbots must ensure that all libraries are present
229before building, so the easiest approach is to run either external.bat
230or external-amd64.bat (depending on platform) in the ..\Tools\buildbot
231directory from ..\, i.e.:
232
233 C:\python\cpython\PCbuild>cd ..
234 C:\python\cpython>Tools\buildbot\external.bat
235
236This extracts all the external sub-projects from
237 http://svn.python.org/projects/external
238via Subversion (so you'll need an svn.exe on your PATH) and places them
239in ..\.. (relative to this directory).
240
241It is also possible to download sources from each project's homepage,
242though you may have to change the names of some folders in order to make
243things work. For instance, if you were to download a version 5.0.5 of
244XZ Utils, you would need to extract the archive into ..\..\xz-5.0.3
245anyway, since that is where the solution is set to look for xz. The
246same is true for all other external projects.
247
248The external(-amd64).bat scripts will also build a debug build of
249Tcl/Tk, but there aren't any equivalent batch files for building release
250versions of Tcl/Tk currently available. If you need to build a release
251version of Tcl/Tk, just take a look at the relevant external(-amd64).bat
252file and find the two nmake lines, then call each one without the
253'DEBUG=1' parameter, i.e.:
Trent Nelson52037272008-04-02 15:06:49 +0000254
255The external-amd64.bat file contains this for tcl:
Tim Golden7d052362013-10-25 08:58:16 +0100256 nmake -f makefile.vc DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
Trent Nelson52037272008-04-02 15:06:49 +0000257
258So for a release build, you'd call it as:
Tim Golden7d052362013-10-25 08:58:16 +0100259 nmake -f makefile.vc MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
Trent Nelson52037272008-04-02 15:06:49 +0000260
Tim Golden7d052362013-10-25 08:58:16 +0100261Note that the above command is called from within ..\..\tcl-8.5.11.0\win
262(relative to this directory); don't forget to build Tk as well as Tcl!
Trent Nelson52037272008-04-02 15:06:49 +0000263
Tim Golden7d052362013-10-25 08:58:16 +0100264This will be cleaned up in the future; http://bugs.python.org/issue15968
265tracks adding a new tcltk.vcxproj file that will build Tcl/Tk and Tix
266the same way the other external projects listed above are built.
Trent Nelson52037272008-04-02 15:06:49 +0000267
Martin v. Löwis13e50fe2004-07-20 14:37:48 +0000268
Martin v. Löwis856bf9a2006-02-14 20:42:55 +0000269Building for AMD64
270------------------
271
Tim Golden7d052362013-10-25 08:58:16 +0100272The build process for AMD64 / x64 is very similar to standard builds,
273you just have to set x64 as platform. In addition, the HOST_PYTHON
274environment variable must point to a Python interpreter (at least 2.4),
275to support cross-compilation from Win32. Note that Visual Studio
276requires either Standard Edition or better, or Express Edition with the
277Windows SDK 64-bit compilers to be available in order to build 64-bit
278binaries.
Martin v. Löwis856bf9a2006-02-14 20:42:55 +0000279
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000280
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000281Profile Guided Optimization
282---------------------------
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000283
Christian Heimes25bb7832008-01-11 16:17:00 +0000284The solution has two configurations for PGO. The PGInstrument
Tim Golden7d052362013-10-25 08:58:16 +0100285configuration must be built first. The PGInstrument binaries are linked
286against a profiling library and contain extra debug information. The
287PGUpdate configuration takes the profiling data and generates optimized
288binaries.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000289
Tim Golden7d052362013-10-25 08:58:16 +0100290The build_pgo.bat script automates the creation of optimized binaries.
291It creates the PGI files, runs the unit test suite or PyBench with the
292PGI python, and finally creates the optimized files.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000293
Tim Golden7d052362013-10-25 08:58:16 +0100294See
295 http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.100).aspx
296for more on this topic.
297
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000298
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000299Static library
300--------------
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000301
Tim Golden7d052362013-10-25 08:58:16 +0100302The solution has no configuration for static libraries. However it is
303easy to build a static library instead of a DLL. You simply have to set
304the "Configuration Type" to "Static Library (.lib)" and alter the
305preprocessor macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may
306also have to change the "Runtime Library" from "Multi-threaded DLL
307(/MD)" to "Multi-threaded (/MT)".
308
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000309
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000310Visual Studio properties
311------------------------
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000312
Tim Golden7d052362013-10-25 08:58:16 +0100313The PCbuild solution makes heavy use of Visual Studio property files
314(*.props). The properties can be viewed and altered in the Property
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000315Manager (View -> Other Windows -> Property Manager).
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000316
Tim Golden7d052362013-10-25 08:58:16 +0100317The property files used are (+-- = "also imports"):
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000318 * debug (debug macro: _DEBUG)
319 * pginstrument (PGO)
320 * pgupdate (PGO)
321 +-- pginstrument
322 * pyd (python extension, release build)
323 +-- release
324 +-- pyproject
325 * pyd_d (python extension, debug build)
326 +-- debug
327 +-- pyproject
328 * pyproject (base settings for all projects, user macros like PyDllName)
329 * release (release macro: NDEBUG)
Tim Golden7d052362013-10-25 08:58:16 +0100330 * sqlite3 (used only by sqlite3.vcxproj)
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000331 * x64 (AMD64 / x64 platform specific settings)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000332
Tim Golden7d052362013-10-25 08:58:16 +0100333The pyproject property file defines _WIN32 and x64 defines _WIN64 and
334_M_X64 although the macros are set by the compiler, too. The GUI doesn't
335always know about the macros and confuse the user with false
336information.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000337
Tim Golden7d052362013-10-25 08:58:16 +0100338
339Your Own Extension DLLs
Tim Peters4b5fb072000-07-01 00:03:43 +0000340-----------------------
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000341
Tim Golden7d052362013-10-25 08:58:16 +0100342If you want to create your own extension module DLL (.pyd), there's an
343example with easy-to-follow instructions in ..\PC\example\; read the
344file readme.txt there first.