blob: 4d4c7da05e358b8caed448831c20d237176bcdc6 [file] [log] [blame]
Christian Heimese8954f82007-11-22 11:21:16 +00001Building Python using VC++ 9.0
2------------------------------
Christian Heimesd9fbab22008-01-02 17:43:40 +00003
Zachary Waree0afd8e2013-11-03 21:43:33 -06004This directory is used to build Python for Win32 and x64 platforms, e.g.
Trent Nelsondbc114a2008-04-02 15:01:00 +00005Windows 2000, XP, Vista and Windows Server 2008. In order to build 32-bit
6debug and release executables, Microsoft Visual C++ 2008 Express Edition is
7required at the very least. In order to build 64-bit debug and release
8executables, Visual Studio 2008 Standard Edition is required at the very
9least. In order to build all of the above, as well as generate release builds
10that make use of Profile Guided Optimisation (PG0), Visual Studio 2008
11Professional Edition is required at the very least. The official Python
12releases are built with this version of Visual Studio.
13
14For other Windows platforms and compilers, see ../PC/readme.txt.
Christian Heimese8954f82007-11-22 11:21:16 +000015
Christian Heimes8b011402007-11-27 21:28:40 +000016All you need to do is open the workspace "pcbuild.sln" in Visual Studio,
17select the desired combination of configuration and platform and eventually
18build the solution. Unless you are going to debug a problem in the core or
19you are going to create an optimized build you want to select "Release" as
20configuration.
Christian Heimese8954f82007-11-22 11:21:16 +000021
Christian Heimes3adfe9a2007-12-31 15:18:55 +000022The PCbuild directory is compatible with all versions of Visual Studio from
Christian Heimes8b011402007-11-27 21:28:40 +000023VS C++ Express Edition over the standard edition up to the professional
Georg Brandl73ac29e2008-09-21 07:17:00 +000024edition. However the express edition does not support features like solution
Christian Heimes8b011402007-11-27 21:28:40 +000025folders or profile guided optimization (PGO). The missing bits and pieces
26won't stop you from building Python.
Christian Heimese8954f82007-11-22 11:21:16 +000027
Christian Heimes8b011402007-11-27 21:28:40 +000028The solution is configured to build the projects in the correct order. "Build
Christian Heimes95d64472008-02-09 19:55:22 +000029Solution" or F7 takes care of dependencies except for x64 builds. To make
Zachary Waree0afd8e2013-11-03 21:43:33 -060030cross compiling x64 builds on a 32bit OS possible the x64 builds require a
Christian Heimes8b011402007-11-27 21:28:40 +00003132bit version of Python.
Christian Heimese8954f82007-11-22 11:21:16 +000032
Christian Heimes3971f6b2007-11-30 19:18:08 +000033NOTE:
34 You probably don't want to build most of the other subprojects, unless
Christian Heimes8b011402007-11-27 21:28:40 +000035 you're building an entire Python distribution from scratch, or
36 specifically making changes to the subsystems they implement, or are
37 running a Python core buildbot test slave; see SUBPROJECTS below)
Christian Heimese8954f82007-11-22 11:21:16 +000038
39When using the Debug setting, the output files have a _d added to
Zachary Waree0afd8e2013-11-03 21:43:33 -060040their name: python27_d.dll, python_d.exe, parser_d.pyd, and so on. Both
Christian Heimes95d64472008-02-09 19:55:22 +000041the build and rt batch files accept a -d option for debug builds.
Christian Heimese8954f82007-11-22 11:21:16 +000042
Christian Heimes3adfe9a2007-12-31 15:18:55 +000043The 32bit builds end up in the solution folder PCbuild while the x64 builds
Christian Heimes8b011402007-11-27 21:28:40 +000044land in the amd64 subfolder. The PGI and PGO builds for profile guided
45optimization end up in their own folders, too.
46
Christian Heimesd9fbab22008-01-02 17:43:40 +000047Legacy support
48--------------
49
Zachary Waree0afd8e2013-11-03 21:43:33 -060050You can find build directories for older versions of Visual Studio and
Christian Heimesd9fbab22008-01-02 17:43:40 +000051Visual C++ in the PC directory. The legacy build directories are no longer
52actively maintained and may not work out of the box.
53
54PC/VC6/
55 Visual C++ 6.0
56PC/VS7.1/
57 Visual Studio 2003 (7.1)
Hirokazu Yamamoto26236882010-10-08 10:22:55 +000058PC/VS8.0/
Christian Heimesd9fbab22008-01-02 17:43:40 +000059 Visual Studio 2005 (8.0)
60
61
62C RUNTIME
63---------
64
65Visual Studio 2008 uses version 9 of the C runtime (MSVCRT9). The executables
66are linked to a CRT "side by side" assembly which must be present on the target
Zachary Waree0afd8e2013-11-03 21:43:33 -060067machine. This is available under the VC/Redist folder of your visual studio
Christian Heimesd9fbab22008-01-02 17:43:40 +000068distribution. On XP and later operating systems that support
Trent Nelsondbc114a2008-04-02 15:01:00 +000069side-by-side assemblies it is not enough to have the msvcrt90.dll present,
Christian Heimesd9fbab22008-01-02 17:43:40 +000070it has to be there as a whole assembly, that is, a folder with the .dll
71and a .manifest. Also, a check is made for the correct version.
72Therefore, one should distribute this assembly with the dlls, and keep
73it in the same directory. For compatibility with older systems, one should
74also set the PATH to this directory so that the dll can be found.
75For more info, see the Readme in the VC/Redist folder.
76
Christian Heimese8954f82007-11-22 11:21:16 +000077SUBPROJECTS
78-----------
79These subprojects should build out of the box. Subprojects other than the
80main ones (pythoncore, python, pythonw) generally build a DLL (renamed to
81.pyd) from a specific module so that users don't have to load the code
82supporting that module unless they import the module.
83
84pythoncore
85 .dll and .lib
86python
87 .exe
88pythonw
89 pythonw.exe, a variant of python.exe that doesn't pop up a DOS box
90_socket
91 socketmodule.c
92_testcapi
93 tests of the Python C API, run via Lib/test/test_capi.py, and
94 implemented by module Modules/_testcapimodule.c
95pyexpat
96 Python wrapper for accelerated XML parsing, which incorporates stable
97 code from the Expat project: http://sourceforge.net/projects/expat/
98select
99 selectmodule.c
100unicodedata
101 large tables of Unicode data
102winsound
103 play sounds (typically .wav files) under Windows
104
Trent Nelsondbc114a2008-04-02 15:01:00 +0000105Python-controlled subprojects that wrap external projects:
106_bsddb
Georg Brandle4c1f112008-09-21 07:24:11 +0000107 Wraps Berkeley DB 4.7.25, which is currently built by _bsddb.vcproj.
Zachary Waree0afd8e2013-11-03 21:43:33 -0600108 project.
Trent Nelsondbc114a2008-04-02 15:01:00 +0000109_sqlite3
Zachary Waree0afd8e2013-11-03 21:43:33 -0600110 Wraps SQLite 3.6.21, which is currently built by sqlite3.vcproj.
Christian Heimese8954f82007-11-22 11:21:16 +0000111_tkinter
Trent Nelsondbc114a2008-04-02 15:01:00 +0000112 Wraps the Tk windowing system. Unlike _bsddb and _sqlite3, there's no
113 corresponding tcltk.vcproj-type project that builds Tcl/Tk from vcproj's
114 within our pcbuild.sln, which means this module expects to find a
Zachary Ware21a23502014-11-01 22:34:09 -0500115 pre-built Tcl/Tk in either ..\externals\tcltk for 32-bit or
116 ..\externals\tcltk64 for 64-bit (relative to this directory). See below
117 for instructions to build Tcl/Tk.
Christian Heimese8954f82007-11-22 11:21:16 +0000118bz2
119 Python wrapper for the libbz2 compression library. Homepage
120 http://sources.redhat.com/bzip2/
121 Download the source from the python.org copy into the dist
122 directory:
123
Martin v. Löwise7f67b52012-05-14 14:19:09 +0200124 svn export http://svn.python.org/projects/external/bzip2-1.0.6
Christian Heimese8954f82007-11-22 11:21:16 +0000125
Trent Nelsondbc114a2008-04-02 15:01:00 +0000126 ** NOTE: if you use the Tools\buildbot\external(-amd64).bat approach for
127 obtaining external sources then you don't need to manually get the source
128 above via subversion. **
129
Christian Heimese8954f82007-11-22 11:21:16 +0000130_ssl
131 Python wrapper for the secure sockets library.
132
133 Get the source code through
134
Zachary Ware7876f722014-10-25 23:04:33 -0500135 svn export http://svn.python.org/projects/external/openssl-1.0.1j
Christian Heimese8954f82007-11-22 11:21:16 +0000136
Trent Nelsondbc114a2008-04-02 15:01:00 +0000137 ** NOTE: if you use the Tools\buildbot\external(-amd64).bat approach for
138 obtaining external sources then you don't need to manually get the source
139 above via subversion. **
140
Christian Heimese8954f82007-11-22 11:21:16 +0000141 Alternatively, get the latest version from http://www.openssl.org.
142 You can (theoretically) use any version of OpenSSL you like - the
143 build process will automatically select the latest version.
144
Christian Heimes3971f6b2007-11-30 19:18:08 +0000145 You must install the NASM assembler from
Georg Brandl93502342008-09-29 16:51:35 +0000146 http://nasm.sf.net
Zachary Ware247b6442014-11-01 17:11:08 -0500147 for x86 builds. Put nasm.exe anywhere in your PATH. If you use the
148 Tools\buildbot\external(-amd64).bat method for getting sources, it also
149 downloads a version of NASM, which the ssl build script will add to PATH.
Christian Heimes3971f6b2007-11-30 19:18:08 +0000150
151 You can also install ActivePerl from
Hirokazu Yamamoto59734be2010-12-09 08:01:18 +0000152 http://www.activestate.com/activeperl/
Zachary Waree0afd8e2013-11-03 21:43:33 -0600153 if you like to use the official sources instead of the files from
Christian Heimes8b011402007-11-27 21:28:40 +0000154 python's subversion repository. The svn version contains pre-build
155 makefiles and assembly files.
Christian Heimese8954f82007-11-22 11:21:16 +0000156
Christian Heimes8b011402007-11-27 21:28:40 +0000157 The build process makes sure that no patented algorithms are included.
Zachary Waree0afd8e2013-11-03 21:43:33 -0600158 For now RC5, MDC2 and IDEA are excluded from the build. You may have
Christian Heimes8b011402007-11-27 21:28:40 +0000159 to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if the build process
160 complains about missing files or forbidden IDEA. Again the files provided
161 in the subversion repository are already fixed.
Christian Heimese8954f82007-11-22 11:21:16 +0000162
163 The MSVC project simply invokes PCBuild/build_ssl.py to perform
164 the build. This Python script locates and builds your OpenSSL
165 installation, then invokes a simple makefile to build the final .pyd.
166
167 build_ssl.py attempts to catch the most common errors (such as not
168 being able to find OpenSSL sources, or not being able to find a Perl
169 that works with OpenSSL) and give a reasonable error message.
170 If you have a problem that doesn't seem to be handled correctly
171 (eg, you know you have ActivePerl but we can't find it), please take
172 a peek at build_ssl.py and suggest patches. Note that build_ssl.py
173 should be able to be run directly from the command-line.
174
175 build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
176 this by hand.
177
Trent Nelsondbc114a2008-04-02 15:01:00 +0000178The subprojects above wrap external projects Python doesn't control, and as
Zachary Waree0afd8e2013-11-03 21:43:33 -0600179such, a little more work is required in order to download the relevant source
Trent Nelsondbc114a2008-04-02 15:01:00 +0000180files for each project before they can be built. The buildbots do this each
Zachary Waree0afd8e2013-11-03 21:43:33 -0600181time they're built, so the easiest approach is to run either external.bat or
Trent Nelsondbc114a2008-04-02 15:01:00 +0000182external-amd64.bat in the ..\Tools\buildbot directory from ..\, i.e.:
183
184 C:\..\svn.python.org\projects\python\trunk\PCbuild>cd ..
185 C:\..\svn.python.org\projects\python\trunk>Tools\buildbot\external.bat
186
187This extracts all the external subprojects from http://svn.python.org/external
Zachary Waree0afd8e2013-11-03 21:43:33 -0600188via Subversion (so you'll need an svn.exe on your PATH) and places them in
Zachary Ware21a23502014-11-01 22:34:09 -0500189..\externals (relative to this directory). The external(-amd64).bat scripts
190will also build a debug build of Tcl/Tk; there aren't any equivalent batch files
Trent Nelsondbc114a2008-04-02 15:01:00 +0000191for building release versions of Tcl/Tk lying around in the Tools\buildbot
192directory. If you need to build a release version of Tcl/Tk it isn't hard
193though, take a look at the relevant external(-amd64).bat file and find the
194two nmake lines, then call each one without the 'DEBUG=1' parameter, i.e.:
195
196The external-amd64.bat file contains this for tcl:
197 nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
198
199So for a release build, you'd call it as:
200 nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
201
202 XXX Should we compile with OPTS=threads?
203 XXX Our installer copies a lot of stuff out of the Tcl/Tk install
204 XXX directory. Is all of that really needed for Python use of Tcl/Tk?
205
206This will be cleaned up in the future; ideally Tcl/Tk will be brought into our
207pcbuild.sln as custom .vcproj files, just as we've recently done with the
Georg Brandle4c1f112008-09-21 07:24:11 +0000208_bsddb.vcproj and sqlite3.vcproj files, which will remove the need for
Trent Nelsondbc114a2008-04-02 15:01:00 +0000209Tcl/Tk to be built separately via a batch file.
210
Christian Heimese8954f82007-11-22 11:21:16 +0000211Building for Itanium
212--------------------
213
Christian Heimes8b011402007-11-27 21:28:40 +0000214Official support for Itanium builds have been dropped from the build. Please
Christian Heimes95d64472008-02-09 19:55:22 +0000215contact us and provide patches if you are interested in Itanium builds.
Christian Heimes8b011402007-11-27 21:28:40 +0000216
Christian Heimese8954f82007-11-22 11:21:16 +0000217Building for AMD64
218------------------
219
Christian Heimes8b011402007-11-27 21:28:40 +0000220The build process for AMD64 / x64 is very similar to standard builds. You just
Martin v. Löwis9e051352008-02-29 18:54:45 +0000221have to set x64 as platform. In addition, the HOST_PYTHON environment variable
222must point to a Python interpreter (at least 2.4), to support cross-compilation.
Christian Heimese8954f82007-11-22 11:21:16 +0000223
224Building Python Using the free MS Toolkit Compiler
225--------------------------------------------------
226
Christian Heimes3971f6b2007-11-30 19:18:08 +0000227Microsoft has withdrawn the free MS Toolkit Compiler, so this can no longer
228be considered a supported option. Instead you can use the free VS C++ Express
229Edition.
Christian Heimese8954f82007-11-22 11:21:16 +0000230
Christian Heimes8b011402007-11-27 21:28:40 +0000231Profile Guided Optimization
232---------------------------
Christian Heimese8954f82007-11-22 11:21:16 +0000233
Thomas Heller44c38c12008-01-10 18:45:40 +0000234The solution has two configurations for PGO. The PGInstrument
235configuration must be build first. The PGInstrument binaries are
Zachary Waree0afd8e2013-11-03 21:43:33 -0600236linked against a profiling library and contain extra debug
Thomas Heller44c38c12008-01-10 18:45:40 +0000237information. The PGUpdate configuration takes the profiling data and
238generates optimized binaries.
Christian Heimes3d2f5642007-12-06 21:13:06 +0000239
240The build_pgo.bat script automates the creation of optimized binaries. It
241creates the PGI files, runs the unit test suite or PyBench with the PGI
242python and finally creates the optimized files.
243
Zachary Waree0afd8e2013-11-03 21:43:33 -0600244http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx
Christian Heimese8954f82007-11-22 11:21:16 +0000245
Christian Heimes3971f6b2007-11-30 19:18:08 +0000246Static library
247--------------
248
249The solution has no configuration for static libraries. However it is easy
Zachary Waree0afd8e2013-11-03 21:43:33 -0600250it build a static library instead of a DLL. You simply have to set the
Christian Heimes3971f6b2007-11-30 19:18:08 +0000251"Configuration Type" to "Static Library (.lib)" and alter the preprocessor
252macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may also have to
Zachary Waree0afd8e2013-11-03 21:43:33 -0600253change the "Runtime Library" from "Multi-threaded DLL (/MD)" to
Christian Heimes3971f6b2007-11-30 19:18:08 +0000254"Multi-threaded (/MT)".
255
Christian Heimes18679942007-12-05 21:57:25 +0000256Visual Studio properties
257------------------------
258
Zachary Waree0afd8e2013-11-03 21:43:33 -0600259The PCbuild solution makes heavy use of Visual Studio property files
Christian Heimes18679942007-12-05 21:57:25 +0000260(*.vsprops). The properties can be viewed and altered in the Property
261Manager (View -> Other Windows -> Property Manager).
262
Christian Heimes3d2f5642007-12-06 21:13:06 +0000263 * debug (debug macro: _DEBUG)
Christian Heimes18679942007-12-05 21:57:25 +0000264 * pginstrument (PGO)
265 * pgupdate (PGO)
266 +-- pginstrument
267 * pyd (python extension, release build)
268 +-- release
269 +-- pyproject
270 * pyd_d (python extension, debug build)
271 +-- debug
272 +-- pyproject
Christian Heimes3d2f5642007-12-06 21:13:06 +0000273 * pyproject (base settings for all projects, user macros like PyDllName)
274 * release (release macro: NDEBUG)
Christian Heimes18679942007-12-05 21:57:25 +0000275 * x64 (AMD64 / x64 platform specific settings)
276
277The pyproject propertyfile defines _WIN32 and x64 defines _WIN64 and _M_X64
278although the macros are set by the compiler, too. The GUI doesn't always know
279about the macros and confuse the user with false information.
280
Christian Heimese8954f82007-11-22 11:21:16 +0000281YOUR OWN EXTENSION DLLs
282-----------------------
Christian Heimes3d2f5642007-12-06 21:13:06 +0000283
Christian Heimese8954f82007-11-22 11:21:16 +0000284If you want to create your own extension module DLL, there's an example
285with easy-to-follow instructions in ../PC/example/; read the file
286readme.txt there first.