| 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 |  | 
| Martin v. Loewis | 18613e6 | 2013-03-22 22:01:56 +0100 | [diff] [blame] | 135 |     svn export http://svn.python.org/projects/external/openssl-0.9.8y | 
| 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 | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 147 |     for x86 builds.  Put nasm.exe anywhere in your PATH. | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 148 |  | 
 | 149 |     You can also install ActivePerl from | 
| Hirokazu Yamamoto | 59734be | 2010-12-09 08:01:18 +0000 | [diff] [blame] | 150 |         http://www.activestate.com/activeperl/ | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 151 |     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] | 152 |     python's subversion repository. The svn version contains pre-build | 
 | 153 |     makefiles and assembly files. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 154 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 155 |     The build process makes sure that no patented algorithms are included. | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 156 |     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] | 157 |     to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if the build process | 
 | 158 |     complains about missing files or forbidden IDEA. Again the files provided | 
 | 159 |     in the subversion repository are already fixed. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 160 |  | 
 | 161 |     The MSVC project simply invokes PCBuild/build_ssl.py to perform | 
 | 162 |     the build.  This Python script locates and builds your OpenSSL | 
 | 163 |     installation, then invokes a simple makefile to build the final .pyd. | 
 | 164 |  | 
 | 165 |     build_ssl.py attempts to catch the most common errors (such as not | 
 | 166 |     being able to find OpenSSL sources, or not being able to find a Perl | 
 | 167 |     that works with OpenSSL) and give a reasonable error message. | 
 | 168 |     If you have a problem that doesn't seem to be handled correctly | 
 | 169 |     (eg, you know you have ActivePerl but we can't find it), please take | 
 | 170 |     a peek at build_ssl.py and suggest patches.  Note that build_ssl.py | 
 | 171 |     should be able to be run directly from the command-line. | 
 | 172 |  | 
 | 173 |     build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do | 
 | 174 |     this by hand. | 
 | 175 |  | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 176 | The subprojects above wrap external projects Python doesn't control, and as | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 177 | 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] | 178 | 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] | 179 | 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] | 180 | external-amd64.bat in the ..\Tools\buildbot directory from ..\, i.e.: | 
 | 181 |  | 
 | 182 |     C:\..\svn.python.org\projects\python\trunk\PCbuild>cd .. | 
 | 183 |     C:\..\svn.python.org\projects\python\trunk>Tools\buildbot\external.bat | 
 | 184 |  | 
 | 185 | This extracts all the external subprojects from http://svn.python.org/external | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 186 | 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] | 187 | ..\.. (relative to this directory).  The external(-amd64).bat scripts will | 
 | 188 | also build a debug build of Tcl/Tk; there aren't any equivalent batch files | 
 | 189 | for building release versions of Tcl/Tk lying around in the Tools\buildbot | 
 | 190 | directory.  If you need to build a release version of Tcl/Tk it isn't hard | 
 | 191 | though, take a look at the relevant external(-amd64).bat file and find the | 
 | 192 | two nmake lines, then call each one without the 'DEBUG=1' parameter, i.e.: | 
 | 193 |  | 
 | 194 | The external-amd64.bat file contains this for tcl: | 
 | 195 |     nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install | 
 | 196 |  | 
 | 197 | So for a release build, you'd call it as: | 
 | 198 |     nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install | 
 | 199 |  | 
 | 200 |     XXX Should we compile with OPTS=threads? | 
 | 201 |     XXX Our installer copies a lot of stuff out of the Tcl/Tk install | 
 | 202 |     XXX directory.  Is all of that really needed for Python use of Tcl/Tk? | 
 | 203 |  | 
 | 204 | This will be cleaned up in the future; ideally Tcl/Tk will be brought into our | 
 | 205 | 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] | 206 | _bsddb.vcproj and sqlite3.vcproj files, which will remove the need for | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 207 | Tcl/Tk to be built separately via a batch file. | 
 | 208 |  | 
 | 209 | XXX trent.nelson 02-Apr-08: | 
 | 210 |     Having the external subprojects in ..\.. relative to this directory is a | 
 | 211 |     bit of a nuisance when you're working on py3k and trunk in parallel and | 
 | 212 |     your directory layout mimics that of Python's subversion layout, e.g.: | 
 | 213 |  | 
 | 214 |         C:\..\svn.python.org\projects\python\trunk | 
 | 215 |         C:\..\svn.python.org\projects\python\branches\py3k | 
 | 216 |         C:\..\svn.python.org\projects\python\branches\release25-maint | 
 | 217 |  | 
 | 218 |     I'd like to change things so that external subprojects are fetched from | 
 | 219 |     ..\external instead of ..\.., then provide some helper scripts or batch | 
 | 220 |     files that would set up a new ..\external directory with svn checkouts of | 
 | 221 |     the relevant branches in http://svn.python.org/projects/external/, or | 
 | 222 |     alternatively, use junctions to link ..\external with a pre-existing | 
 | 223 |     externals directory being used by another branch.  i.e. if I'm usually | 
 | 224 |     working on trunk (and have previously created trunk\external via the | 
 | 225 |     provided batch file), and want to do some work on py3k, I'd set up a | 
 | 226 |     junction as follows (using the directory structure above as an example): | 
 | 227 |  | 
 | 228 |         C:\..\python\trunk\external <- already exists and has built versions | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 229 |                                        of the external subprojects | 
