1 | Building Python using VC++ 9.0
|
---|
2 | ------------------------------
|
---|
3 |
|
---|
4 | This directory is used to build Python for Win32 and x64 platforms, e.g.
|
---|
5 | Windows 2000, XP, Vista and Windows Server 2008. In order to build 32-bit
|
---|
6 | debug and release executables, Microsoft Visual C++ 2008 Express Edition is
|
---|
7 | required at the very least. In order to build 64-bit debug and release
|
---|
8 | executables, Visual Studio 2008 Standard Edition is required at the very
|
---|
9 | least. In order to build all of the above, as well as generate release builds
|
---|
10 | that make use of Profile Guided Optimisation (PG0), Visual Studio 2008
|
---|
11 | Professional Edition is required at the very least. The official Python
|
---|
12 | releases are built with this version of Visual Studio.
|
---|
13 |
|
---|
14 | For other Windows platforms and compilers, see ../PC/readme.txt.
|
---|
15 |
|
---|
16 | All you need to do is open the workspace "pcbuild.sln" in Visual Studio,
|
---|
17 | select the desired combination of configuration and platform and eventually
|
---|
18 | build the solution. Unless you are going to debug a problem in the core or
|
---|
19 | you are going to create an optimized build you want to select "Release" as
|
---|
20 | configuration.
|
---|
21 |
|
---|
22 | The PCbuild directory is compatible with all versions of Visual Studio from
|
---|
23 | VS C++ Express Edition over the standard edition up to the professional
|
---|
24 | edition. However the express edition does not support features like solution
|
---|
25 | folders or profile guided optimization (PGO). The missing bits and pieces
|
---|
26 | won't stop you from building Python.
|
---|
27 |
|
---|
28 | The solution is configured to build the projects in the correct order. "Build
|
---|
29 | Solution" or F7 takes care of dependencies except for x64 builds. To make
|
---|
30 | cross compiling x64 builds on a 32bit OS possible the x64 builds require a
|
---|
31 | 32bit version of Python.
|
---|
32 |
|
---|
33 | NOTE:
|
---|
34 | You probably don't want to build most of the other subprojects, unless
|
---|
35 | 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)
|
---|
38 |
|
---|
39 | When using the Debug setting, the output files have a _d added to
|
---|
40 | their name: python30_d.dll, python_d.exe, parser_d.pyd, and so on. Both
|
---|
41 | the build and rt batch files accept a -d option for debug builds.
|
---|
42 |
|
---|
43 | The 32bit builds end up in the solution folder PCbuild while the x64 builds
|
---|
44 | land in the amd64 subfolder. The PGI and PGO builds for profile guided
|
---|
45 | optimization end up in their own folders, too.
|
---|
46 |
|
---|
47 | Legacy support
|
---|
48 | --------------
|
---|
49 |
|
---|
50 | You can find build directories for older versions of Visual Studio and
|
---|
51 | Visual C++ in the PC directory. The legacy build directories are no longer
|
---|
52 | actively maintained and may not work out of the box.
|
---|
53 |
|
---|
54 | PC/VC6/
|
---|
55 | Visual C++ 6.0
|
---|
56 | PC/VS7.1/
|
---|
57 | Visual Studio 2003 (7.1)
|
---|
58 | PC/VS8.0/
|
---|
59 | Visual Studio 2005 (8.0)
|
---|
60 |
|
---|
61 |
|
---|
62 | C RUNTIME
|
---|
63 | ---------
|
---|
64 |
|
---|
65 | Visual Studio 2008 uses version 9 of the C runtime (MSVCRT9). The executables
|
---|
66 | are linked to a CRT "side by side" assembly which must be present on the target
|
---|
67 | machine. This is avalible under the VC/Redist folder of your visual studio
|
---|
68 | distribution. On XP and later operating systems that support
|
---|
69 | side-by-side assemblies it is not enough to have the msvcrt90.dll present,
|
---|
70 | it has to be there as a whole assembly, that is, a folder with the .dll
|
---|
71 | and a .manifest. Also, a check is made for the correct version.
|
---|
72 | Therefore, one should distribute this assembly with the dlls, and keep
|
---|
73 | it in the same directory. For compatibility with older systems, one should
|
---|
74 | also set the PATH to this directory so that the dll can be found.
|
---|
75 | For more info, see the Readme in the VC/Redist folder.
|
---|
76 |
|
---|
77 | SUBPROJECTS
|
---|
78 | -----------
|
---|
79 | These subprojects should build out of the box. Subprojects other than the
|
---|
80 | main 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
|
---|
82 | supporting that module unless they import the module.
|
---|
83 |
|
---|
84 | pythoncore
|
---|
85 | .dll and .lib
|
---|
86 | python
|
---|
87 | .exe
|
---|
88 | pythonw
|
---|
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
|
---|
95 | pyexpat
|
---|
96 | Python wrapper for accelerated XML parsing, which incorporates stable
|
---|
97 | code from the Expat project: http://sourceforge.net/projects/expat/
|
---|
98 | select
|
---|
99 | selectmodule.c
|
---|
100 | unicodedata
|
---|
101 | large tables of Unicode data
|
---|
102 | winsound
|
---|
103 | play sounds (typically .wav files) under Windows
|
---|
104 |
|
---|
105 | Python-controlled subprojects that wrap external projects:
|
---|
106 | _bsddb
|
---|
107 | Wraps Berkeley DB 4.7.25, which is currently built by _bsddb.vcproj.
|
---|
108 | project (see below).
|
---|
109 | _sqlite3
|
---|
110 | Wraps SQLite 3.6.21, which is currently built by sqlite3.vcproj (see below).
|
---|
111 | _tkinter
|
---|
112 | 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
|
---|
115 | pre-built Tcl/Tk in either ..\..\tcltk for 32-bit or ..\..\tcltk64 for
|
---|
116 | 64-bit (relative to this directory). See below for instructions to build
|
---|
117 | Tcl/Tk.
|
---|
118 | bz2
|
---|
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 |
|
---|
124 | svn export http://svn.python.org/projects/external/bzip2-1.0.6
|
---|
125 |
|
---|
126 | ** 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 |
|
---|
130 | A custom pre-link step in the bz2 project settings should manage to
|
---|
131 | build bzip2-1.0.6\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is
|
---|
132 | linked in PCbuild\.
|
---|
133 | However, the bz2 project is not smart enough to remove anything under
|
---|
134 | bzip2-1.0.6\ when you do a clean, so if you want to rebuild bzip2.lib
|
---|
135 | you need to clean up bzip2-1.0.6\ by hand.
|
---|
136 |
|
---|
137 | All of this managed to build libbz2.lib in
|
---|
138 | bzip2-1.0.6\$platform-$configuration\, which the Python project links in.
|
---|
139 |
|
---|
140 | _ssl
|
---|
141 | Python wrapper for the secure sockets library.
|
---|
142 |
|
---|
143 | Get the source code through
|
---|
144 |
|
---|
145 | svn export http://svn.python.org/projects/external/openssl-0.9.8y
|
---|
146 |
|
---|
147 | ** NOTE: if you use the Tools\buildbot\external(-amd64).bat approach for
|
---|
148 | obtaining external sources then you don't need to manually get the source
|
---|
149 | above via subversion. **
|
---|
150 |
|
---|
151 | Alternatively, get the latest version from http://www.openssl.org.
|
---|
152 | You can (theoretically) use any version of OpenSSL you like - the
|
---|
153 | build process will automatically select the latest version.
|
---|
154 |
|
---|
155 | You must install the NASM assembler from
|
---|
156 | http://nasm.sf.net
|
---|
157 | for x86 builds. Put nasmw.exe anywhere in your PATH.
|
---|
158 | Note: recent releases of nasm only have nasm.exe. Just rename it to
|
---|
159 | nasmw.exe.
|
---|
160 |
|
---|
161 | You can also install ActivePerl from
|
---|
162 | http://www.activestate.com/activeperl/
|
---|
163 | if you like to use the official sources instead of the files from
|
---|
164 | python's subversion repository. The svn version contains pre-build
|
---|
165 | makefiles and assembly files.
|
---|
166 |
|
---|
167 | The build process makes sure that no patented algorithms are included.
|
---|
168 | For now RC5, MDC2 and IDEA are excluded from the build. You may have
|
---|
169 | to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if the build process
|
---|
170 | complains about missing files or forbidden IDEA. Again the files provided
|
---|
171 | in the subversion repository are already fixed.
|
---|
172 |
|
---|
173 | The MSVC project simply invokes PCBuild/build_ssl.py to perform
|
---|
174 | the build. This Python script locates and builds your OpenSSL
|
---|
175 | installation, then invokes a simple makefile to build the final .pyd.
|
---|
176 |
|
---|
177 | build_ssl.py attempts to catch the most common errors (such as not
|
---|
178 | being able to find OpenSSL sources, or not being able to find a Perl
|
---|
179 | that works with OpenSSL) and give a reasonable error message.
|
---|
180 | If you have a problem that doesn't seem to be handled correctly
|
---|
181 | (eg, you know you have ActivePerl but we can't find it), please take
|
---|
182 | a peek at build_ssl.py and suggest patches. Note that build_ssl.py
|
---|
183 | should be able to be run directly from the command-line.
|
---|
184 |
|
---|
185 | build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
|
---|
186 | this by hand.
|
---|
187 |
|
---|
188 | The subprojects above wrap external projects Python doesn't control, and as
|
---|
189 | such, a little more work is required in order to download the relevant source
|
---|
190 | files for each project before they can be built. The buildbots do this each
|
---|
191 | time they're built, so the easiest approach is to run either external.bat or
|
---|
192 | external-amd64.bat in the ..\Tools\buildbot directory from ..\, i.e.:
|
---|
193 |
|
---|
194 | C:\..\svn.python.org\projects\python\trunk\PCbuild>cd ..
|
---|
195 | C:\..\svn.python.org\projects\python\trunk>Tools\buildbot\external.bat
|
---|
196 |
|
---|
197 | This extracts all the external subprojects from http://svn.python.org/external
|
---|
198 | via Subversion (so you'll need an svn.exe on your PATH) and places them in
|
---|
199 | ..\.. (relative to this directory). The external(-amd64).bat scripts will
|
---|
200 | also build a debug build of Tcl/Tk; there aren't any equivalent batch files
|
---|
201 | for building release versions of Tcl/Tk lying around in the Tools\buildbot
|
---|
202 | directory. If you need to build a release version of Tcl/Tk it isn't hard
|
---|
203 | though, take a look at the relevant external(-amd64).bat file and find the
|
---|
204 | two nmake lines, then call each one without the 'DEBUG=1' parameter, i.e.:
|
---|
205 |
|
---|
206 | The external-amd64.bat file contains this for tcl:
|
---|
207 | nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
|
---|
208 |
|
---|
209 | So for a release build, you'd call it as:
|
---|
210 | nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
|
---|
211 |
|
---|
212 | XXX Should we compile with OPTS=threads?
|
---|
213 | XXX Our installer copies a lot of stuff out of the Tcl/Tk install
|
---|
214 | XXX directory. Is all of that really needed for Python use of Tcl/Tk?
|
---|
215 |
|
---|
216 | This will be cleaned up in the future; ideally Tcl/Tk will be brought into our
|
---|
217 | pcbuild.sln as custom .vcproj files, just as we've recently done with the
|
---|
218 | _bsddb.vcproj and sqlite3.vcproj files, which will remove the need for
|
---|
219 | Tcl/Tk to be built separately via a batch file.
|
---|
220 |
|
---|
221 | XXX trent.nelson 02-Apr-08:
|
---|
222 | Having the external subprojects in ..\.. relative to this directory is a
|
---|
223 | bit of a nuisance when you're working on py3k and trunk in parallel and
|
---|
224 | your directory layout mimics that of Python's subversion layout, e.g.:
|
---|
225 |
|
---|
226 | C:\..\svn.python.org\projects\python\trunk
|
---|
227 | C:\..\svn.python.org\projects\python\branches\py3k
|
---|
228 | C:\..\svn.python.org\projects\python\branches\release25-maint
|
---|
229 |
|
---|
230 | I'd like to change things so that external subprojects are fetched from
|
---|
231 | ..\external instead of ..\.., then provide some helper scripts or batch
|
---|
232 | files that would set up a new ..\external directory with svn checkouts of
|
---|
233 | the relevant branches in http://svn.python.org/projects/external/, or
|
---|
234 | alternatively, use junctions to link ..\external with a pre-existing
|
---|
235 | externals directory being used by another branch. i.e. if I'm usually
|
---|
236 | working on trunk (and have previously created trunk\external via the
|
---|
237 | provided batch file), and want to do some work on py3k, I'd set up a
|
---|
238 | junction as follows (using the directory structure above as an example):
|
---|
239 |
|
---|
240 | C:\..\python\trunk\external <- already exists and has built versions
|
---|
241 | of the external subprojects
|
---|
242 |
|
---|
243 | C:\..\python\branches\py3k>linkd.exe external ..\..\trunk\external
|
---|
244 | Link created at: external
|
---|
245 |
|
---|
246 | Only a slight tweak would be needed to the buildbots such that bots
|
---|
247 | building trunk and py3k could make use of the same facility. (2.5.x
|
---|
248 | builds need to be kept separate as they're using Visual Studio 7.1.)
|
---|
249 | /XXX trent.nelson 02-Apr-08
|
---|
250 |
|
---|
251 | Building for Itanium
|
---|
252 | --------------------
|
---|
253 |
|
---|
254 | NOTE:
|
---|
255 | Official support for Itanium builds have been dropped from the build. Please
|
---|
256 | contact us and provide patches if you are interested in Itanium builds.
|
---|
257 |
|
---|
258 | The project files support a ReleaseItanium configuration which creates
|
---|
259 | Win64/Itanium binaries. For this to work, you need to install the Platform
|
---|
260 | SDK, in particular the 64-bit support. This includes an Itanium compiler
|
---|
261 | (future releases of the SDK likely include an AMD64 compiler as well).
|
---|
262 | In addition, you need the Visual Studio plugin for external C compilers,
|
---|
263 | from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to
|
---|
264 | locate the proper target compiler, and convert compiler options
|
---|
265 | accordingly. The project files require at least version 0.9.
|
---|
266 |
|
---|
267 | Building for AMD64
|
---|
268 | ------------------
|
---|
269 |
|
---|
270 | The build process for AMD64 / x64 is very similar to standard builds. You just
|
---|
271 | have to set x64 as platform. In addition, the HOST_PYTHON environment variable
|
---|
272 | must point to a Python interpreter (at least 2.4), to support cross-compilation.
|
---|
273 |
|
---|
274 | Building Python Using the free MS Toolkit Compiler
|
---|
275 | --------------------------------------------------
|
---|
276 |
|
---|
277 | Microsoft has withdrawn the free MS Toolkit Compiler, so this can no longer
|
---|
278 | be considered a supported option. Instead you can use the free VS C++ Express
|
---|
279 | Edition.
|
---|
280 |
|
---|
281 | Profile Guided Optimization
|
---|
282 | ---------------------------
|
---|
283 |
|
---|
284 | The solution has two configurations for PGO. The PGInstrument
|
---|
285 | configuration must be build first. The PGInstrument binaries are
|
---|
286 | lniked against a profiling library and contain extra debug
|
---|
287 | information. The PGUpdate configuration takes the profiling data and
|
---|
288 | generates optimized binaries.
|
---|
289 |
|
---|
290 | The build_pgo.bat script automates the creation of optimized binaries. It
|
---|
291 | creates the PGI files, runs the unit test suite or PyBench with the PGI
|
---|
292 | python and finally creates the optimized files.
|
---|
293 |
|
---|
294 | http://msdn2.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx
|
---|
295 |
|
---|
296 | Static library
|
---|
297 | --------------
|
---|
298 |
|
---|
299 | The solution has no configuration for static libraries. However it is easy
|
---|
300 | it build a static library instead of a DLL. You simply have to set the
|
---|
301 | "Configuration Type" to "Static Library (.lib)" and alter the preprocessor
|
---|
302 | macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may also have to
|
---|
303 | change the "Runtime Library" from "Multi-threaded DLL (/MD)" to
|
---|
304 | "Multi-threaded (/MT)".
|
---|
305 |
|
---|
306 | Visual Studio properties
|
---|
307 | ------------------------
|
---|
308 |
|
---|
309 | The PCbuild solution makes heavy use of Visual Studio property files
|
---|
310 | (*.vsprops). The properties can be viewed and altered in the Property
|
---|
311 | Manager (View -> Other Windows -> Property Manager).
|
---|
312 |
|
---|
313 | * debug (debug macro: _DEBUG)
|
---|
314 | * pginstrument (PGO)
|
---|
315 | * pgupdate (PGO)
|
---|
316 | +-- pginstrument
|
---|
317 | * pyd (python extension, release build)
|
---|
318 | +-- release
|
---|
319 | +-- pyproject
|
---|
320 | * pyd_d (python extension, debug build)
|
---|
321 | +-- debug
|
---|
322 | +-- pyproject
|
---|
323 | * pyproject (base settings for all projects, user macros like PyDllName)
|
---|
324 | * release (release macro: NDEBUG)
|
---|
325 | * x64 (AMD64 / x64 platform specific settings)
|
---|
326 |
|
---|
327 | The pyproject propertyfile defines _WIN32 and x64 defines _WIN64 and _M_X64
|
---|
328 | although the macros are set by the compiler, too. The GUI doesn't always know
|
---|
329 | about the macros and confuse the user with false information.
|
---|
330 |
|
---|
331 | YOUR OWN EXTENSION DLLs
|
---|
332 | -----------------------
|
---|
333 |
|
---|
334 | If you want to create your own extension module DLL, there's an example
|
---|
335 | with easy-to-follow instructions in ../PC/example/; read the file
|
---|
336 | readme.txt there first.
|
---|