blob: 9ecf911b400ba2ac0713f7c28b037db80f7c958f [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:
Zachary Ware5f3e3c32014-03-19 14:46:25 -05009
Tim Golden7d052362013-10-25 08:58:16 +010010Visual C++ 2010 Express Edition
11 Required for building 32-bit Debug and Release configuration builds.
12 This edition does not support "solution folders", which pcbuild.sln
13 uses; this will not prevent building.
Tim Golden7d052362013-10-25 08:58:16 +010014Visual Studio 2010 Professional Edition
Zachary Ware5f3e3c32014-03-19 14:46:25 -050015 Required for building 64-bit Debug and Release configuration builds
16Visual Studio 2010 Premium Edition
Tim Golden7d052362013-10-25 08:58:16 +010017 Required for building Release configuration builds that make use of
Zachary Ware5f3e3c32014-03-19 14:46:25 -050018 Profile Guided Optimization (PGO), on either platform.
19
20The official Python releases are built with PGO using Visual Studio 2010
21Ultimate Edition.
Trent Nelson52037272008-04-02 15:06:49 +000022
Tim Golden7d052362013-10-25 08:58:16 +010023All you need to do to build is open the solution "pcbuild.sln" in Visual
24Studio, select the desired combination of configuration and platform,
25then build with "Build Solution" or the F7 keyboard shortcut. You can
26also build from the command line using the "build.bat" script in this
27directory. The solution is configured to build the projects in the
28correct order.
Guido van Rossum15b239f1998-05-26 14:16:23 +000029
Tim Golden7d052362013-10-25 08:58:16 +010030The solution currently supports two platforms. The Win32 platform is
31used to build standard x86-compatible 32-bit binaries, output into this
32directory. The x64 platform is used for building 64-bit AMD64 (aka
33x86_64 or EM64T) binaries, output into the amd64 sub-directory which
34will be created if it doesn't already exist. The Itanium (IA-64)
35platform is no longer supported. See the "Building for AMD64" section
36below for more information about 64-bit builds.
Guido van Rossum15b239f1998-05-26 14:16:23 +000037
Tim Golden7d052362013-10-25 08:58:16 +010038Four configuration options are supported by the solution:
39Debug
40 Used to build Python with extra debugging capabilities, equivalent
41 to using ./configure --with-pydebug on UNIX. All binaries built
42 using this configuration have "_d" added to their name:
43 python34_d.dll, python_d.exe, parser_d.pyd, and so on. Both the
44 build and rt (run test) batch files in this directory accept a -d
45 option for debug builds. If you are building Python to help with
46 development of CPython, you will most likely use this configuration.
47PGInstrument, PGUpdate
48 Used to build Python in Release configuration using PGO, which
49 requires Professional Edition of Visual Studio. See the "Profile
50 Guided Optimization" section below for more information. Build
51 output from each of these configurations lands in its own
52 sub-directory of this directory. The official Python releases are
53 built using these configurations.
54Release
55 Used to build Python as it is meant to be used in production
56 settings, though without PGO.
Guido van Rossum15b239f1998-05-26 14:16:23 +000057
Christian Heimes5b5e81c2007-12-31 16:14:33 +000058
Christian Heimes57dddfb2008-01-02 18:30:52 +000059Legacy support
60--------------
61
Tim Golden7d052362013-10-25 08:58:16 +010062You can find build directories for older versions of Visual Studio and
63Visual C++ in the PC directory. The legacy build directories are no
64longer actively maintained and may not work out of the box.
Christian Heimes57dddfb2008-01-02 18:30:52 +000065
Tim Golden7d052362013-10-25 08:58:16 +010066Currently, the only legacy build directory is PC\VS9.0, for Visual
67Studio 2008 (9.0).
Christian Heimes57dddfb2008-01-02 18:30:52 +000068
69
Tim Golden7d052362013-10-25 08:58:16 +010070C Runtime
Christian Heimes57dddfb2008-01-02 18:30:52 +000071---------
72
Tim Golden7d052362013-10-25 08:58:16 +010073Visual Studio 2010 uses version 10 of the C runtime (MSVCRT10). The
74executables no longer use the "Side by Side" assemblies used in previous
75versions of the compiler. This simplifies distribution of applications.
Christian Heimes57dddfb2008-01-02 18:30:52 +000076
Tim Golden7d052362013-10-25 08:58:16 +010077The run time libraries are available under the VC/Redist folder of your
78Visual Studio distribution. For more info, see the Readme in the
79VC/Redist folder.
Guido van Rossume79cf321998-07-07 22:35:03 +000080
Tim Golden7d052362013-10-25 08:58:16 +010081
82Sub-Projects
83------------
84
85The CPython project is split up into several smaller sub-projects which
86are managed by the pcbuild.sln solution file. Each sub-project is
87represented by a .vcxproj and a .vcxproj.filters file starting with the
88name of the sub-project. These sub-projects fall into a few general
89categories:
90
91The following sub-projects represent the bare minimum required to build
92a functioning CPython interpreter. If nothing else builds but these,
93you'll have a very limited but usable python.exe:
Tim Peters97c96402001-01-17 23:23:13 +000094pythoncore
Tim Peters4b5fb072000-07-01 00:03:43 +000095 .dll and .lib
96python
97 .exe
Tim Golden7d052362013-10-25 08:58:16 +010098kill_python
99 kill_python.exe, a small program designed to kill any instances of
100 python(_d).exe that are running and live in the build output
101 directory; this is meant to avoid build issues due to locked files
102make_buildinfo, make_versioninfo
103 helpers to provide necessary information to the build process
104
105These sub-projects provide extra executables that are useful for running
106CPython in different ways:
Tim Peters4b5fb072000-07-01 00:03:43 +0000107pythonw
Tim Golden7d052362013-10-25 08:58:16 +0100108 pythonw.exe, a variant of python.exe that doesn't open a Command
109 Prompt window
110pylauncher
111 py.exe, the Python Launcher for Windows, see
112 http://docs.python.org/3/using/windows.html#launcher
113pywlauncher
114 pyw.exe, a variant of py.exe that doesn't open a Command Prompt
115 window
Zachary Waree0881f42013-11-05 21:55:46 -0600116_testembed
117 _testembed.exe, a small program that embeds Python for testing
118 purposes, used by test_capi.py
Tim Golden7d052362013-10-25 08:58:16 +0100119
120These are miscellaneous sub-projects that don't really fit the other
121categories. By default, these projects do not build in Debug
122configuration:
123_freeze_importlib
124 _freeze_importlib.exe, used to regenerate Python\importlib.h after
125 changes have been made to Lib\importlib\_bootstrap.py
126bdist_wininst
127 ..\Lib\distutils\command\wininst-10.0[-amd64].exe, the base
128 executable used by the distutils bdist_wininst command
129python3dll
130 python3.dll, the PEP 384 Stable ABI dll
131xxlimited
132 builds an example module that makes use of the PEP 384 Stable ABI,
133 see Modules\xxlimited.c
134
135The following sub-projects are for individual modules of the standard
136library which are implemented in C; each one builds a DLL (renamed to
137.pyd) of the same name as the project:
138_ctypes
139_ctypes_test
140_decimal
141_elementtree
142_hashlib
143_msi
144_multiprocessing
145_overlapped
Tim Peters4b5fb072000-07-01 00:03:43 +0000146_socket
Tim Petersd66595f2001-02-04 03:09:53 +0000147_testcapi
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100148_testbuffer
Tim Golden7d052362013-10-25 08:58:16 +0100149_testimportmultiple
Tim Petersb012a152002-02-13 23:56:46 +0000150pyexpat
Tim Peters4b5fb072000-07-01 00:03:43 +0000151select
Tim Peters19f52c22001-01-24 10:07:22 +0000152unicodedata
Tim Peters4b5fb072000-07-01 00:03:43 +0000153winsound
Tim Peters4b5fb072000-07-01 00:03:43 +0000154
Tim Golden7d052362013-10-25 08:58:16 +0100155The following Python-controlled sub-projects wrap external projects.
156Note that these external libraries are not necessary for a working
157interpreter, but they do implement several major features. See the
158"Getting External Sources" section below for additional information
159about getting the source for building these libraries. The sub-projects
160are:
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200161_bz2
Tim Golden7d052362013-10-25 08:58:16 +0100162 Python wrapper for version 1.0.6 of the libbzip2 compression library
163 Homepage:
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200164 http://www.bzip.org/
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200165_lzma
Tim Golden7d052362013-10-25 08:58:16 +0100166 Python wrapper for the liblzma compression library, using pre-built
Martin v. Löwisbaacf4d2013-11-22 19:13:51 +0100167 binaries of XZ Utils version 5.0.5
Tim Golden7d052362013-10-25 08:58:16 +0100168 Homepage:
169 http://tukaani.org/xz/
Mark Hammondf229f9f2002-12-03 05:47:26 +0000170_ssl
Tim Golden7d052362013-10-25 08:58:16 +0100171 Python wrapper for version 1.0.1e of the OpenSSL secure sockets
172 library, which is built by ssl.vcxproj
173 Homepage:
174 http://www.openssl.org/
Tim Peters4b5fb072000-07-01 00:03:43 +0000175
Tim Golden7d052362013-10-25 08:58:16 +0100176 Building OpenSSL requires nasm.exe (the Netwide Assembler), version
177 2.10 or newer from
178 http://www.nasm.us/
179 to be somewhere on your PATH. More recent versions of OpenSSL may
180 need a later version of NASM. If OpenSSL's self tests don't pass,
181 you should first try to update NASM and do a full rebuild of
182 OpenSSL.
Mark Hammondf229f9f2002-12-03 05:47:26 +0000183
Tim Golden7d052362013-10-25 08:58:16 +0100184 If you like to use the official sources instead of the files from
185 python.org's subversion repository, Perl is required to build the
186 necessary makefiles and assembly files. ActivePerl is available
187 from
Hirokazu Yamamoto7c3d7092010-10-28 17:57:25 +0000188 http://www.activestate.com/activeperl/
Tim Golden7d052362013-10-25 08:58:16 +0100189 The svn.python.org version contains pre-built makefiles and assembly
190 files.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000191
Tim Golden7d052362013-10-25 08:58:16 +0100192 The build process makes sure that no patented algorithms are
193 included. For now RC5, MDC2 and IDEA are excluded from the build.
194 You may have to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if
195 using official sources; the svn.python.org-hosted version is already
196 fixed.
Mark Hammondf229f9f2002-12-03 05:47:26 +0000197
Tim Golden7d052362013-10-25 08:58:16 +0100198 The ssl.vcxproj sub-project simply invokes PCbuild/build_ssl.py,
199 which locates and builds OpenSSL.
Mark Hammondf229f9f2002-12-03 05:47:26 +0000200
201 build_ssl.py attempts to catch the most common errors (such as not
202 being able to find OpenSSL sources, or not being able to find a Perl
Tim Golden7d052362013-10-25 08:58:16 +0100203 that works with OpenSSL) and give a reasonable error message. If
204 you have a problem that doesn't seem to be handled correctly (e.g.,
205 you know you have ActivePerl but we can't find it), please take a
206 peek at build_ssl.py and suggest patches. Note that build_ssl.py
Mark Hammondf229f9f2002-12-03 05:47:26 +0000207 should be able to be run directly from the command-line.
208
Tim Golden7d052362013-10-25 08:58:16 +0100209 The ssl sub-project does not have the ability to clean the OpenSSL
210 build; if you need to rebuild, you'll have to clean it by hand.
211_sqlite3
Martin v. Löwisa6630692014-03-02 19:42:50 +0100212 Wraps SQLite 3.8.3.1, which is itself built by sqlite3.vcxproj
Tim Golden7d052362013-10-25 08:58:16 +0100213 Homepage:
214 http://www.sqlite.org/
215_tkinter
Martin v. Löwis8d0d3692013-11-23 23:05:27 +0100216 Wraps version 8.6.1 of the Tk windowing system.
Tim Golden7d052362013-10-25 08:58:16 +0100217 Homepage:
218 http://www.tcl.tk/
Tim Peters4b5fb072000-07-01 00:03:43 +0000219
Tim Golden7d052362013-10-25 08:58:16 +0100220 Unlike the other external libraries listed above, Tk must be built
221 separately before the _tkinter module can be built. This means that
222 a pre-built Tcl/Tk installation is expected in ..\..\tcltk (tcltk64
223 for 64-bit) relative to this directory. See "Getting External
224 Sources" below for the easiest method to ensure Tcl/Tk is built.
Trent Nelson52037272008-04-02 15:06:49 +0000225
Trent Nelson52037272008-04-02 15:06:49 +0000226
Tim Golden7d052362013-10-25 08:58:16 +0100227Getting External Sources
228------------------------
229
230The last category of sub-projects listed above wrap external projects
231Python doesn't control, and as such a little more work is required in
232order to download the relevant source files for each project before they
233can be built. The buildbots must ensure that all libraries are present
234before building, so the easiest approach is to run either external.bat
235or external-amd64.bat (depending on platform) in the ..\Tools\buildbot
236directory from ..\, i.e.:
237
238 C:\python\cpython\PCbuild>cd ..
239 C:\python\cpython>Tools\buildbot\external.bat
240
241This extracts all the external sub-projects from
242 http://svn.python.org/projects/external
243via Subversion (so you'll need an svn.exe on your PATH) and places them
244in ..\.. (relative to this directory).
245
246It is also possible to download sources from each project's homepage,
247though you may have to change the names of some folders in order to make
Martin v. Löwisbaacf4d2013-11-22 19:13:51 +0100248things work. For instance, if you were to download a version 5.0.7 of
249XZ Utils, you would need to extract the archive into ..\..\xz-5.0.5
Tim Golden7d052362013-10-25 08:58:16 +0100250anyway, since that is where the solution is set to look for xz. The
251same is true for all other external projects.
252
253The external(-amd64).bat scripts will also build a debug build of
254Tcl/Tk, but there aren't any equivalent batch files for building release
255versions of Tcl/Tk currently available. If you need to build a release
256version of Tcl/Tk, just take a look at the relevant external(-amd64).bat
257file and find the two nmake lines, then call each one without the
258'DEBUG=1' parameter, i.e.:
Trent Nelson52037272008-04-02 15:06:49 +0000259
260The external-amd64.bat file contains this for tcl:
Tim Golden7d052362013-10-25 08:58:16 +0100261 nmake -f makefile.vc DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
Trent Nelson52037272008-04-02 15:06:49 +0000262
263So for a release build, you'd call it as:
Tim Golden7d052362013-10-25 08:58:16 +0100264 nmake -f makefile.vc MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
Trent Nelson52037272008-04-02 15:06:49 +0000265
Martin v. Löwis8d0d3692013-11-23 23:05:27 +0100266Note that the above command is called from within ..\..\tcl-8.6.1.0\win
Tim Golden7d052362013-10-25 08:58:16 +0100267(relative to this directory); don't forget to build Tk as well as Tcl!
Trent Nelson52037272008-04-02 15:06:49 +0000268
Tim Golden7d052362013-10-25 08:58:16 +0100269This will be cleaned up in the future; http://bugs.python.org/issue15968
270tracks adding a new tcltk.vcxproj file that will build Tcl/Tk and Tix
271the same way the other external projects listed above are built.
Trent Nelson52037272008-04-02 15:06:49 +0000272
Martin v. Löwis13e50fe2004-07-20 14:37:48 +0000273
Martin v. Löwis856bf9a2006-02-14 20:42:55 +0000274Building for AMD64
275------------------
276
Tim Golden7d052362013-10-25 08:58:16 +0100277The build process for AMD64 / x64 is very similar to standard builds,
278you just have to set x64 as platform. In addition, the HOST_PYTHON
279environment variable must point to a Python interpreter (at least 2.4),
280to support cross-compilation from Win32. Note that Visual Studio
Zachary Waree08f3762014-03-28 23:31:04 -0500281requires Professional Edition or better in order to build 64-bit
Tim Golden7d052362013-10-25 08:58:16 +0100282binaries.
Martin v. Löwis856bf9a2006-02-14 20:42:55 +0000283
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000284
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000285Profile Guided Optimization
286---------------------------
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000287
Christian Heimes25bb7832008-01-11 16:17:00 +0000288The solution has two configurations for PGO. The PGInstrument
Tim Golden7d052362013-10-25 08:58:16 +0100289configuration must be built first. The PGInstrument binaries are linked
290against a profiling library and contain extra debug information. The
291PGUpdate configuration takes the profiling data and generates optimized
292binaries.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000293
Tim Golden7d052362013-10-25 08:58:16 +0100294The build_pgo.bat script automates the creation of optimized binaries.
295It creates the PGI files, runs the unit test suite or PyBench with the
296PGI python, and finally creates the optimized files.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000297
Tim Golden7d052362013-10-25 08:58:16 +0100298See
299 http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.100).aspx
300for more on this topic.
301
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000302
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000303Static library
304--------------
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000305
Tim Golden7d052362013-10-25 08:58:16 +0100306The solution has no configuration for static libraries. However it is
307easy to build a static library instead of a DLL. You simply have to set
308the "Configuration Type" to "Static Library (.lib)" and alter the
309preprocessor macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may
310also have to change the "Runtime Library" from "Multi-threaded DLL
311(/MD)" to "Multi-threaded (/MT)".
312
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000313
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000314Visual Studio properties
315------------------------
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000316
Tim Golden7d052362013-10-25 08:58:16 +0100317The PCbuild solution makes heavy use of Visual Studio property files
318(*.props). The properties can be viewed and altered in the Property
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000319Manager (View -> Other Windows -> Property Manager).
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000320
Tim Golden7d052362013-10-25 08:58:16 +0100321The property files used are (+-- = "also imports"):
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000322 * debug (debug macro: _DEBUG)
323 * pginstrument (PGO)
324 * pgupdate (PGO)
325 +-- pginstrument
326 * pyd (python extension, release build)
327 +-- release
328 +-- pyproject
329 * pyd_d (python extension, debug build)
330 +-- debug
331 +-- pyproject
332 * pyproject (base settings for all projects, user macros like PyDllName)
333 * release (release macro: NDEBUG)
Tim Golden7d052362013-10-25 08:58:16 +0100334 * sqlite3 (used only by sqlite3.vcxproj)
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000335 * x64 (AMD64 / x64 platform specific settings)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000336
Tim Golden7d052362013-10-25 08:58:16 +0100337The pyproject property file defines _WIN32 and x64 defines _WIN64 and
338_M_X64 although the macros are set by the compiler, too. The GUI doesn't
339always know about the macros and confuse the user with false
340information.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000341
Tim Golden7d052362013-10-25 08:58:16 +0100342
343Your Own Extension DLLs
Tim Peters4b5fb072000-07-01 00:03:43 +0000344-----------------------
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000345
Tim Golden7d052362013-10-25 08:58:16 +0100346If you want to create your own extension module DLL (.pyd), there's an
347example with easy-to-follow instructions in ..\PC\example\; read the
348file readme.txt there first.