Difference between revisions of "Building on Windows"
From GridPACK
(→Build Required Libraries) |
|||
Line 24: | Line 24: | ||
* In these instructions, everything is done from the Command Prompt. Open a 64-bit Visual Studio command prompt, which should be available from the Start Menu. Type, or copy and paste, the commands below into that command prompt window. | * In these instructions, everything is done from the Command Prompt. Open a 64-bit Visual Studio command prompt, which should be available from the Start Menu. Type, or copy and paste, the commands below into that command prompt window. | ||
− | * Choose a place to install libraries. <tt>C:\GridPACK</tt> is used in this case. Avoid a path with spaces or special characters in it. | + | * Choose a place to install libraries. <tt>C:\GridPACK</tt> is used in this case. Avoid a path with spaces or special characters in it. It's convenient to set an environment variable to hold this path. <tt>GridPACKDir</tt> is used here. |
* Make a folder there in which source archives can be unpacked and the builds can be performed. <tt>C:\GridPACK\src</tt> is used here. Again, avoid a path with spaces or special characters in it. | * Make a folder there in which source archives can be unpacked and the builds can be performed. <tt>C:\GridPACK\src</tt> is used here. Again, avoid a path with spaces or special characters in it. | ||
* Prepare prepare VS/CMake to use MPI. Enter the command | * Prepare prepare VS/CMake to use MPI. Enter the command | ||
Line 35: | Line 35: | ||
== Boost == | == Boost == | ||
+ | |||
+ | * Download source from [https://sourceforge.net/projects/boost/files/ here] and unpack in <tt>%GridPACKDir%\src</tt> | ||
+ | * Remember to <tt>set msmpi</tt> as described above | ||
+ | * Bootstrap the boost.build, e.g., | ||
+ | C:\GridPACK\src\boost_1_58_0>.\bootstrap.bat | ||
+ | * Add <tt>using mpi;</tt> to <tt>project-config.jam</tt> | ||
+ | * As you might imagine, Boost is not built on Windows with MPI often. Consequently, it's a little out of date. The file <tt>mpi.jam</tt> needs to be modified. It's in a different place depending on the version. In Boost 1.61 it is <tt>./tools/build/src/tools/mpi.jam</tt>. Modify <tt>mpi.jam</tt> to make it work using the following patch: | ||
+ | 247a248,250 | ||
+ | > local win_ms_mpi_sdk = "C:\\Program Files (x86)\\Microsoft SDKs\\MPI" ; | ||
+ | > local win_ms_mpi = "C:\\Program Files\\Microsoft MPI" ; | ||
+ | > | ||
+ | 249,251c252,254 | ||
+ | < local cluster_pack_path_native = "C:\\Program Files\\Microsoft Compute Cluster Pack" ; | ||
+ | < local cluster_pack_path = [ path.make $(cluster_pack_path_native) ] ; | ||
+ | < if [ GLOB $(cluster_pack_path_native)\\Include : mpi.h ] | ||
+ | --- | ||
+ | > # local cluster_pack_path_native = "C:\\Program Files\\Microsoft Compute Cluster Pack" ; | ||
+ | > # local cluster_pack_path = [ path.make $(cluster_pack_path_native) ] ; | ||
+ | > if [ GLOB $(win_ms_mpi_sdk)\\Include : mpi.h ] | ||
+ | 255c258 | ||
+ | < ECHO "Found Microsoft Compute Cluster Pack: $(cluster_pack_path_native)" ; | ||
+ | --- | ||
+ | > ECHO "Found Microsoft Compute Cluster Pack: $(win_ms_mpi_sdk)" ; | ||
+ | 260,262c263,265 | ||
+ | < options = <include>$(cluster_pack_path)/Include | ||
+ | < <address-model>64:<library-path>$(cluster_pack_path)/Lib/amd64 | ||
+ | < <library-path>$(cluster_pack_path)/Lib/i386 | ||
+ | --- | ||
+ | > options = <include>$(win_ms_mpi_sdk)/Include | ||
+ | > <address-model>64:<library-path>$(win_ms_mpi_sdk)/Lib/x64 | ||
+ | > <library-path>$(win_ms_mpi_sdk)/Lib/x86 | ||
+ | 268c271 | ||
+ | < .mpirun = "\"$(cluster_pack_path_native)\\Bin\\mpiexec.exe"\" ; | ||
+ | --- | ||
+ | > .mpirun = "\"$(win_ms_mpi)\\Bin\\mpiexec.exe"\" ; | ||
+ | |||
+ | * Configure, build, and install. The <tt>python</tt> library is not needed; <tt>iostreams</tt> is skipped unless some additional libraries are installed; <tt>graph_parallel</tt> fails to build (see [https://svn.boost.org/trac/boost/ticket/11908 this ticket]). There are two options for building: | ||
+ | ** Option 1: just build what GridPACK requires (header-only libraries are still installed) | ||
+ | .\b2 ^ | ||
+ | --prefix=%GridPACKDir% ^ | ||
+ | --toolset=msvc-11.0 ^ | ||
+ | --with-mpi ^ | ||
+ | --with-serialization ^ | ||
+ | --with-random ^ | ||
+ | --with-filesystem ^ | ||
+ | --with-system ^ | ||
+ | --build-type=complete ^ | ||
+ | threading=single ^ | ||
+ | address-model=64 ^ | ||
+ | link=static runtime-link=shared ^ | ||
+ | install | ||
+ | [...] | ||
+ | ...updated 12553 targets... | ||
+ | ** Option 2: build everything (except python -- I'm not sure what's required for that) | ||
+ | C:\GridPACK\src\boost_1_61_0>.\b2 ^ | ||
+ | --prefix=%GridPACKDir% ^ | ||
+ | --without-python ^ | ||
+ | --build-type=complete ^ | ||
+ | threading=single ^ | ||
+ | address-model=64 ^ | ||
+ | link=static runtime-link=shared ^ | ||
+ | install | ||
+ | [...] | ||
+ | ...updated 12553 targets... | ||
+ | |||
Notes: | Notes: |
Revision as of 18:45, 6 December 2016
Building GridPACK on Windows is not for the faint of heart.
Contents
System Preparation
The following are available as native Windows applications and can just be installed in the normal Windows way:
- Visual C++ in some form.
- The "free" ones, Visual Studio Express and Community, should work.
- Windows SDK
Usually, this is just installed with Visual Studio - CMake is required
- A minimal Cygwin installation is necessary.
Cygwin is required to build, and test for, PETSc. If the system has a Cygwin installation that is being used, it would probably be best to make another installation for GridPACK installation exclusively.- Minimum required packages:
- Base
- Python
- Rename /usr/bin/link.exe so it does not interfere with Windows LINK.EXE
- If you want to use a Cygwin shell to build and/or debug GridPACK applications:
- Do not install a compiler set.
- Do not install CMake.
- Minimum required packages:
- Microsoft MPI
This appears to be the only modern implementation available for Windows. In the past, the OpenMPI and MPICH implementation were available for Windows, but no more. - Some software to unpack .zip, .gz, and tar archives. Commands to unpack all of these archives are available with Cygwin. Windows can handle .zip archives natively.
- (optional) MS-MPI Debugger Extension is useful for debugging problem with parallel programs.
Build Required Libraries
- In these instructions, everything is done from the Command Prompt. Open a 64-bit Visual Studio command prompt, which should be available from the Start Menu. Type, or copy and paste, the commands below into that command prompt window.
- Choose a place to install libraries. C:\GridPACK is used in this case. Avoid a path with spaces or special characters in it. It's convenient to set an environment variable to hold this path. GridPACKDir is used here.
- Make a folder there in which source archives can be unpacked and the builds can be performed. C:\GridPACK\src is used here. Again, avoid a path with spaces or special characters in it.
- Prepare prepare VS/CMake to use MPI. Enter the command
set msmpi
the response should be something like
MSMPI_BIN=C:\Program Files\Microsoft MPI\Bin\ MSMPI_INC=C:\Program Files (x86)\Microsoft SDKs\MPI\Include\ MSMPI_LIB32=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x86\ MSMPI_LIB64=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64\
Boost
- Download source from here and unpack in %GridPACKDir%\src
- Remember to set msmpi as described above
- Bootstrap the boost.build, e.g.,
C:\GridPACK\src\boost_1_58_0>.\bootstrap.bat
- Add using mpi; to project-config.jam
- As you might imagine, Boost is not built on Windows with MPI often. Consequently, it's a little out of date. The file mpi.jam needs to be modified. It's in a different place depending on the version. In Boost 1.61 it is ./tools/build/src/tools/mpi.jam. Modify mpi.jam to make it work using the following patch:
247a248,250 > local win_ms_mpi_sdk = "C:\\Program Files (x86)\\Microsoft SDKs\\MPI" ; > local win_ms_mpi = "C:\\Program Files\\Microsoft MPI" ; > 249,251c252,254 < local cluster_pack_path_native = "C:\\Program Files\\Microsoft Compute Cluster Pack" ; < local cluster_pack_path = [ path.make $(cluster_pack_path_native) ] ; < if [ GLOB $(cluster_pack_path_native)\\Include : mpi.h ] --- > # local cluster_pack_path_native = "C:\\Program Files\\Microsoft Compute Cluster Pack" ; > # local cluster_pack_path = [ path.make $(cluster_pack_path_native) ] ; > if [ GLOB $(win_ms_mpi_sdk)\\Include : mpi.h ] 255c258 < ECHO "Found Microsoft Compute Cluster Pack: $(cluster_pack_path_native)" ; --- > ECHO "Found Microsoft Compute Cluster Pack: $(win_ms_mpi_sdk)" ; 260,262c263,265 < options = <include>$(cluster_pack_path)/Include < <address-model>64:<library-path>$(cluster_pack_path)/Lib/amd64 < <library-path>$(cluster_pack_path)/Lib/i386 --- > options = <include>$(win_ms_mpi_sdk)/Include > <address-model>64:<library-path>$(win_ms_mpi_sdk)/Lib/x64 > <library-path>$(win_ms_mpi_sdk)/Lib/x86 268c271 < .mpirun = "\"$(cluster_pack_path_native)\\Bin\\mpiexec.exe"\" ; --- > .mpirun = "\"$(win_ms_mpi)\\Bin\\mpiexec.exe"\" ;
- Configure, build, and install. The python library is not needed; iostreams is skipped unless some additional libraries are installed; graph_parallel fails to build (see this ticket). There are two options for building:
- Option 1: just build what GridPACK requires (header-only libraries are still installed)
.\b2 ^ --prefix=%GridPACKDir% ^ --toolset=msvc-11.0 ^ --with-mpi ^ --with-serialization ^ --with-random ^ --with-filesystem ^ --with-system ^ --build-type=complete ^ threading=single ^ address-model=64 ^ link=static runtime-link=shared ^ install [...] ...updated 12553 targets...
- Option 2: build everything (except python -- I'm not sure what's required for that)
C:\GridPACK\src\boost_1_61_0>.\b2 ^ --prefix=%GridPACKDir% ^ --without-python ^ --build-type=complete ^ threading=single ^ address-model=64 ^ link=static runtime-link=shared ^ install [...] ...updated 12553 targets...
Notes:
- 1.58.0 works with VS 2013
- 1.61.0 works with VS 2010, but requires update 5 for VS 2013 (see this ticket)
- Boost decorates the library names with the compiler version, so explicitly specify the compiler and make sure that's the compiler you use for GridPACK.
- Some references for these instructions:
- A pretty complete set of instructions for building Boost on Windows with MPI
- Some additional details.
- Official Boost build instructions.
- A pertinent Boost ticket.
BLAS/LAPACK (CLAPACK)
Some implementation of BLAS/LAPACK is required for PETSc and some other libraries. The implementation described here was chosen because it does not require a Fortran compiler. It is apparently really slow. It will probably be necessary to install Intel compilers and MKL in order to get improvement in speed. The Windows port of CLAPACK is described here.
- Get the source here.
- Configure, build, and install
set prefix="C:\GridPACK" cmake -Wdev ^ -G "Visual Studio 10 2010 Win64" ^ -D CMAKE_INSTALL_PREFIX:PATH="%prefix%" ^ .. cmake --build . --config Release cmake --build . --target install --config Release