| Trent Nelson | dbc114a | 2008-04-02 15:01:00 +0000 | [diff] [blame] | 230 |  | 
 | 231 |         C:\..\python\branches\py3k>linkd.exe external ..\..\trunk\external | 
 | 232 |         Link created at: external | 
 | 233 |  | 
 | 234 |     Only a slight tweak would be needed to the buildbots such that bots | 
 | 235 |     building trunk and py3k could make use of the same facility.  (2.5.x | 
 | 236 |     builds need to be kept separate as they're using Visual Studio 7.1.) | 
 | 237 | /XXX trent.nelson 02-Apr-08 | 
 | 238 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 239 | Building for Itanium | 
 | 240 | -------------------- | 
 | 241 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 242 | Official support for Itanium builds have been dropped from the build. Please | 
| Christian Heimes | 95d6447 | 2008-02-09 19:55:22 +0000 | [diff] [blame] | 243 | contact us and provide patches if you are interested in Itanium builds. | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 244 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 245 | Building for AMD64 | 
 | 246 | ------------------ | 
 | 247 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 248 | 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] | 249 | have to set x64 as platform. In addition, the HOST_PYTHON environment variable | 
 | 250 | 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] | 251 |  | 
 | 252 | Building Python Using the free MS Toolkit Compiler | 
 | 253 | -------------------------------------------------- | 
 | 254 |  | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 255 | Microsoft has withdrawn the free MS Toolkit Compiler, so this can no longer | 
 | 256 | be considered a supported option. Instead you can use the free VS C++ Express | 
 | 257 | Edition. | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 258 |  | 
| Christian Heimes | 8b01140 | 2007-11-27 21:28:40 +0000 | [diff] [blame] | 259 | Profile Guided Optimization | 
 | 260 | --------------------------- | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 261 |  | 
| Thomas Heller | 44c38c1 | 2008-01-10 18:45:40 +0000 | [diff] [blame] | 262 | The solution has two configurations for PGO. The PGInstrument | 
 | 263 | configuration must be build first. The PGInstrument binaries are | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 264 | linked against a profiling library and contain extra debug | 
| Thomas Heller | 44c38c1 | 2008-01-10 18:45:40 +0000 | [diff] [blame] | 265 | information. The PGUpdate configuration takes the profiling data and | 
 | 266 | generates optimized binaries. | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 267 |  | 
 | 268 | The build_pgo.bat script automates the creation of optimized binaries. It | 
 | 269 | creates the PGI files, runs the unit test suite or PyBench with the PGI | 
 | 270 | python and finally creates the optimized files. | 
 | 271 |  | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 272 | http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 273 |  | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 274 | Static library | 
 | 275 | -------------- | 
 | 276 |  | 
 | 277 | The solution has no configuration for static libraries. However it is easy | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 278 | 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] | 279 | "Configuration Type" to "Static Library (.lib)" and alter the preprocessor | 
 | 280 | 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] | 281 | change the "Runtime Library" from "Multi-threaded DLL (/MD)" to | 
| Christian Heimes | 3971f6b | 2007-11-30 19:18:08 +0000 | [diff] [blame] | 282 | "Multi-threaded (/MT)". | 
 | 283 |  | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 284 | Visual Studio properties | 
 | 285 | ------------------------ | 
 | 286 |  | 
| Zachary Ware | e0afd8e | 2013-11-03 21:43:33 -0600 | [diff] [blame] | 287 | The PCbuild solution makes heavy use of Visual Studio property files | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 288 | (*.vsprops). The properties can be viewed and altered in the Property | 
 | 289 | Manager (View -> Other Windows -> Property Manager). | 
 | 290 |  | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 291 |  * debug (debug macro: _DEBUG) | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 292 |  * pginstrument (PGO) | 
 | 293 |  * pgupdate (PGO) | 
 | 294 |     +-- pginstrument | 
 | 295 |  * pyd (python extension, release build) | 
 | 296 |     +-- release | 
 | 297 |     +-- pyproject | 
 | 298 |  * pyd_d (python extension, debug build) | 
 | 299 |     +-- debug | 
 | 300 |     +-- pyproject | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 301 |  * pyproject (base settings for all projects, user macros like PyDllName) | 
 | 302 |  * release (release macro: NDEBUG) | 
| Christian Heimes | 1867994 | 2007-12-05 21:57:25 +0000 | [diff] [blame] | 303 |  * x64 (AMD64 / x64 platform specific settings) | 
 | 304 |  | 
 | 305 | The pyproject propertyfile defines _WIN32 and x64 defines _WIN64 and _M_X64 | 
 | 306 | although the macros are set by the compiler, too. The GUI doesn't always know | 
 | 307 | about the macros and confuse the user with false information. | 
 | 308 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 309 | YOUR OWN EXTENSION DLLs | 
 | 310 | ----------------------- | 
| Christian Heimes | 3d2f564 | 2007-12-06 21:13:06 +0000 | [diff] [blame] | 311 |  | 
| Christian Heimes | e8954f8 | 2007-11-22 11:21:16 +0000 | [diff] [blame] | 312 | If you want to create your own extension module DLL, there's an example | 
 | 313 | with easy-to-follow instructions in ../PC/example/; read the file | 
 | 314 | readme.txt there first. |