Compilation Guide for INMOST with PETSc linear solvers
INMOST may be configured with optional PETSc support. In this case INMOST will support calling linear solvers from PETSc package, i.e. you will be able to activate Solver::PETSc package in Solver::Solver constructor.
Download PETSc from http://www.mcs.anl.gov/petsc/download/index.html and unarchive to petsc_source_path. This guide is tested with PETSc version 3.5.2.
In order to compile PETSc you will need to obtain and install Cygwin with python and developer tools. You can obtain Cygwin from https://www.cygwin.com/, search for setup-x86.exe, or setup-x86_64.exe.
Official guide for compiling PETSc with Cygwin on Windows is available here:
http://www.mcs.anl.gov/petsc/documentation/installation.html#windows
Below presented minimalistic guide that uses only Visual Studio compiler and Microsoft MPI library.
Install Cygwin. When prompted to install Cygwin packages check Devel and Python packages to be installed.
In Windows Start menu search for Visual Studio Command Prompt or Visual Studio Win64 Command Prompt, depending on whether you want to generate 32-bit or 64-bit binaries.
From there run
c:\cygwin\bin\mintty.exe
or if your Cygwin installation path is different
cygwin_install_path\bin\mintty.exe
Type and run cl
command from appeared console, it should not complain that it cannot find any shared libraries.
Type export PATH="/usr/bin:$PATH"
command in console. This will let you use Cygwin binaries. Notice that '/usr/bin' should go first, this will make Cygwin binaries prefferable over binaries with matching names.
To avoid conflict between link.exe executables in Cygwin and Visual Studio run command mv /usr/bin/link.exe /usr/bin/link-cygwin.exe
. At the end we should not forget to return it back so that Cygwin will be still usable.
Now switch to the petsc_source_dir directory. Type bin/win32fe/win32fe.exe cl
it should return you some information on which flags can be passed to Visual Studio compiler. We just check that it works.
Now for win32fe.exe to be accessable from console type export PATH="$PATH:`pwd`/bin/win32fe"
. Check that you can run win32fe from console
Now we will run PETSc configure script. We will have to tell it where to find Microsoft MPI library. Typically it is installed to "C:\Program Files\Microsoft HPC Pack 2012". Assuming this folder is correct type the command to run PETSc configuration script:
./configure --with-cc="win32fe cl" --with-fc=0 --download-f2cblaslapack --with-mpi-include="/cygdrive/c/Program Files/Microsoft HPC Pack 2012/Inc/" --with-mpi-lib=['/cygdrive/c/Program Files/Microsoft HPC Pack 2012/Lib/amd64/msmpi.lib'] --with-mpi-mpiexec="/cygdrive/c/Program Files/Microsoft HPC Pack 2012/Bin/mpiexec.exe" --with-debugging=0 -CFLAGS='-O2 -MD -wd4996' -CXXFLAGS='-O2 -MD -wd4996'
Please note that there are also flags provided for compilers. First -O2
flag tells compiler to optimize everything, then -MD
tells which runtime library should be used. It is very important that runtime libraries match across all of your libraries, otherwise your final executable will not compile or running it will result in segmentation faults or heap corruption which will be really hard to resolve. Flag for runtime library provided here should match with flag in your final application as well as flag in INMOST library. The -wd4996
flag suppress specific compiler warning from output.
Be patient since configuration script takes quite a time. Once finished, PETSc script will provide you with some information on build options.
Copy and enter make command with PETSC_ARCH and PETSC_DIR as script output suggests you. You have to wait quite a while again while PETSc library is being built. Once finished, it will suggest you to run tests.
Fill free to skip this tests. Now you have finished with Cygwin, run command mv /usr/bin/cygwin-link.exe /usr/bin/link.exe
to reverse changes we made before and you may close Cygwin console.
Now open Notepad where you have memorized two variables: PETSC_DIR and PETSC_ARCH, which were told to you by PETSc configuration script. If you have not memorized them then go to petsc_source_directory open configure.log and search for those variables.
Open cmake-gui, switch to INMOST build directory and activate USE_SOLVER_PETSC checkbox.
Then click "Add Entry" button and add following entries:
PETSC_DIR of type PATH path to the directory of petsc source code
PETSC_ARCH of type STRING describing platform for which PETSc was built
If you have installed Cygwin not in standard location (It is normally installed to "c:\cygwin" or "c:\cygwin64") then you will have to provide
CYGWIN_INSTALL_PATH type PATH with the path to the directory where you have installed cygwin.
Now hit "Configure". Wait some time while PETSc run some tests and decide on compilable configuration. It should succeed at last.
Now click "Generate", reopen Visual Studio with INMOST library and rebuild it.
Please note that the cmake script for PETSc package that is used here was modified in order to handle spaces in names and correctly resolve required Cygwin executables. If you encounter any problem you can visit https://github.com/jedbrown/cmake-modules/ page and replace
FindPETSc.cmake
CorrectWindowsPaths.cmake
FindPackageMultipass.cmake
ResolveCompilerPaths.cmake
files in cmake_find directory.