Apache Ignite C++ Build Instructions
====================================
Here you can find instruction on how to build Apache Ignite C++ core library and
stand-alone node binary. To build examples you need to build and install core Apache
Ignite library then refer to $IGNITE_HOME/platforms/cpp/example/README.txt for
further instructions.

For details on ODBC driver installation and usage please refer to
$IGNITE_HOME/platforms/cpp/odbc/README.txt.

Building on Linux With Autotools
----------------------------------

Common Requirements:

 * GCC, g++, autotools, automake, and libtool must be installed
 * Java Development Kit (JDK) must be installed: https://java.com/en/download/index.jsp
 * JAVA_HOME environment variable must be set pointing to Java installation directory.
 * IGNITE_HOME environment variable must be set to Ignite installation directory.
 * To build ODBC driver you need to install ODBC Driver Manager on you system.
   Apache Ignite has been tested with UnixODBC. Make sure that you install development
   version of the driver manager which contains header files that are necessary for
   building a driver.

Building the Apache Ignite C++ components:
 * Navigate to the directory $IGNITE_HOME/platforms/cpp
 * Execute the following commands one by one to build the project:
    * libtoolize && aclocal && autoheader && automake --add-missing && autoreconf
    * ./configure
    * make

Among standard included by autotools options configure script also include following
Ignite-specific options:
 * --enable-odbc - build included ODBC driver. Disabled by default.
 * --enable-core - build Ignite core library. Enabled by default.
 * --enable-thin-client - build thin client library. Enabled by default.
 * --enable-node - build stand-alone node executable. Enabled by default.
 
If you only need to build ODBC driver and do not want to build anything else you may just
use configure script with the following arguments:
 ./configure --enable-odbc --disable-core --disable-thin-client --disable-node

With the config like that you should not have any ignite dependencies as jvm.dll installed
to build ODBC driver.
 
Similarly if you only want to build only thin client you may use configure script with
the following arguments:
 ./configure --disable-core --disable-node

NOTE: You may want to use "make install" command to install Ignite libraries and headers
for your operation system. Note however that this action may require superuser privileges.

Building on Windows with Visual Studio (tm)
----------------------------------

Common Requirements:

 * Microsoft Visual Studio (tm) 2010 or later
 * Windows SDK 7.1
 * Java Development Kit (JDK) must be installed: https://java.com/en/download/index.jsp
 * JAVA_HOME environment variable must be set pointing to Java installation directory.
 * IGNITE_HOME environment variable must be set to Ignite installation directory.

Building binaries:

 * Open and build %IGNITE_HOME%\platforms\cpp\project\vs\ignite.sln (or ignite_86.sln if
   you are running 32-bit platform).
 * If you want to build ODBC driver then you should explicitly build it as it is disabled
   in the solution file by default. In IDE it can be done by clicking on the ODBC project
   with the right mouse button and choosing "Build" option.
   
Building installers:
 * Install WiX Toolset if you do not have it yet.
 * Add WiX Toolset "bin" directory to your PATH environmental variable.
 * Build ODBC drivers: Release|x64 for 64-bit version and Release|Win32 for 32-bit version.
 * Open terminal and navigate to the directory $IGNITE_HOME/platforms/cpp/odbc/install
 * Execute the following commands one by one to build 32-bit driver:
    * candle.exe ignite-odbc-x86.wxs
    * light.exe -ext WixUIExtension ignite-odbc-x86.wixobj
 * Execute the following commands one by one to build 64-bit driver:
    * candle.exe ignite-odbc-amd64.wxs
    * light.exe -ext WixUIExtension ignite-odbc-amd64.wixobj

Building in later versions of Visual Studio:
 * Open project\vs\ignite.sln or project\vs\ignite_86.sln in Visual Studio
 * You will be prompted to "Update VC++ Compiler and Libraries", click "Update"
 * Build the solution.
