.. _build_windows:
Build for MS Windows
====================
Prerequisites
-------------
- CMake (>= 3.12.0)
- Microsoft Visual Studio 2015 (Community Edition, or better)
- Optional: MATLAB R2009a or greater
- Optional: Git
- Optional: Intel MKL
- Optional: TBB
Assumed directory structure:
.. raw:: html
<ROOT>
|-Libs
| |- sundials
| |- hdf5
| |- lapack
| |- suitesparse
| |- tbb
|-code
|-cadet
|-build
Note that the version numbers of the files and packages below are
subject to change and will not always reflect the most recent version.
In the following, we will use Visual Studio 2019 and CMake 3.17.0. We
also assume that Intel MKL is installed.
Build dependencies
------------------
HDF5
~~~~
- Make sure that no HDF5 libraries are installed (remove already
existing HDF5 installations)
- Download CMake-enabled source from
https://www.hdfgroup.org/downloads/hdf5/source-code/
- Unzip and make sure that the directory path does not contain blank
spaces
- Open VS2019x64 Command Prompt and change to the unzipped directory
- Execute
``ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201964,INSTALLDIR="\Libs\hdf5" -C Release -V``
- Extract the created ``HDF5-1.12.0-win64.zip`` file to
``/Libs/hdf5`` such that you have ``/Libs/hdf5/lib``
SUNDIALS
~~~~~~~~
- Download SUNDIALS source from
http://computation.llnl.gov/projects/sundials/sundials-software
(version <= 3.2.1)
- Unzip
- Open VS2019x64 Command Prompt and change to the parent directory of
the unzipped directory
- Create a new folder ``sundialsbuild`` and change to it
- Execute
``cmake -DCMAKE_INSTALL_PREFIX="\Libs\sundials" -DEXAMPLES_ENABLE=OFF -DOPENMP_ENABLE=ON -DBUILD_SHARED_LIBS=OFF -G "Visual Studio 16 2019" -A x64 -DCMAKE_C_FLAGS="/GL" -DCMAKE_STATIC_LINKER_FLAGS="/LTCG" -DCMAKE_BUILD_TYPE=Release ..\sundials-3.2.1\``
- Execute
``msbuild.exe INSTALL.vcxproj /p:Configuration=Release;Platform=x64``
LAPACK
~~~~~~
In the following, CLAPACK is built and used. You can also install the
freely available `Intel
MKL `__ which is very
fast and certainly much faster than CLAPACK. If MKL is used, skip this
step.
- Download ``clapack-3.2.1-CMAKE.tgz`` from
https://icl.cs.utk.edu/lapack-for-windows/clapack/index.html#build
and unzip
- Open VS2019x64 Command Prompt and change to the parent directory of
the unzipped directory
- Create a new folder ``clapackbuild`` and change to it
- Execute
``cmake -DCMAKE_INSTALL_PREFIX="\Libs\clapack" -G "Visual Studio 16 2019" -A x64 -DCMAKE_C_FLAGS="/GL" -DCMAKE_CXX_FLAGS="/GL" -DCMAKE_STATIC_LINKER_FLAGS="/LTCG" ..\clapack-3.2.1-``
- Execute
``msbuild.exe CLAPACK.sln /p:Configuration=Release;Platform=x64``
- Execute
``msbuild.exe INSTALL.vcxproj /p:Configuration=Release;Platform=x64``
- Rename ``\Libs\clapack\lib\libf2c.lib`` to
``\Libs\clapack\lib\f2c.lib``
TBB
~~~
- Download a release from https://github.com/oneapi-src/oneTBB/releases
- Unzip to ``/Libs/tbb`` such that you have
``/Libs/tbb/README``
SuiteSparse
~~~~~~~~~~~
- Download SuiteSparse source from
http://faculty.cse.tamu.edu/davis/suitesparse.html
- Download CMake build system source from
https://github.com/jlblancoc/suitesparse-metis-for-windows
- Unzip both into the same directory such that there are
``\SuiteSparse-5.7.1`` and
``\suitesparse-metis-for-windows-master``
- Open VS2019x64 Command Prompt and change to the directory ````
that contains both unzipped directories
- Copy all SuiteSparse source files from ``\SuiteSparse-5.7.1`` to
``\suitesparse-metis-for-windows-master\SuiteSparse`` via
``xcopy .\SuiteSparse-5.7.1 .\suitesparse-metis-for-windows-master\SuiteSparse /s /e /y``
- Delete the directory
``\suitesparse-metis-for-windows-master\lapack_windows``
- Create a new folder ``suitesparsebuild`` and change to it
- If using MKL, execute
``set MKLROOT=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2020.0.166\windows\mkl``
- Using CLAPACK: Execute
``cmake -DCMAKE_INSTALL_PREFIX="\Libs\suitesparse" -DCMAKE_LIBRARY_PATH="\Libs\clapack\lib" -DBLA_STATIC=ON -G "Visual Studio 16 2019" -A x64 -DCMAKE_C_FLAGS="/GL" -DCMAKE_STATIC_LINKER_FLAGS="/LTCG" -DCMAKE_BUILD_TYPE=Release -DBUILD_METIS=OFF ..\suitesparse-metis-for-windows-master\``
Using MKL (sequential): Execute
``cmake -DCMAKE_INSTALL_PREFIX="\Libs\suitesparse" -DBLA_VENDOR=Intel10_64lp_seq -DBLA_STATIC=ON -G "Visual Studio 16 2019" -A x64 -DCMAKE_C_FLAGS="/GL" -DCMAKE_STATIC_LINKER_FLAGS="/LTCG" -DCMAKE_BUILD_TYPE=Release -DBUILD_METIS=OFF ..\suitesparse-metis-for-windows-master\``
- Execute
``msbuild.exe INSTALL.vcxproj /p:Configuration=Release;Platform=x64``
Build CADET
-----------
- Download release of CADET or checkout from git
- Place the source in ``\code`` and create the directory
``\build``
- Open VS2019x64 Command Prompt and change to ``\build``
- Execute ``set SUNDIALS_ROOT=\Libs\sundials``
- Execute ``set UMFPACK_ROOT=\Libs\suitesparse``
- Execute ``set TBB_ROOT=\Libs\tbb``
- Execute ``set HDF5_ROOT=\Libs\hdf5``
- If using MKL, execute
``set MKLROOT=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2020.0.166\windows\mkl``
- Using CLAPACK: Execute
``cmake -DCMAKE_INSTALL_PREFIX="\cadet" -DBUILD_TESTS=OFF -DCMAKE_LIBRARY_PATH="\Libs\clapack\lib" -G "Visual Studio 16 2019" -A x64 -DBLA_VENDOR=CLAPACK -DENABLE_STATIC_LINK_LAPACK=ON ..\code\``
Using MKL (sequential): Execute
``cmake -DCMAKE_INSTALL_PREFIX="\cadet" -DBUILD_TESTS=OFF -G "Visual Studio 16 2019" -A x64 -DBLA_VENDOR=Intel10_64lp_seq -DENABLE_STATIC_LINK_LAPACK=ON ..\code\``
Using MKL (parallel): Execute
``cmake -DCMAKE_INSTALL_PREFIX="\cadet" -DBUILD_TESTS=OFF -G "Visual Studio 16 2019" -A x64 -DBLA_VENDOR=Intel10_64lp -DENABLE_STATIC_LINK_LAPACK=ON ..\code\``
- Execute
``msbuild.exe INSTALL.vcxproj /p:Configuration=Release;Platform=x64``
- If CADET does not start (i.e., ``cadet-cli`` does not run), try
copying ``\Libs\tbb\bin\intel64\vc14\tbb_preview.dll`` to the
directory that contains ``cadet-cli`` (i.e., ``\cadet\bin\``)
- If the MATLAB interface does not work, try copying
``\Libs\tbb\bin\intel64\vc14\tbb_preview.dll`` to the directory
that contains ``CadetMex.mexw64`` (i.e.,
``\cadet\matlab\bin\``)