cantera/doc/sphinx/compiling.rst
2017-01-12 13:43:39 -05:00

835 lines
26 KiB
ReStructuredText

.. _sec-compiling:
*************************
Cantera Compilation Guide
*************************
.. toctree::
:hidden:
SCons Configuration Options <configuring>
This guide contains instructions for compiling Cantera on the following
operating systems:
* `Linux`_
* :ref:`sec-ubuntu-debian-reqs`
* :ref:`sec-fedora-reqs`
* :ref:`sec-opensuse-reqs`
* `Windows`_
* :ref:`sec-windows-reqs`
* `OS X`_
* :ref:`sec-mac-os-reqs`
In addition to the above operating systems, Cantera should work on any
Unix-like system where the necessary prerequisites are available, but some
additional configuration may be required.
Installation Prerequisites
==========================
Linux
-----
General Notes
^^^^^^^^^^^^^
* To download the source code, installing ``git`` is highly recommended.
* SCons is only available for Python 2, so building the Python 3 module requires
two installations of Python (one of Python 2 and one of Python 3), even if you
do not intend to build the Python 2 module.
* The following instructions use the system-installed versions of Python, but
alternate installations such as the Anaconda distribution of Python can be
used as well.
* Cython is only required to be installed for the version of Python that also
has SCons installed; following the instructions below will install Cython for
the version of Python 2 installed in the system directories. The minimum
compatible Cython version is 0.23. If your distribution does not contain a
suitable version, you may be able to install a more recent version using
``pip``.
* Users of other distributions should install the equivalent packages, which
may have slightly different names.
.. _sec-ubuntu-debian-reqs:
Ubuntu & Debian
^^^^^^^^^^^^^^^
* Ubuntu 12.04 LTS (Precise Pangolin) or newer is required; 16.04 LTS (Xenial Xerus)
or newer is recommended
* Debian 7.0 (Wheezy) or newer; 8.0 (Jessie) or newer is recommended
* The following packages must be installed to build any of the Cantera modules using
your choice of package manager::
g++ python scons libboost-dev
* In addition to the general packages, building the Python 2 module also requires::
cython python-dev python-numpy python-numpy-dev python-setuptools
* In addition to the general packages, building the Python 3 module also requires::
cython python3 python3-dev python3-setuptools python3-numpy
* In addition to the general packages, building the Fortran module also requires::
gfortran
* In addition to the general packages, building the MATLAB toolbox also requires::
* MATLAB version later than 2009a
* Typically installed to::
/opt/MATLAB/R20YYn
where ``YY`` is a two digit year and ``n`` is either ``a`` or ``b``
.. _sec-fedora-reqs:
Fedora & RHEL
^^^^^^^^^^^^^
* The following packages must be installed to build any of the Cantera modules using
your choice of package manager::
gcc-c++ python scons boost-devel
* In addition to the general packages, building the Python 2 module also requires::
python-setuptools python-devel Cython numpy
* In addition to the general packages, building the Python 3 module also requires::
python3 python3-setuptools python3-devel Cython python3-numpy
* In addition to the general packages, building the Fortran module also requires::
gcc-gfortran
* In addition to the general packages, building the MATLAB toolbox also requires::
* MATLAB version later than 2009a
* Typically installed to::
/opt/MATLAB/R20YYn
where ``YY`` is a two digit year and ``n`` is either ``a`` or ``b``
.. _sec-opensuse-reqs:
OpenSUSE & SUSE Linux Enterprise
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* OpenSUSE 13.2 or newer; Leap 42.2 or newer recommended
* The following packages must be installed to build any of the Cantera modules using
your choice of package manager::
gcc-c++ python scons boost-devel
* In addition to the general packages, building the Python 2 module also requires::
python-Cython python-devel python-numpy python-numpy-devel python-setuptools
* In addition to the general packages, building the Python 3 module also requires::
python-Cython python3 python3-devel python3-setuptools python3-numpy python3-numpy-devel
* In addition to the general packages, building the Fortran module also requires::
gcc-fortran
* In addition to the general packages, building the MATLAB toolbox also requires::
* MATLAB version later than 2009a
* Typically installed to::
/opt/MATLAB/R20YYn
where ``YY`` is a two digit year and ``n`` is either ``a`` or ``b``
Windows
-------
General Notes
^^^^^^^^^^^^^
* SCons is only available for Python 2, so building the Python 3 module requires
two installations of Python (one of Python 2 and one of Python 3), even if you
do not intend to build the Python 2 module.
* The build process will produce a Python module compatible with the version of
Python used for the compilation. To generate different modules for other
versions of Python, you will need to install those versions of Python and
recompile.
* The following instructions use the versions of Python downloaded from
https://www.python.org/downloads, but alternate installations such as the
Anaconda distribution of Python can be used as well.
* If you want to build the Matlab toolbox and you have a 64-bit copy of Windows,
by default you will be using a 64-bit copy of Matlab, and therefore you need
to compile Cantera in 64-bit mode. For simplicity, it is highly recommended
that you use a 64-bit version of Python to handle this automatically. Note
that the default download from the Python website
(https://www.python.org) is for a 32-bit installer, and you will
need to select the 64-bit installer specifically.
* It is generally helpful to have SCons and Python in your ``PATH`` environment
variable. This can be done by checking the appropriate box during the
installation of Python or can be accomplished by adding the top-level Python
directory and the ``Scripts`` subdirectory (e.g.,
``C:\Python27;C:\Python27\Scripts``) to your ``PATH``. The dialog to change
the ``PATH`` is accessible from::
Control Panel > System and Security > System > Advanced System Settings > Environment Variables
Make sure that the installation of Python that has SCons comes first on your
``PATH``.
* In order to use SCons to install Cantera to a system folder (e.g. ``C:\Program
Files\Cantera``) you must run the ``scons install`` command in a command
prompt that has been launched by selecting the *Run as Administrator* option.
.. _sec-windows-reqs:
Windows Requirements
^^^^^^^^^^^^^^^^^^^^^^^
* Windows 7 or later; either 32-bit or 64-bit
* To build any of the Cantera modules, you will need to install
* Python 2.7
* https://www.python.org/downloads/
* Be sure to choose the appropriate architecture for your system - either
32-bit or 64-bit
* When installing, make sure to choose the option to add to your ``PATH``
* SCons
* https://pypi.python.org/pypi/SCons
* Be sure to choose the appropriate architecture for your system - either
32-bit or 64-bit
* One of the following supported compilers
* Microsoft compilers
* https://www.visualstudio.com/downloads/
* Known to work with Visual Studio 2013 (MSVC 12.0) and Visual Studio 2015
(MSVC 14.0)
* MinGW compilers
* http://mingw-w64.org/
* Known to work with Mingw-w64 3.0, which provides GCC 4.8. Expected to
work with any version that provides a supported version of GCC and
includes C++11 thread support.
* The version of MinGW from http://www.mingw.org/ is 32-bit only and
therefore cannot be used to build a 64-bit module. Versions of
MinGW that provide a 64-bit compiler are available from
http://mingw-w64.org/
* The Boost headers
* http://www.boost.org/doc/libs/1_63_0/more/getting_started/windows.html#get-boost
* It is not necessary to compile the Boost libraries since Cantera only uses
the headers from Boost
* In addition to the general software, building the Python 2 module also requires
* Pip
* Pip should be distributed with Python version 2.7.9 and higher.
If you are using an older version of Python, see
`these instructions to install pip <http://stackoverflow.com/a/12476379>`_
* Most packages will be downloaded as Wheel (``*.whl``) files. To install
these files, type::
pip install C:\Path\to\downloaded\file\package-file-name.whl
* Cython
* http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython
* Download the ``*.whl`` file for your Python architecture (32-bit or 64-bit)
and Python 2.7 (indicated by ``cp27`` in the file name).
* Cython must be installed in the version of Python that has SCons installed
* NumPy
* http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
* Download the ``*.whl`` file for your Python architecture (32-bit or 64-bit)
and Python 2.7 (indicated by ``cp27`` in the file name).
* In addition to the general software, building the Python 3 module also requires
* Python 3
* https://www.python.org/downloads/
* Cantera supports Python 3.3 and higher
* Be sure to choose the appropriate architecture for your system - either
32-bit or 64-bit
* Be careful that the installation of Python 3 does not come before Python 2
on your ``PATH`` environment variable
* Pip
* Pip should be distributed with Python version 3.4 and higher.
If you are using an older version of Python, see
`these instructions to install pip <http://stackoverflow.com/a/12476379>`_
* Most packages will be downloaded as Wheel (``*.whl``) files. To install
these files, type::
pip3 install C:\Path\to\downloaded\file\package-file-name.whl
* Cython
* http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython
* Download the ``*.whl`` file for your Python architecture (32-bit or 64-bit)
and Python 2.7 (indicated by ``cp27`` in the file name).
* Cython must be installed in the version of Python that has SCons installed
* NumPy
* http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
* Download the ``*.whl`` file for your Python architecture (32-bit or 64-bit)
and Python 3.x (indicated by ``cp3x`` in the file name, where x matches
your version of Python).
* In addition to the general software, building the MATLAB toolbox also requires::
* MATLAB version later than 2009a
* Typically installed to::
C:\Program Files\MATLAB\R20YYn
where ``YY`` is a two digit year and ``n`` is either ``a`` or ``b``/Applications/MATLAB_R2011a.app
OS X
----
General Notes
^^^^^^^^^^^^^
* It is not recommended to use the system-installed version of Python to build
Cantera. Instead, the following instructions use Homebrew to install a
separate copy of Python, independent from the system Python.
* To download the source code, installing ``git`` is highly recommended.
* SCons is only available for Python 2, so building the Python 3 module requires
two installations of Python (one of Python 2 and one of Python 3), even if you
do not intend to build the Python 2 module.
* Cython is only required to be installed for the version of Python that also
has SCons installed; following the instructions below will install Cython for
the version of Python 2 installed in the system directories. The minimum
compatible Cython version is 0.23.
.. _sec-mac-os-reqs:
OS X & macOS Requirements
^^^^^^^^^^^^^^^^^^^^^^^^^
* OS X 10.9 (Mavericks) or newer; 10.10 (Yosemite) or newer is recommended
* To build any of the Cantera modules, you will need to install
* Xcode
* Download and install from the App Store
* From a Terminal, run::
sudo xcode-select --install
and agree to the Xcode license agreement
* Homebrew
* http://brew.sh
* From a Terminal, run::
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
* Once Homebrew is installed, the rest of the dependencies can be installed with::
brew install python scons boost
* In addition to the general software, building the Python 2 module also requires::
pip install cython numpy
* In addition to the general software, building the Python 3 module also requires::
brew install python3
pip install cython
pip3 install numpy
Note that Cython should be installed into the version of Python that has SCons
installed.
* In addition to the general software, building the Fortran module also requires::
brew install gcc
* In addition to the general software, building the MATLAB toolbox also requires::
* MATLAB version later than 2009a
* Typically installed to::
/Applications/MATLAB_R20YYn.app
where ``YY`` is a two digit year and ``n`` is either ``a`` or ``b``
Downloading the Cantera source code
===================================
Stable Release
--------------
* **Option 1**: Check out the code using Git::
git clone --recursive https://github.com/Cantera/cantera.git
cd cantera
Then, check out the tag of the most recent stable version::
git checkout tags/v2.3.0
A list of all the tags can be shown by::
git tag --list
* **Option 2**: Download the most recent source tarball from `Github
<https://github.com/Cantera/cantera/releases>`_ and extract the
contents.
Beta Release
------------
* Check out the code using Git::
git clone --recursive https://github.com/Cantera/cantera.git
cd cantera
Then pick either **Option 1** or **Option 2** below.
* **Option 1**: Check out the tag with the most recent beta release::
git checkout tags/v2.3.0b1
Note that the most recent beta version might be older than the most recent
stable release. A list of all the tags, including stable and beta versions can
be shown by::
git tag --list
* **Option 2**: Check out the branch with all the bug fixes leading to the
next minor release of the stable version::
git checkout 2.3
This branch has all the work on the 2.3.x version of the software.
Development Version
-------------------
* Check out the code using Git::
git clone --recursive https://github.com/Cantera/cantera.git
cd cantera
Note that by default, the ``master`` branch is checked out, containing all of
the feature updates and bug fixes to the code since the previous stable
release. The master branch is usually an "alpha" release, corresponding to the
``a`` in the version number, and does not usually get a tag.
* Update an existing clone of the Git repo::
cd /path/to/cantera
git fetch
git rebase origin/master
git submodule update --init --recursive
Determine configuration options
===============================
General
-------
* run ``scons help`` to see a list all configuration options for Cantera, or
see :ref:`scons-config`.
* Configuration options are specified as additional arguments to the ``scons``
command, e.g.::
scons command option=value
where ``scons`` is the program that manages the build steps, and ``command``
is most commonly one of
* ``build``
* ``test``
* ``clean``
Other commands are possible, and are explained in :ref:`sec-build-commands`.
* SCons saves configuration options specified on the command line in the file
``cantera.conf`` in the root directory of the source tree, so generally it is
not necessary to respecify configuration options when rebuilding Cantera. To
unset a previously set configuration option, either remove the corresponding
line from ``cantera.conf`` or use the syntax::
scons command option_name=
* Sometimes, changes in your environment can cause SCons's configuration tests
(e.g. checking for libraries or compiler capabilities) to unexpectedly fail.
To force SCons to re-run these tests rather than trusting the cached results,
run scons with the option ``--config=force``.
Python Module
-------------
The Cantera Python module is implemented using Cython, and as such building the
Cantera Python module requires the Cython package for Python.
The Python module is compatible with the following Python versions: 2.7
and 3.2 - 3.5.
Building for Python 2
^^^^^^^^^^^^^^^^^^^^^
By default, SCons will attempt to build the Cython-based Python module for
Python 2, if both Numpy and Cython are installed.
Building for Python 3
^^^^^^^^^^^^^^^^^^^^^
If SCons detects a Python 3 interpreter installed in a default location
(i.e. ``python3`` is on the path), it will try to build the Python module
for Python 3. The following SCons options control how the Python 3 module is
built::
python3_package=[y|n]
python3_cmd=/path/to/python3/interpreter
python3_array_home=/path/to/numpy
python3_prefix=/path/to/cantera/module
Note that even when building the Python 3 Cantera module, you should still use
Python 2 with SCons, as SCons does not currently support Python 3.
Windows (MSVC)
--------------
* In Windows there aren't any proper default locations for many of the packages
that Cantera depends on, so you will need to specify these paths explicitly.
* Remember to put double quotes around any paths with spaces in them, e.g.
``"C:\Program Files"``.
* By default, SCons attempts to use the same architecture as the copy of Python
that is running SCons, and the most recent installed version of the Visual
Studio compiler. If you aren't building the Python module, you can override
this with the configuration options ``target_arch`` and ``msvc_version``.
.. note::
The ``cantera.conf`` file uses the backslash character ``\`` as an escape
character. When modifying this file, backslashes in paths need to be escaped
like this: ``boost_inc_dir = 'C:\\Program Files (x86)\\boost\\include'``
This does not apply to paths specified on the command line. Alternatively,
you can use forward slashes (``/``) in paths.
Windows (MinGW)
---------------
* To compile with MinGW, use the SCons command line option::
toolchain=mingw
OS X
----
* The Accelerate framework is automatically used to provide optimized versions
of BLAS and LAPACK, so the ``blas_lapack_libs`` option should generally be
left unspecified.
Intel Compilers
---------------
* Before compiling Cantera, you may need to set up the appropriate environment
variables for the Intel compiler suite, e.g.::
source /opt/intel/bin/compilervars.sh intel64
* For the Intel compiler to work with SCons, these environment variables need
to be passed through SCons by using the command line option::
env_vars=all
* If you want to use the Intel MKL versions of BLAS and LAPACK, you will need
to provide additional options. The following are typically correct on
64-bit Linux systems::
blas_lapack_libs=mkl_rt blas_lapack_dir=$(MKLROOT)/lib/intel64
Your final SCons call might then look something like::
scons build env_vars=all CC=icc CXX=icpc FORTRAN=ifort blas_lapack_libs=mkl_rt blas_lapack_dir=$(MKLROOT)/lib/intel64
When installing Cantera after building with the Intel compiler, the normal
method of using ``sudo`` to install Cantera will not work because ``sudo``
does not pass the environment variables needed by the Intel compiler.
Instead, you will need to do something like::
scons build ...
sudo -s
source /path/to/compilervars.sh intel64
scons install
exit
Compile Cantera & Test
======================
* Run SCons with the list of desired configuration options, e.g.::
scons build optimize=n blas_lapack_libs=blas,lapack prefix=/opt/cantera
* If Cantera compiles successfully, you should see a message that looks like::
*******************************************************
Compilation completed successfully.
- To run the test suite, type 'scons test'.
- To install, type '[sudo] scons install'.
*******************************************************
* If you do not see this message, check the output for errors to see what went
wrong.
* Cantera has a series of tests that can be run with the command::
scons test
* When the tests finish, you should see a summary indicating the number of
tests that passed and failed.
* If you have tests that fail, try looking at the following to determine the
source of the error:
* Messages printed to the console while running ``scons test``
* Output files generated by the tests
Building Documentation
----------------------
* To build the Cantera HTML documentation, run the commands::
scons doxygen
scons sphinx
or append the options ``sphinx_docs=y`` and ``doxygen_docs=y`` to the build
command, e.g.::
scons build doxygen_docs=y sphinx_docs=y
.. _sec-dependencies:
Software used by Cantera
========================
This section lists the versions of third-party software that are required to
build and use Cantera.
Compilers
---------
You must have one of the following C++ compilers installed on your system. A
Fortran compiler is required only if you plan to use Cantera from a Fortran
program.
* GNU compilers (C/C++/Fortran)
* Known to work with version 4.8; Expected to work with version >= 4.6
* Clang/LLVM (C/C++)
* Known to work with versions 3.5 and 3.8. Expected to work with version
>= 3.1.
* Works with the versions included with Xcode 5.1 and Xcode 6.1.
* Intel compilers (C/C++/Fortran)
* Known to work with version 14.0.
* Microsoft compilers (C/C++)
* Known to work with versions 12.0 (Visual Studio 2013) and 14.0 (Visual
Studio 2015).
* MinGW (C/C++/Fortran)
* http://mingw-w64.sourceforge.net/ (64-bit and 32-bit)
* Known to work with Mingw-w64 3.0, which provides GCC 4.8. Expected to work
with any version that provides a supported version of GCC and includes C++11
thread support.
Other Required Software
-----------------------
* SCons:
* http://scons.org/tag/releases.html
* Linux & OS X: Known to work with SCons 2.4.1; Expected to work with versions >= 1.0.0
* Version 2.3.6 or newer is required to use Visual Studio 2015.
* Python:
* http://python.org/download/
* Known to work with 2.7 and 3.5. Expected to work with versions >= 3.3.
* The Cython module supports Python 2.7 and 3.x. However, SCons requires
Python 2, so compilation of the Python 3 module requires two Python
installations.
* Boost
* http://www.boost.org/users/download/
* Known to work with version 1.54; Expected to work with versions >= 1.48
* Only the "header-only" portions of Boost are required. Cantera does not
currently depend on any of the compiled Boost libraries.
* Sundials
* If Sundials is not installed, it will be automatically downloaded and the
necessary portions will be compiled and installed with Cantera.
* https://computation.llnl.gov/casc/sundials/download/download.html
* Known to work with versions 2.4, 2.5, 2.6, and 2.7.
* To use Sundials with Cantera on a Linux/Unix system, it must be compiled
with the ``-fPIC`` flag. You can specify this flag when configuring
Sundials (2.4 or 2.5)::
configure --with-cflags=-fPIC
or Sundials 2.6 or 2.7::
cmake -DCMAKE_C_FLAGS=-fPIC <other command-line options>
.. note:: If you are compiling Sundials 2.5.0 on Windows using CMake, you need
to edit the ``CMakeLists.txt`` file first and change the lines::
SET(PACKAGE_STRING "SUNDIALS 2.4.0")
SET(PACKAGE_VERSION "2.4.0")
to read::
SET(PACKAGE_STRING "SUNDIALS 2.5.0")
SET(PACKAGE_VERSION "2.5.0")
instead, so that Cantera can correctly identify the version of
Sundials.
* Eigen
* If Eigen is not installed, it will be automatically downloaded and installed
with Cantera.
* http://eigen.tuxfamily.org/
* Known to work with version 3.2.8.
* fmt
* If fmt (previously known as cppformat) is not installed, it will be
automatically downloaded and the necessary portions will be compiled and
installed with Cantera.
* http://fmtlib.net/latest/index.html
* Version 3.0.1 or newer is required.
* Google Test
* If Google Test is not installed, it will be automatically downloaded and the
necessary portions will be compiled as part of the Cantera build process.
* https://github.com/google/googletest
* Known to work with version 1.7.0.
Optional Programs
-----------------
* Numpy
* Required to build the Cantera Python module, and to run significant portions
of the test suite.
* http://sourceforge.net/projects/numpy/
* Known to work with versions 1.7-1.11; Expected to work with version >= 1.4
* `Cython <http://cython.org/>`_
* Required version >=0.23 installed for Python 2.7 to build the Python module
for both Python 2.7 and Python 3.x.
* `3to2 <http://pypi.python.org/pypi/3to2>`_
* Used to convert Cython examples to Python 2 syntax.
* Known to work with version 1.0
* Matlab
* Required to build the Cantera Matlab toolbox.
* Known to work with 2009a and 2014b. Expected to work with versions >= 2009a.
* `Windows Installer XML (WiX) toolset <http://wixtoolset.org/>`_
* Required to build MSI installers on Windows.
* Known to work with versions 3.5 and 3.8.
* `Pip <https://pip.pypa.io/en/stable/installing>`_ (Python)
* Provides the ``pip`` command which can be used to install most of
the other Python modules.
* Packages required for building Sphinx documentation
* `Sphinx <http://sphinx.pocoo.org/>`_ (install with ``pip install --upgrade sphinx``)
* `Pygments <http://pygments.org/>`_ (install with ``pip install --upgrade pygments``)
* `pyparsing <http://sourceforge.net/projects/pyparsing/>`_ (install with ``pip install --upgrade pyparsing``)
* `doxylink <http://pypi.python.org/pypi/sphinxcontrib-doxylink/>`_ (install with ``pip install --upgrade sphinxcontrib-doxylink``)
* `matlabdomain <https://pypi.python.org/pypi/sphinxcontrib-matlabdomain>`_ (install with ``pip install sphinxcontrib-matlabdomain``)
* `Doxygen <http://www.stack.nl/~dimitri/doxygen/>`_
* Required for building the C++ API Documentation
* Version 1.8 or newer is recommended.