| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 1 | Building Python using VC++ 9.0 | 
|  | 2 | ------------------------------ | 
| Christian Heimes | d9fbab2 | 2008-01-02 17:43:40 +0000 | [diff] [blame] | 3 |  | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 4 | This directory is used to build Python for Win32 and x64 platforms, e.g. | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 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. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 15 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 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. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 21 |  | 
| Christian Heimes | 3adfe9a | 2007-12-31 15:18:55 +0000 | [diff] [blame] | 22 | The PCbuild directory is compatible with all versions of Visual Studio from | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 23 | VS C++ Express Edition over the standard edition up to the professional | 
| Georg Brandl | 73ac29e | 2008-09-21 07:17:00 +0000 | [diff] [blame] | 24 | edition. However the express edition does not support features like solution | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 25 | folders or profile guided optimization (PGO). The missing bits and pieces | 
|  | 26 | won't stop you from building Python. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 27 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 28 | The solution is configured to build the projects in the correct order. "Build | 
| Christian Heimes | 95d6447 | 2008-02-09 19:55:22 +0000 | [diff] [blame] | 29 | Solution" or F7 takes care of dependencies except for x64 builds. To make | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 30 | cross compiling x64 builds on a 32bit OS possible the x64 builds require a | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 31 | 32bit version of Python. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 32 |  | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 33 | NOTE: | 
|  | 34 | You probably don't want to build most of the other subprojects, unless | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 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) | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 38 |  | 
|  | 39 | When using the Debug setting, the output files have a _d added to | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 40 | their name:  python27_d.dll, python_d.exe, parser_d.pyd, and so on. Both | 
| Christian Heimes | 95d6447 | 2008-02-09 19:55:22 +0000 | [diff] [blame] | 41 | the build and rt batch files accept a -d option for debug builds. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 42 |  | 
| Christian Heimes | 3adfe9a | 2007-12-31 15:18:55 +0000 | [diff] [blame] | 43 | The 32bit builds end up in the solution folder PCbuild while the x64 builds | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 44 | land in the amd64 subfolder. The PGI and PGO builds for profile guided | 
|  | 45 | optimization end up in their own folders, too. | 
|  | 46 |  | 
| Christian Heimes | d9fbab2 | 2008-01-02 17:43:40 +0000 | [diff] [blame] | 47 | Legacy support | 
|  | 48 | -------------- | 
|  | 49 |  | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 50 | You can find build directories for older versions of Visual Studio and | 
| Christian Heimes | d9fbab2 | 2008-01-02 17:43:40 +0000 | [diff] [blame] | 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) | 
| Hirokazu Yamamoto | 2623688 | 2010-10-08 10:22:55 +0000 | [diff] [blame] | 58 | PC/VS8.0/ | 
| Christian Heimes | d9fbab2 | 2008-01-02 17:43:40 +0000 | [diff] [blame] | 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 | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 67 | machine.  This is available under the VC/Redist folder of your visual studio | 
| Christian Heimes | d9fbab2 | 2008-01-02 17:43:40 +0000 | [diff] [blame] | 68 | distribution. On XP and later operating systems that support | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 69 | side-by-side assemblies it is not enough to have the msvcrt90.dll present, | 
| Christian Heimes | d9fbab2 | 2008-01-02 17:43:40 +0000 | [diff] [blame] | 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 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 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 |  | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 105 | Python-controlled subprojects that wrap external projects: | 
|  | 106 | _bsddb | 
| Georg Brandl | e4c1f11 | 2008-09-21 07:24:11 +0000 | [diff] [blame] | 107 | Wraps Berkeley DB 4.7.25, which is currently built by _bsddb.vcproj. | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 108 | project. | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 109 | _sqlite3 | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 110 | Wraps SQLite 3.6.21, which is currently built by sqlite3.vcproj. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 111 | _tkinter | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 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 | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 117 | Tcl/Tk. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 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 |  | 
| Martin v. Löwis | e7f67b5 | 2012-05-14 14:19:09 +0200 | [diff] [blame] | 124 | svn export http://svn.python.org/projects/external/bzip2-1.0.6 | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 125 |  | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 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 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 130 | _ssl | 
|  | 131 | Python wrapper for the secure sockets library. | 
|  | 132 |  | 
|  | 133 | Get the source code through | 
|  | 134 |  | 
| Zachary Ware | 7876f72 | 2014-10-25 23:04:33 -0500 | [diff] [blame] | 135 | svn export http://svn.python.org/projects/external/openssl-1.0.1j | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 136 |  | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 137 | ** 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 Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 141 | 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 Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 145 | You must install the NASM assembler from | 
| Georg Brandl | 9350234 | 2008-09-29 16:51:35 +0000 | [diff] [blame] | 146 | http://nasm.sf.net | 
| Zachary Ware | 247b644 | 2014-11-01 17:11:08 -0500 | [diff] [blame^] | 147 | 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 Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 150 |  | 
|  | 151 | You can also install ActivePerl from | 
| Hirokazu Yamamoto | 59734be | 2010-12-09 08:01:18 +0000 | [diff] [blame] | 152 | http://www.activestate.com/activeperl/ | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 153 | if you like to use the official sources instead of the files from | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 154 | python's subversion repository. The svn version contains pre-build | 
|  | 155 | makefiles and assembly files. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 156 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 157 | The build process makes sure that no patented algorithms are included. | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 158 | For now RC5, MDC2 and IDEA are excluded from the build. You may have | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 159 | 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 Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 162 |  | 
|  | 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 Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 178 | The subprojects above wrap external projects Python doesn't control, and as | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 179 | such, a little more work is required in order to download the relevant source | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 180 | files for each project before they can be built.  The buildbots do this each | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 181 | time they're built, so the easiest approach is to run either external.bat or | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 182 | external-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 |  | 
|  | 187 | This extracts all the external subprojects from http://svn.python.org/external | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 188 | via Subversion (so you'll need an svn.exe on your PATH) and places them in | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 189 | ..\.. (relative to this directory).  The external(-amd64).bat scripts will | 
|  | 190 | also build a debug build of Tcl/Tk; there aren't any equivalent batch files | 
|  | 191 | for building release versions of Tcl/Tk lying around in the Tools\buildbot | 
|  | 192 | directory.  If you need to build a release version of Tcl/Tk it isn't hard | 
|  | 193 | though, take a look at the relevant external(-amd64).bat file and find the | 
|  | 194 | two nmake lines, then call each one without the 'DEBUG=1' parameter, i.e.: | 
|  | 195 |  | 
|  | 196 | The 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 |  | 
|  | 199 | So 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 |  | 
|  | 206 | This will be cleaned up in the future; ideally Tcl/Tk will be brought into our | 
|  | 207 | pcbuild.sln as custom .vcproj files, just as we've recently done with the | 
| Georg Brandl | e4c1f11 | 2008-09-21 07:24:11 +0000 | [diff] [blame] | 208 | _bsddb.vcproj and sqlite3.vcproj files, which will remove the need for | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 209 | Tcl/Tk to be built separately via a batch file. | 
|  | 210 |  | 
|  | 211 | XXX trent.nelson 02-Apr-08: | 
|  | 212 | Having the external subprojects in ..\.. relative to this directory is a | 
|  | 213 | bit of a nuisance when you're working on py3k and trunk in parallel and | 
|  | 214 | your directory layout mimics that of Python's subversion layout, e.g.: | 
|  | 215 |  | 
|  | 216 | C:\..\svn.python.org\projects\python\trunk | 
|  | 217 | C:\..\svn.python.org\projects\python\branches\py3k | 
|  | 218 | C:\..\svn.python.org\projects\python\branches\release25-maint | 
|  | 219 |  | 
|  | 220 | I'd like to change things so that external subprojects are fetched from | 
|  | 221 | ..\external instead of ..\.., then provide some helper scripts or batch | 
|  | 222 | files that would set up a new ..\external directory with svn checkouts of | 
|  | 223 | the relevant branches in http://svn.python.org/projects/external/, or | 
|  | 224 | alternatively, use junctions to link ..\external with a pre-existing | 
|  | 225 | externals directory being used by another branch.  i.e. if I'm usually | 
|  | 226 | working on trunk (and have previously created trunk\external via the | 
|  | 227 | provided batch file), and want to do some work on py3k, I'd set up a | 
|  | 228 | junction as follows (using the directory structure above as an example): | 
|  | 229 |  | 
|  | 230 | C:\..\python\trunk\external <- already exists and has built versions | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 231 | of the external subprojects | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 232 |  | 
|  | 233 | C:\..\python\branches\py3k>linkd.exe external ..\..\trunk\external | 
|  | 234 | Link created at: external | 
|  | 235 |  | 
|  | 236 | Only a slight tweak would be needed to the buildbots such that bots | 
|  | 237 | building trunk and py3k could make use of the same facility.  (2.5.x | 
|  | 238 | builds need to be kept separate as they're using Visual Studio 7.1.) | 
|  | 239 | /XXX trent.nelson 02-Apr-08 | 
|  | 240 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 241 | Building for Itanium | 
|  | 242 | -------------------- | 
|  | 243 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 244 | Official support for Itanium builds have been dropped from the build. Please | 
| Christian Heimes | 95d6447 | 2008-02-09 19:55:22 +0000 | [diff] [blame] | 245 | contact us and provide patches if you are interested in Itanium builds. | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 246 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 247 | Building for AMD64 | 
|  | 248 | ------------------ | 
|  | 249 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 250 | The build process for AMD64 / x64 is very similar to standard builds. You just | 
| Martin v. Löwis | 9e05135 | 2008-02-29 18:54:45 +0000 | [diff] [blame] | 251 | have to set x64 as platform. In addition, the HOST_PYTHON environment variable | 
|  | 252 | must point to a Python interpreter (at least 2.4), to support cross-compilation. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 253 |  | 
|  | 254 | Building Python Using the free MS Toolkit Compiler | 
|  | 255 | -------------------------------------------------- | 
|  | 256 |  | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 257 | Microsoft has withdrawn the free MS Toolkit Compiler, so this can no longer | 
|  | 258 | be considered a supported option. Instead you can use the free VS C++ Express | 
|  | 259 | Edition. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 260 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 261 | Profile Guided Optimization | 
|  | 262 | --------------------------- | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 263 |  | 
| Thomas Heller | 44c38c1 | 2008-01-10 18:45:40 +0000 | [diff] [blame] | 264 | The solution has two configurations for PGO. The PGInstrument | 
|  | 265 | configuration must be build first. The PGInstrument binaries are | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 266 | linked against a profiling library and contain extra debug | 
| Thomas Heller | 44c38c1 | 2008-01-10 18:45:40 +0000 | [diff] [blame] | 267 | information. The PGUpdate configuration takes the profiling data and | 
|  | 268 | generates optimized binaries. | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 269 |  | 
|  | 270 | The build_pgo.bat script automates the creation of optimized binaries. It | 
|  | 271 | creates the PGI files, runs the unit test suite or PyBench with the PGI | 
|  | 272 | python and finally creates the optimized files. | 
|  | 273 |  | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 274 | http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 275 |  | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 276 | Static library | 
|  | 277 | -------------- | 
|  | 278 |  | 
|  | 279 | The solution has no configuration for static libraries. However it is easy | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 280 | it build a static library instead of a DLL. You simply have to set the | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 281 | "Configuration Type" to "Static Library (.lib)" and alter the preprocessor | 
|  | 282 | macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may also have to | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 283 | change the "Runtime Library" from "Multi-threaded DLL (/MD)" to | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 284 | "Multi-threaded (/MT)". | 
|  | 285 |  | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 286 | Visual Studio properties | 
|  | 287 | ------------------------ | 
|  | 288 |  | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 289 | The PCbuild solution makes heavy use of Visual Studio property files | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 290 | (*.vsprops). The properties can be viewed and altered in the Property | 
|  | 291 | Manager (View -> Other Windows -> Property Manager). | 
|  | 292 |  | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 293 | * debug (debug macro: _DEBUG) | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 294 | * pginstrument (PGO) | 
|  | 295 | * pgupdate (PGO) | 
|  | 296 | +-- pginstrument | 
|  | 297 | * pyd (python extension, release build) | 
|  | 298 | +-- release | 
|  | 299 | +-- pyproject | 
|  | 300 | * pyd_d (python extension, debug build) | 
|  | 301 | +-- debug | 
|  | 302 | +-- pyproject | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 303 | * pyproject (base settings for all projects, user macros like PyDllName) | 
|  | 304 | * release (release macro: NDEBUG) | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 305 | * x64 (AMD64 / x64 platform specific settings) | 
|  | 306 |  | 
|  | 307 | The pyproject propertyfile defines _WIN32 and x64 defines _WIN64 and _M_X64 | 
|  | 308 | although the macros are set by the compiler, too. The GUI doesn't always know | 
|  | 309 | about the macros and confuse the user with false information. | 
|  | 310 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 311 | YOUR OWN EXTENSION DLLs | 
|  | 312 | ----------------------- | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 313 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 314 | If you want to create your own extension module DLL, there's an example | 
|  | 315 | with easy-to-follow instructions in ../PC/example/; read the file | 
|  | 316 | readme.txt there first. |