This is an automated email from the ASF dual-hosted git repository.

isapego pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new bec7f31  IGNITE-13078: C++: Add CMake build system support
bec7f31 is described below

commit bec7f310ebfbe47592e01ccfaea14ef099b74d24
Author: Ivan Daschinskiy <[email protected]>
AuthorDate: Mon Jun 22 20:47:42 2020 +0300

    IGNITE-13078: C++: Add CMake build system support
    
    This closes #7854
---
 .gitignore                                         |   3 +
 LICENSE                                            |   6 +
 modules/platforms/cpp/CMakeLists.txt               |  83 ++++++++++++
 modules/platforms/cpp/DEVNOTES.txt                 |  45 +++++++
 modules/platforms/cpp/binary/CMakeLists.txt        |  73 ++++++++++
 modules/platforms/cpp/cmake/FindIgnite.cmake       |  45 +++++++
 modules/platforms/cpp/cmake/FindODBC.cmake         | 148 +++++++++++++++++++++
 modules/platforms/cpp/common/CMakeLists.txt        |  81 +++++++++++
 .../os/linux/include/ignite/common/concurrent_os.h |   6 +-
 .../common/os/linux/src/common/platform_utils.cpp  |   5 +-
 modules/platforms/cpp/core-test/CMakeLists.txt     |  76 +++++++++++
 modules/platforms/cpp/core/CMakeLists.txt          |  54 ++++++++
 modules/platforms/cpp/examples/CMakeLists.txt      |  36 +++++
 .../cpp/examples/compute-example/CMakeLists.txt    |  31 +++++
 .../continuous-query-example/CMakeLists.txt        |  31 +++++
 .../cpp/examples/odbc-example/CMakeLists.txt       |  33 +++++
 .../cpp/examples/put-get-example/CMakeLists.txt    |  31 +++++
 .../cpp/examples/query-example/CMakeLists.txt      |  31 +++++
 .../thin-client-put-get-example/CMakeLists.txt     |  28 ++++
 modules/platforms/cpp/ignite/CMakeLists.txt        |  32 +++++
 modules/platforms/cpp/jni/CMakeLists.txt           |  43 ++++++
 modules/platforms/cpp/jni/os/linux/src/utils.cpp   |   9 ++
 modules/platforms/cpp/network/CMakeLists.txt       |  74 +++++++++++
 .../os/linux/src/network/tcp_socket_client.cpp     |   5 +-
 .../cpp/network/src/network/ssl/ssl_gateway.cpp    |  16 ++-
 modules/platforms/cpp/odbc-test/CMakeLists.txt     | 104 +++++++++++++++
 modules/platforms/cpp/odbc/CMakeLists.txt          | 108 +++++++++++++++
 .../platforms/cpp/thin-client-test/CMakeLists.txt  |  36 +++++
 modules/platforms/cpp/thin-client/CMakeLists.txt   |  48 +++++++
 parent/pom.xml                                     |   2 +
 30 files changed, 1313 insertions(+), 10 deletions(-)

diff --git a/.gitignore b/.gitignore
index cdc7065..88ffb94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -102,6 +102,9 @@ packages
 /modules/platforms/cpp/stamp-h1
 /modules/platforms/cpp/thin-client-test/ignite-thin-client-tests
 
+#CMake temp files
+/modules/platforms/cpp/**/cmake-build**
+
 #Files related to ML manual-runnable tests
 /modules/ml/src/test/resources/manualrun/trees/columntrees.manualrun.properties
 
diff --git a/LICENSE b/LICENSE
index 6e77825..8ab6fe6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -243,3 +243,9 @@ This eBook is for the use of anyone anywhere at no cost and 
with
 almost no restrictions whatsoever.  You may copy it, give it away or
 re-use it under the terms of the Project Gutenberg License included
 with this eBook or online at www.gutenberg.org
+
+==============================================================================
+For CMake script FindODBC.cmake in C++ module.
+==============================================================================
+This module contains modified FindODBC.cmake script from CMake distribution,
+which is available under a "3-clause BSD" license. For details, see 
https://cmake.org/licensing.
diff --git a/modules/platforms/cpp/CMakeLists.txt 
b/modules/platforms/cpp/CMakeLists.txt
new file mode 100644
index 0000000..48a0496
--- /dev/null
+++ b/modules/platforms/cpp/CMakeLists.txt
@@ -0,0 +1,83 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+cmake_minimum_required(VERSION 3.6)
+project(Ignite.C++ VERSION 2.9.0.42453)
+
+set(CMAKE_CXX_STANDARD 98)
+
+find_package(Java 1.8 REQUIRED)
+find_package(JNI REQUIRED)
+
+set(CMAKE_PROJECT_VERSION ${PROJECT_VERSION})
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIGNITE_IMPL -DIGNITE_FRIEND 
-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS")
+
+set(CMAKE_SKIP_BUILD_RPATH FALSE)
+set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
+list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES 
"${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
+
+if("${isSystemDir}" STREQUAL "-1")
+    set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+endif("${isSystemDir}" STREQUAL "-1")
+
+if (WIN32)
+    add_definitions(-DUNICODE=1)
+
+    add_compile_options(/source-charset:utf-8)
+endif()
+
+option (WITH_ODBC OFF)
+option (WITH_THIN_CLIENT OFF)
+option (WITH_TESTS OFF)
+
+add_subdirectory(common)
+add_subdirectory(binary)
+add_subdirectory(jni)
+add_subdirectory(core)
+add_subdirectory(ignite)
+
+if (${WITH_TESTS})
+    enable_testing()
+
+    if (EXISTS ${CMAKE_SOURCE_DIR}/core-test)
+        add_subdirectory(core-test)
+    endif()
+endif()
+
+if (${WITH_THIN_CLIENT} OR ${WITH_ODBC})
+    add_subdirectory(network)
+endif()
+
+if (${WITH_THIN_CLIENT})
+    add_subdirectory(thin-client)
+
+    if (${WITH_TESTS} AND EXISTS ${CMAKE_SOURCE_DIR}/thin-client-test)
+        add_subdirectory(thin-client-test)
+    endif()
+endif()
+
+if (${WITH_ODBC})
+    add_subdirectory(odbc)
+
+    if (${WITH_TESTS} AND EXISTS ${CMAKE_SOURCE_DIR}/odbc-test)
+        add_subdirectory(odbc-test)
+    endif()
+endif()
diff --git a/modules/platforms/cpp/DEVNOTES.txt 
b/modules/platforms/cpp/DEVNOTES.txt
index e39a2b7..8e92d36 100644
--- a/modules/platforms/cpp/DEVNOTES.txt
+++ b/modules/platforms/cpp/DEVNOTES.txt
@@ -64,6 +64,51 @@ Ignite expects for boost libraries and header to be found 
under default system p
 it is recommended to use package repository for your OS to install boost 
package for the
 development.
 
+Building on Linux and Mac OS X with CMake
+----------------------------------
+
+Common Requirements:
+
+ * GCC, g++, CMake >= 3.6 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.
+
+By default building tests, ODBC and thin-client are disabled.
+ * OpenSSL, 1.0 or later required for building ODBC and thin-client.
+ * UnixODBX required for building ODBC.
+ * For building tests, boost framework is required. The following boost 
libraries are used:
+   * boost_unit_test_framework
+   * boost_thread
+   * boost_system
+   * boost_chrono
+
+On Mac OS X all dependencies can be installed using Homebrew.
+
+Building and installing the Apache Ignite C++ components:
+ * Navigate to the directory $IGNITE_HOME/platforms/cpp
+ * Execute the following commands one by one to build the project:
+ * mkdir cmake-build-[release|debug]
+ * cd ./cmake-build-[release|debug]
+ * cmake -DCMAKE_BUILD_TYPE=[Release|Debug] 
[-DCMAKE_INSTALL_PREFIX=<install_dir>] ..
+ * make
+ * make install
+
+ * For building ODBC add to cmake option -DWITH_ODBC=ON
+ * For building thin client add to cmake option -DWITH_THIN_CLIENT=ON
+ * For building with tests add to cmake option -DWITH_TESTS=ON
+
+Running test:
+ * For core tests: ctest -V -R IgniteCoreTest
+ * For thin-client tests: ctest -V -R IgniteThinClientTest
+ * For ODBC tests: ctest -V -R IgniteOdbcTest
+ * For all tests: ctest -V
+
+WARNING!
+ * For running ODBC tests, ODBC driver must be installed in driver manager. 
See odbc/README.txt for details.
+ * On Mac OS X Homebrew doesn't create symlinks for OpenSSL, so they should be 
created or as alternative
+   OPEN_SSL_HOME should be set before running ODBC or thin-client tests.
+
 Building on Windows with Visual Studio (tm)
 ----------------------------------
 
diff --git a/modules/platforms/cpp/binary/CMakeLists.txt 
b/modules/platforms/cpp/binary/CMakeLists.txt
new file mode 100644
index 0000000..e1f5fad
--- /dev/null
+++ b/modules/platforms/cpp/binary/CMakeLists.txt
@@ -0,0 +1,73 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-binary)
+
+include_directories(include)
+
+set(TARGET ${PROJECT_NAME})
+
+set(SOURCES src/binary/binary_containers.cpp
+        src/binary/binary_raw_writer.cpp
+        src/binary/binary_writer.cpp
+        src/binary/binary_reader.cpp
+        src/binary/binary_type.cpp
+        src/binary/binary_raw_reader.cpp
+        src/impl/binary/binary_type_manager.cpp
+        src/impl/binary/binary_type_impl.cpp
+        src/impl/binary/binary_utils.cpp
+        src/impl/binary/binary_reader_impl.cpp
+        src/impl/binary/binary_type_handler.cpp
+        src/impl/binary/binary_writer_impl.cpp
+        src/impl/binary/binary_schema.cpp
+        src/impl/binary/binary_type_snapshot.cpp
+        src/impl/binary/binary_object_header.cpp
+        src/impl/binary/binary_object_impl.cpp
+        src/impl/binary/binary_field_meta.cpp
+        src/impl/interop/interop_memory.cpp
+        src/impl/interop/interop_output_stream.cpp
+        src/impl/interop/interop_input_stream.cpp)
+
+list(APPEND _target_libs ${TARGET})
+
+if (WIN32)
+    add_library(${TARGET}-objlib OBJECT ${SOURCES})
+
+    add_library(${TARGET} SHARED $<TARGET_OBJECTS:${TARGET}-objlib>)
+
+    list(APPEND _target_libs ${TARGET}-objlib)
+else()
+    add_library(${TARGET} SHARED ${SOURCES})
+endif()
+
+foreach(_target_lib IN LISTS _target_libs)
+    set_target_properties(${_target_lib} PROPERTIES VERSION 
${CMAKE_PROJECT_VERSION})
+
+    if (${_target_lib} STREQUAL ${TARGET}-objlib)
+        set_target_properties(${_target_lib} PROPERTIES 
POSITION_INDEPENDENT_CODE 1)
+
+        target_link_libraries(${_target_lib} ignite-common-objlib)
+    else()
+        target_link_libraries(${_target_lib} ignite-common)
+    endif()
+
+    target_include_directories(${_target_lib} INTERFACE include)
+endforeach()
+unset(_target_libs)
+
+install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include 
FILES_MATCHING PATTERN "*.h*")
diff --git a/modules/platforms/cpp/cmake/FindIgnite.cmake 
b/modules/platforms/cpp/cmake/FindIgnite.cmake
new file mode 100644
index 0000000..ffdb9e3
--- /dev/null
+++ b/modules/platforms/cpp/cmake/FindIgnite.cmake
@@ -0,0 +1,45 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+find_path(IGNITE_INCLUDE_DIR ignite/ignite.h
+        HINTS ${IGNITE_CPP_DIR}/include
+        PATH_SUFFIXES ignite)
+
+find_library(IGNITE_LIB ignite HINTS ${IGNITE_CPP_DIR}/lib)
+
+find_library(IGNITE_COMMON_LIB ignite-common HINTS ${IGNITE_CPP_DIR}/lib)
+
+find_library(IGNITE_NETWORK_LIB ignite-network HINTS ${IGNITE_CPP_DIR}/lib)
+
+find_library(IGNITE_JNI_LIB ignite-jni HINTS ${IGNITE_CPP_DIR}/lib)
+
+find_library(IGNITE_THIN_CLIENT_LIB ignite-thin-client HINTS 
${IGNITE_CPP_DIR}/lib)
+
+find_library(IGNITE_ODBC_LIB ignite-odbc HINTS ${IGNITE_CPP_DIR}/lib)
+
+find_library(IGNITE_BINARY_LIB ignite-binary HINTS ${IGNITE_CPP_DIR}/lib)
+
+include(FindPackageHandleStandardArgs)
+
+find_package_handle_standard_args(Ignite DEFAULT_MSG
+        IGNITE_LIB
+        IGNITE_THIN_CLIENT_LIB
+        IGNITE_ODBC_LIB
+        IGNITE_BINARY_LIB
+        IGNITE_NETWORK_LIB
+        IGNITE_COMMON_LIB
+        IGNITE_INCLUDE_DIR)
diff --git a/modules/platforms/cpp/cmake/FindODBC.cmake 
b/modules/platforms/cpp/cmake/FindODBC.cmake
new file mode 100644
index 0000000..33817c8
--- /dev/null
+++ b/modules/platforms/cpp/cmake/FindODBC.cmake
@@ -0,0 +1,148 @@
+# Distributed under the OSI-approved BSD 3-Clause License. Contains modified 
code from
+# CMake distribution, see https://cmake.org/licensing for details.
+
+# Define lists used internally
+set(_odbc_include_paths)
+set(_odbc_lib_paths)
+set(_odbc_lib_names)
+set(_odbc_required_libs_names)
+
+### Try Windows Kits ##########################################################
+if(WIN32)
+    set(_odbc_lib_names odbc32;)
+
+    # List additional libraries required to use ODBC library
+    if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Intel")
+        set(_odbc_required_libs_names odbccp32;ws2_32)
+    elseif(MINGW)
+        set(_odbc_required_libs_names odbccp32)
+    endif()
+endif()
+
+### Try unixODBC or iODBC config program ######################################
+if (UNIX)
+    find_program(ODBC_CONFIG
+            NAMES odbc_config iodbc-config
+            DOC "Path to unixODBC config program")
+    mark_as_advanced(ODBC_CONFIG)
+endif()
+
+if (UNIX AND ODBC_CONFIG)
+    # unixODBC and iODBC accept unified command line options
+    execute_process(COMMAND ${ODBC_CONFIG} --cflags
+            OUTPUT_VARIABLE _cflags OUTPUT_STRIP_TRAILING_WHITESPACE)
+    execute_process(COMMAND ${ODBC_CONFIG} --libs
+            OUTPUT_VARIABLE _libs OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    # Collect paths of include directories from CFLAGS
+    separate_arguments(_cflags UNIX_COMMAND "${_cflags}")
+    foreach(arg IN LISTS _cflags)
+        if("${arg}" MATCHES "^-I(.*)$")
+            list(APPEND _odbc_include_paths "${CMAKE_MATCH_1}")
+        endif()
+    endforeach()
+    unset(_cflags)
+
+    # Collect paths of library names and directories from LIBS
+    separate_arguments(_libs UNIX_COMMAND "${_libs}")
+    foreach(arg IN LISTS _libs)
+        if("${arg}" MATCHES "^-L(.*)$")
+            list(APPEND _odbc_lib_paths "${CMAKE_MATCH_1}")
+        elseif("${arg}" MATCHES "^-l(.*)$")
+            set(_lib_name ${CMAKE_MATCH_1})
+            string(REGEX MATCH "odbc" _is_odbc ${_lib_name})
+            if(_is_odbc)
+                list(APPEND _odbc_lib_names ${_lib_name})
+                if (${_lib_name} STREQUAL odbc)
+                    list(APPEND _odbc_required_libs_names odbcinst)
+                endif()
+            else()
+                list(APPEND _odbc_required_libs_names ${_lib_name})
+            endif()
+            unset(_lib_name)
+        endif()
+    endforeach()
+    unset(_libs)
+endif()
+
+### Try unixODBC or iODBC in include/lib filesystems ##########################
+if (UNIX AND NOT ODBC_CONFIG)
+    # List names of both ODBC libraries and unixODBC
+    set(_odbc_lib_names odbc;odbcinst;iodbc;unixodbc;)
+endif()
+
+### Find include directories ##################################################
+find_path(ODBC_INCLUDE_DIR
+        NAMES sql.h
+        PATHS ${_odbc_include_paths})
+
+if(NOT ODBC_INCLUDE_DIR AND WIN32)
+    set(ODBC_INCLUDE_DIR "")
+endif()
+
+### Find libraries ############################################################
+if(NOT ODBC_LIBRARY)
+    find_library(ODBC_LIBRARY
+            NAMES ${_odbc_lib_names}
+            PATHS ${_odbc_lib_paths}
+            PATH_SUFFIXES odbc)
+
+    foreach(_lib IN LISTS _odbc_required_libs_names)
+        find_library(_lib_path
+                NAMES ${_lib}
+                PATHS ${_odbc_lib_paths} # system paths or collected from 
ODBC_CONFIG
+                PATH_SUFFIXES odbc)
+        if(_lib_path)
+            list(APPEND _odbc_required_libs_paths ${_lib_path})
+        endif()
+        unset(_lib_path CACHE)
+    endforeach()
+endif()
+
+# Unset internal lists as no longer used
+unset(_odbc_include_paths)
+unset(_odbc_lib_paths)
+unset(_odbc_lib_names)
+unset(_odbc_required_libs_names)
+
+### Set result variables ######################################################
+set(_odbc_required_vars ODBC_LIBRARY)
+if(NOT WIN32)
+    list(APPEND _odbc_required_vars ODBC_INCLUDE_DIR)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(ODBC DEFAULT_MSG ${_odbc_required_vars})
+
+unset(_odbc_required_vars)
+
+mark_as_advanced(ODBC_LIBRARY ODBC_INCLUDE_DIR)
+
+set(ODBC_INCLUDE_DIRS ${ODBC_INCLUDE_DIR})
+list(APPEND ODBC_LIBRARIES ${ODBC_LIBRARY})
+list(APPEND ODBC_LIBRARIES ${_odbc_required_libs_paths})
+
+### Import targets ############################################################
+if(ODBC_FOUND)
+    if(NOT TARGET ODBC::ODBC)
+        if(IS_ABSOLUTE "${ODBC_LIBRARY}")
+            add_library(ODBC::ODBC UNKNOWN IMPORTED)
+            set_target_properties(ODBC::ODBC PROPERTIES
+                    IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+                    IMPORTED_LOCATION "${ODBC_LIBRARY}")
+        else()
+            add_library(ODBC::ODBC INTERFACE IMPORTED)
+            set_target_properties(ODBC::ODBC PROPERTIES
+                    IMPORTED_LIBNAME "${ODBC_LIBRARY}")
+        endif()
+        set_target_properties(ODBC::ODBC PROPERTIES
+                INTERFACE_INCLUDE_DIRECTORIES "${ODBC_INCLUDE_DIR}")
+
+        if(_odbc_required_libs_paths)
+            set_property(TARGET ODBC::ODBC APPEND PROPERTY
+                    INTERFACE_LINK_LIBRARIES "${_odbc_required_libs_paths}")
+        endif()
+    endif()
+endif()
+
+unset(_odbc_required_libs_paths)
diff --git a/modules/platforms/cpp/common/CMakeLists.txt 
b/modules/platforms/cpp/common/CMakeLists.txt
new file mode 100644
index 0000000..7ea0638
--- /dev/null
+++ b/modules/platforms/cpp/common/CMakeLists.txt
@@ -0,0 +1,81 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-common)
+
+include_directories(include)
+
+set(TARGET ${PROJECT_NAME})
+
+set(SOURCES src/common/big_integer.cpp
+        src/common/bits.cpp
+        src/common/concurrent.cpp
+        src/common/decimal.cpp
+        src/common/utils.cpp
+        src/date.cpp
+        src/ignite_error.cpp
+        src/guid.cpp
+        src/timestamp.cpp
+        src/time.cpp)
+
+if (WIN32)
+    set(OS_INCLUDE os/win/include)
+
+    list(APPEND SOURCES os/win/src/common/concurrent_os.cpp
+            os/win/src/common/platform_utils.cpp
+            os/win/src/common/dynamic_load_os.cpp)
+else()
+    set(OS_INCLUDE os/linux/include)
+
+    list(APPEND SOURCES os/linux/src/common/concurrent_os.cpp
+            os/linux/src/common/platform_utils.cpp
+            os/linux/src/common/dynamic_load_os.cpp)
+endif()
+
+include_directories(${OS_INCLUDE})
+
+list(APPEND _target_libs ${TARGET})
+
+if (WIN32)
+    add_library(${TARGET}-objlib OBJECT ${SOURCES})
+
+    add_library(${TARGET} SHARED $<TARGET_OBJECTS:${TARGET}-objlib>)
+
+    list(APPEND _target_libs ${TARGET}-objlib)
+else()
+    add_library(${TARGET} SHARED ${SOURCES})
+endif()
+
+foreach(_target_lib IN LISTS _target_libs)
+    set_target_properties(${_target_lib} PROPERTIES VERSION 
${CMAKE_PROJECT_VERSION})
+
+    if (${_target_lib} STREQUAL ${TARGET}-objlib)
+        set_target_properties(${_target_lib} PROPERTIES 
POSITION_INDEPENDENT_CODE 1)
+    endif()
+
+    if (NOT WIN32)
+        find_package(Threads REQUIRED)
+
+        target_link_libraries(${_target_lib} ${CMAKE_THREAD_LIBS_INIT} 
${CMAKE_DL_LIBS})
+    endif()
+
+    target_include_directories(${_target_lib} INTERFACE include ${OS_INCLUDE})
+endforeach()
+unset(_target_libs)
+
+install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+install(DIRECTORY include/ ${OS_INCLUDE}/ DESTINATION 
${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h*")
diff --git 
a/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h 
b/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h
index 3c588ff..5b84701 100644
--- 
a/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h
+++ 
b/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h
@@ -451,9 +451,10 @@ namespace ignite
                     int err = pthread_condattr_init(&attr);
                     assert(!err);
 
+#if !defined(__APPLE__)
                     err = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
                     assert(!err);
-
+#endif
                     err = pthread_cond_init(&cond, &attr);
                     assert(!err);
                 }
@@ -541,9 +542,10 @@ namespace ignite
                     pthread_condattr_t attr;
                     int err = pthread_condattr_init(&attr);
                     assert(!err);
-
+#if !defined(__APPLE__)
                     err = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
                     assert(!err);
+#endif
 
                     err = pthread_cond_init(&cond, &attr);
                     assert(!err);
diff --git 
a/modules/platforms/cpp/common/os/linux/src/common/platform_utils.cpp 
b/modules/platforms/cpp/common/os/linux/src/common/platform_utils.cpp
index cc8970f..4417db0 100644
--- a/modules/platforms/cpp/common/os/linux/src/common/platform_utils.cpp
+++ b/modules/platforms/cpp/common/os/linux/src/common/platform_utils.cpp
@@ -114,8 +114,11 @@ namespace ignite
 
         StdCharOutStream& Dle(StdCharOutStream& ostr)
         {
+#ifdef __APPLE__
+            static const char expansion[] = ".dylib";
+#else
             static const char expansion[] = ".so";
-
+#endif
             ostr.write(expansion, sizeof(expansion) - 1);
 
             return ostr;
diff --git a/modules/platforms/cpp/core-test/CMakeLists.txt 
b/modules/platforms/cpp/core-test/CMakeLists.txt
new file mode 100644
index 0000000..ba24021
--- /dev/null
+++ b/modules/platforms/cpp/core-test/CMakeLists.txt
@@ -0,0 +1,76 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-tests)
+
+set(TARGET ${PROJECT_NAME})
+
+find_package(Boost 1.53 REQUIRED COMPONENTS unit_test_framework chrono thread 
system)
+
+if (WIN32)
+    set(Boost_USE_STATIC_LIBS ON)
+endif()
+
+include_directories(include ${Boost_INCLUDE_DIRS} ${JNI_INCLUDE_DIRS})
+
+set(SOURCES src/reference_test.cpp
+        src/bits_test.cpp
+        src/binary_identity_resolver_test.cpp
+        src/cache_test.cpp
+        src/cache_query_test.cpp
+        src/cache_store_test.cpp
+        src/continuous_query_test.cpp
+        src/concurrent_test.cpp
+        src/compute_test.cpp
+        src/ignition_test.cpp
+        src/interop_memory_test.cpp
+        src/interop_test.cpp
+        src/cluster_test.cpp
+        src/cache_invoke_test.cpp
+        src/handle_registry_test.cpp
+        src/ignite_error_test.cpp
+        src/binary_test_defs.cpp
+        src/binary_object_test.cpp
+        src/binary_reader_writer_raw_test.cpp
+        src/binary_reader_writer_test.cpp
+        src/binary_session_test.cpp
+        src/date_time_test.cpp
+        src/decimal_test.cpp
+        src/dynamic_size_array_test.cpp
+        src/fixed_size_array_test.cpp
+        src/future_test.cpp
+        src/transactions_test.cpp
+        src/teamcity_messages.cpp
+        src/teamcity_boost.cpp
+        src/test_utils.cpp)
+
+add_executable(${TARGET} ${SOURCES})
+
+target_link_libraries(${TARGET} ignite ${Boost_LIBRARIES})
+
+if (NOT WIN32)
+    add_definitions(-DBOOST_TEST_DYN_LINK)
+
+    target_link_libraries(${TARGET} -rdynamic)
+endif()
+
+set(TEST_TARGET IgniteCoreTest)
+
+add_test(NAME ${TEST_TARGET} COMMAND ${TARGET} --catch_system_errors=no 
--log_level=all)
+
+set_tests_properties(${TEST_TARGET} PROPERTIES ENVIRONMENT
+        IGNITE_NATIVE_TEST_CPP_CONFIG_PATH=${PROJECT_SOURCE_DIR}/config)
diff --git a/modules/platforms/cpp/core/CMakeLists.txt 
b/modules/platforms/cpp/core/CMakeLists.txt
new file mode 100644
index 0000000..e84a8bb
--- /dev/null
+++ b/modules/platforms/cpp/core/CMakeLists.txt
@@ -0,0 +1,54 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite)
+
+include_directories(${JNI_INCLUDE_DIRS} include)
+
+set(TARGET ${PROJECT_NAME})
+
+set(SOURCES src/ignite.cpp
+        src/ignition.cpp
+        src/impl/ignite_environment.cpp
+        src/impl/binary/binary_type_updater_impl.cpp
+        src/impl/handle_registry.cpp
+        src/impl/cache/query/continuous/continuous_query_handle_impl.cpp
+        src/impl/cache/query/query_impl.cpp
+        src/impl/cache/cache_impl.cpp
+        src/impl/cache/query/query_batch.cpp
+        src/impl/interop/interop_external_memory.cpp
+        src/impl/interop/interop_target.cpp
+        src/impl/transactions/transaction_impl.cpp
+        src/impl/transactions/transactions_impl.cpp
+        src/impl/cluster/cluster_group_impl.cpp
+        src/impl/compute/cancelable_impl.cpp
+        src/impl/compute/compute_impl.cpp
+        src/impl/ignite_impl.cpp
+        src/impl/ignite_binding_impl.cpp
+        src/transactions/transaction.cpp
+        src/transactions/transactions.cpp)
+
+add_library(${TARGET} SHARED ${SOURCES})
+
+set_target_properties(${TARGET} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION})
+
+target_link_libraries(${TARGET} ignite-binary ignite-jni)
+
+target_include_directories(${TARGET} INTERFACE include)
+
+install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include 
FILES_MATCHING PATTERN "*.h*")
diff --git a/modules/platforms/cpp/examples/CMakeLists.txt 
b/modules/platforms/cpp/examples/CMakeLists.txt
new file mode 100644
index 0000000..380eb8a
--- /dev/null
+++ b/modules/platforms/cpp/examples/CMakeLists.txt
@@ -0,0 +1,36 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+cmake_minimum_required(VERSION 3.6)
+project(examples)
+
+set(CMAKE_CXX_STANDARD 98)
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../cmake")
+
+if (WIN32)
+    add_definitions(-DUNICODE=1)
+
+    add_compile_options(/source-charset:utf-8)
+endif()
+
+add_subdirectory(compute-example)
+add_subdirectory(continuous-query-example)
+add_subdirectory(odbc-example)
+add_subdirectory(put-get-example)
+add_subdirectory(query-example)
+add_subdirectory(thin-client-put-get-example)
diff --git a/modules/platforms/cpp/examples/compute-example/CMakeLists.txt 
b/modules/platforms/cpp/examples/compute-example/CMakeLists.txt
new file mode 100644
index 0000000..315477b
--- /dev/null
+++ b/modules/platforms/cpp/examples/compute-example/CMakeLists.txt
@@ -0,0 +1,31 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(compute-example)
+
+set(TARGET ignite-${PROJECT_NAME})
+
+find_package(Ignite)
+find_package(Threads)
+find_package(Java 1.8 REQUIRED)
+find_package(JNI REQUIRED)
+
+include_directories(../include ${IGNITE_INCLUDE_DIR} ${JNI_INCLUDE_DIRS})
+
+add_executable(${TARGET} src/compute_example.cpp)
+
+target_link_libraries(${TARGET} ${IGNITE_LIB} ${IGNITE_BINARY_LIB} 
${IGNITE_COMMON_LIB} ${CMAKE_THREAD_LIBS_INIT})
diff --git 
a/modules/platforms/cpp/examples/continuous-query-example/CMakeLists.txt 
b/modules/platforms/cpp/examples/continuous-query-example/CMakeLists.txt
new file mode 100644
index 0000000..e67ec89
--- /dev/null
+++ b/modules/platforms/cpp/examples/continuous-query-example/CMakeLists.txt
@@ -0,0 +1,31 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(continuous-query-example)
+
+set(TARGET ignite-${PROJECT_NAME})
+
+find_package(Ignite)
+find_package(Threads)
+find_package(Java 1.8 REQUIRED)
+find_package(JNI REQUIRED)
+
+include_directories(../include ${IGNITE_INCLUDE_DIR} ${JNI_INCLUDE_DIRS})
+
+add_executable(${TARGET} src/continuous_query_example.cpp)
+
+target_link_libraries(${TARGET} ${IGNITE_LIB} ${IGNITE_BINARY_LIB} 
${IGNITE_COMMON_LIB} ${CMAKE_THREAD_LIBS_INIT})
diff --git a/modules/platforms/cpp/examples/odbc-example/CMakeLists.txt 
b/modules/platforms/cpp/examples/odbc-example/CMakeLists.txt
new file mode 100644
index 0000000..6fd6138
--- /dev/null
+++ b/modules/platforms/cpp/examples/odbc-example/CMakeLists.txt
@@ -0,0 +1,33 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(odbc-example)
+
+set(TARGET ignite-${PROJECT_NAME})
+
+find_package(Ignite)
+find_package(Threads)
+find_package(Java 1.8 REQUIRED)
+find_package(JNI REQUIRED)
+find_package(ODBC REQUIRED)
+
+include_directories(../include ${IGNITE_INCLUDE_DIR} ${JNI_INCLUDE_DIRS})
+
+add_executable(${TARGET} src/odbc_example.cpp)
+
+target_link_libraries(${TARGET} ${IGNITE_LIB} ${IGNITE_BINARY_LIB} 
${IGNITE_COMMON_LIB} ${ODBC_LIBRARY}
+        ${CMAKE_THREAD_LIBS_INIT})
diff --git a/modules/platforms/cpp/examples/put-get-example/CMakeLists.txt 
b/modules/platforms/cpp/examples/put-get-example/CMakeLists.txt
new file mode 100644
index 0000000..0f3e8b2
--- /dev/null
+++ b/modules/platforms/cpp/examples/put-get-example/CMakeLists.txt
@@ -0,0 +1,31 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(put-get-example)
+
+set(TARGET ignite-${PROJECT_NAME})
+
+find_package(Ignite)
+find_package(Threads)
+find_package(Java 1.8 REQUIRED)
+find_package(JNI REQUIRED)
+
+include_directories(../include ${IGNITE_INCLUDE_DIR} ${JNI_INCLUDE_DIRS})
+
+add_executable(${TARGET} src/put_get_example.cpp)
+
+target_link_libraries(${TARGET} ${IGNITE_LIB} ${IGNITE_BINARY_LIB} 
${IGNITE_COMMON_LIB} ${CMAKE_THREAD_LIBS_INIT})
diff --git a/modules/platforms/cpp/examples/query-example/CMakeLists.txt 
b/modules/platforms/cpp/examples/query-example/CMakeLists.txt
new file mode 100644
index 0000000..c2df0e3
--- /dev/null
+++ b/modules/platforms/cpp/examples/query-example/CMakeLists.txt
@@ -0,0 +1,31 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(query-example)
+
+set(TARGET ignite-${PROJECT_NAME})
+
+find_package(Ignite)
+find_package(Threads)
+find_package(Java 1.8 REQUIRED)
+find_package(JNI REQUIRED)
+
+include_directories(../include ${IGNITE_INCLUDE_DIR} ${JNI_INCLUDE_DIRS})
+
+add_executable(${TARGET} src/query_example.cpp)
+
+target_link_libraries(${TARGET} ${IGNITE_LIB} ${IGNITE_BINARY_LIB} 
${IGNITE_COMMON_LIB} ${CMAKE_THREAD_LIBS_INIT})
diff --git 
a/modules/platforms/cpp/examples/thin-client-put-get-example/CMakeLists.txt 
b/modules/platforms/cpp/examples/thin-client-put-get-example/CMakeLists.txt
new file mode 100644
index 0000000..7a00a34
--- /dev/null
+++ b/modules/platforms/cpp/examples/thin-client-put-get-example/CMakeLists.txt
@@ -0,0 +1,28 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(thin-client-put-get-example)
+
+set(TARGET ignite-${PROJECT_NAME})
+
+find_package(Ignite)
+
+include_directories(../include ${IGNITE_INCLUDE_DIR})
+
+add_executable(${TARGET} src/thin_client_put_get_example.cpp)
+
+target_link_libraries(${TARGET} ${IGNITE_THIN_CLIENT_LIB} ${IGNITE_BINARY_LIB} 
${IGNITE_COMMON_LIB})
diff --git a/modules/platforms/cpp/ignite/CMakeLists.txt 
b/modules/platforms/cpp/ignite/CMakeLists.txt
new file mode 100644
index 0000000..1ffefaf
--- /dev/null
+++ b/modules/platforms/cpp/ignite/CMakeLists.txt
@@ -0,0 +1,32 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-bin)
+
+set(TARGET ignite-bin)
+
+include_directories(${JNI_INCLUDE_DIRS})
+
+set(SOURCES src/ignite.cpp)
+
+add_executable(${TARGET} ${SOURCES})
+
+target_link_libraries(${TARGET} ignite)
+
+set_target_properties(ignite-bin PROPERTIES OUTPUT_NAME ignite)
+
+install(TARGETS ${TARGET} RUNTIME DESTINATION bin)
diff --git a/modules/platforms/cpp/jni/CMakeLists.txt 
b/modules/platforms/cpp/jni/CMakeLists.txt
new file mode 100644
index 0000000..75f83f6
--- /dev/null
+++ b/modules/platforms/cpp/jni/CMakeLists.txt
@@ -0,0 +1,43 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-jni)
+
+set(TARGET ${PROJECT_NAME})
+
+find_library(JVM_LIBRARY jvm ${JAVA_JVM_LIBRARY_DIRECTORIES})
+
+include_directories(${JNI_INCLUDE_DIRS} include)
+
+set(SOURCES src/java.cpp src/exports.cpp)
+
+if (WIN32)
+    list(APPEND SOURCES os/win/src/utils.cpp)
+else()
+    list(APPEND SOURCES os/linux/src/utils.cpp)
+endif ()
+
+add_library(${TARGET} SHARED ${SOURCES})
+
+set_target_properties(${TARGET} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION})
+
+target_link_libraries(${TARGET} ignite-common ${JVM_LIBRARY})
+
+target_include_directories(${TARGET} INTERFACE include)
+
+install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include 
FILES_MATCHING PATTERN "*.h*")
diff --git a/modules/platforms/cpp/jni/os/linux/src/utils.cpp 
b/modules/platforms/cpp/jni/os/linux/src/utils.cpp
index 0fda52d..1fcdb31 100644
--- a/modules/platforms/cpp/jni/os/linux/src/utils.cpp
+++ b/modules/platforms/cpp/jni/os/linux/src/utils.cpp
@@ -39,6 +39,7 @@ namespace ignite
         const char* JAVA_HOME = "JAVA_HOME";
         const char* JAVA_DLL1 = "/jre/lib/amd64/server/libjvm.so";
         const char* JAVA_DLL2 = "/lib/server/libjvm.so";
+        const char* JAVA_DLL_DARWIN = "libjvm.dylib";
 
         const char* IGNITE_HOME = "IGNITE_HOME";
 
@@ -304,6 +305,9 @@ namespace ignite
 
         std::string FindJvmLibrary(const std::string& path)
         {
+#ifdef __APPLE__
+            return JAVA_DLL_DARWIN;
+#else
             // If path is provided explicitly, then check only it.
             if (!path.empty() && FileExists(path))
                 return path;
@@ -324,13 +328,18 @@ namespace ignite
             }
 
             return std::string();
+#endif
         }
 
         bool LoadJvmLibrary(const std::string& path)
         {
+#ifdef __APPLE__
+            return RTLD_DEFAULT;
+#else
             void* hnd = dlopen(path.c_str(), RTLD_LAZY);
             
             return hnd != NULL;
+#endif
         }
 
         /**
diff --git a/modules/platforms/cpp/network/CMakeLists.txt 
b/modules/platforms/cpp/network/CMakeLists.txt
new file mode 100644
index 0000000..d450f7d
--- /dev/null
+++ b/modules/platforms/cpp/network/CMakeLists.txt
@@ -0,0 +1,74 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-network)
+
+set(TARGET ${PROJECT_NAME})
+
+find_package(OpenSSL REQUIRED)
+
+include_directories(include src ${OPENSSL_INCLUDE_DIR})
+
+set(SOURCES src/network/network.cpp
+        src/network/ssl/secure_socket_client.cpp
+        src/network/ssl/ssl_gateway.cpp)
+
+if (WIN32)
+    include_directories(os/win/src)
+
+    list(APPEND SOURCES os/win/src/network/tcp_socket_client.cpp
+            os/win/src/network/sockets.cpp
+            os/win/src/network/utils.cpp)
+else()
+    include_directories(os/linux/src)
+
+    list(APPEND SOURCES os/linux/src/network/tcp_socket_client.cpp
+            os/linux/src/network/sockets.cpp
+            os/linux/src/network/utils.cpp)
+endif()
+
+list(APPEND _target_libs ${TARGET})
+if (WIN32)
+    add_library(${TARGET}-objlib OBJECT ${SOURCES})
+    add_library(${TARGET} SHARED $<TARGET_OBJECTS:${TARGET}-objlib>)
+
+    list(APPEND _target_libs ${TARGET}-objlib)
+else()
+    add_library(${TARGET} SHARED ${SOURCES})
+endif()
+
+foreach(_target_lib IN LISTS _target_libs)
+    set_target_properties(${_target_lib} PROPERTIES VERSION 
${CMAKE_PROJECT_VERSION})
+
+    if (${_target_lib} STREQUAL ${TARGET}-objlib)
+        set_target_properties(${_target_lib} PROPERTIES 
POSITION_INDEPENDENT_CODE 1)
+
+        target_link_libraries(${_target_lib} ignite-common-objlib)
+    else()
+        target_link_libraries(${_target_lib} ignite-common)
+    endif()
+
+    if (WIN32)
+        target_link_libraries(${_target_lib} wsock32 ws2_32 iphlpapi)
+    endif()
+
+    target_include_directories(${_target_lib} INTERFACE include ${OS_INCLUDE})
+endforeach()
+unset(_target_libs)
+
+install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include 
FILES_MATCHING PATTERN "*.h*")
diff --git 
a/modules/platforms/cpp/network/os/linux/src/network/tcp_socket_client.cpp 
b/modules/platforms/cpp/network/os/linux/src/network/tcp_socket_client.cpp
index e6fff91..0ad5d959 100644
--- a/modules/platforms/cpp/network/os/linux/src/network/tcp_socket_client.cpp
+++ b/modules/platforms/cpp/network/os/linux/src/network/tcp_socket_client.cpp
@@ -206,8 +206,11 @@ namespace ignite
                 // There is no sense in configuring keep alive params if we 
faileed to set up keep alive mode.
                 return;
             }
-
+#ifdef __APPLE__
+            setsockopt(socketHandle, IPPROTO_TCP, TCP_KEEPALIVE, 
reinterpret_cast<char*>(&idleOpt), sizeof(idleOpt));
+#else
             setsockopt(socketHandle, IPPROTO_TCP, TCP_KEEPIDLE, 
reinterpret_cast<char*>(&idleOpt), sizeof(idleOpt));
+#endif
 
             setsockopt(socketHandle, IPPROTO_TCP, TCP_KEEPINTVL,
                 reinterpret_cast<char*>(&idleRetryOpt), sizeof(idleRetryOpt));
diff --git a/modules/platforms/cpp/network/src/network/ssl/ssl_gateway.cpp 
b/modules/platforms/cpp/network/src/network/ssl/ssl_gateway.cpp
index e3139c1..94eea36 100644
--- a/modules/platforms/cpp/network/src/network/ssl/ssl_gateway.cpp
+++ b/modules/platforms/cpp/network/src/network/ssl/ssl_gateway.cpp
@@ -80,16 +80,20 @@ namespace ignite
 
                 if (!home.empty())
                 {
-                    std::stringstream constructor;
+                    const char* paths[] = {"bin", "lib"};
 
-                    constructor << home << Fs << "bin" << Fs << fullName;
+                    for (size_t i = 0; i < 2; i++) {
+                        std::stringstream constructor;
 
-                    std::string fullPath = constructor.str();
+                        constructor << home << Fs << paths[i] << Fs << 
fullName;
 
-                    Module mod = LoadModule(fullPath);
+                        std::string fullPath = constructor.str();
 
-                    if (mod.IsLoaded())
-                        return mod;
+                        Module mod = LoadModule(fullPath);
+
+                        if (mod.IsLoaded())
+                            return mod;
+                    }
                 }
 
                 return LoadModule(fullName);
diff --git a/modules/platforms/cpp/odbc-test/CMakeLists.txt 
b/modules/platforms/cpp/odbc-test/CMakeLists.txt
new file mode 100644
index 0000000..72e27e2
--- /dev/null
+++ b/modules/platforms/cpp/odbc-test/CMakeLists.txt
@@ -0,0 +1,104 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-odbc-tests)
+
+set(TARGET ${PROJECT_NAME})
+
+find_package(Boost 1.53 REQUIRED COMPONENTS unit_test_framework chrono thread 
system regex)
+
+if (WIN32)
+    set(Boost_USE_STATIC_LIBS ON)
+endif()
+
+find_package(ODBC REQUIRED)
+
+include_directories(include ../odbc/include ../network/include 
${ODBC_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${JNI_INCLUDE_DIRS})
+
+set(SOURCES src/teamcity/teamcity_boost.cpp
+        src/teamcity/teamcity_messages.cpp
+        src/parser_test.cpp
+        src/cursor_test.cpp
+        src/connection_info_test.cpp
+        src/connection_test.cpp
+        src/application_data_buffer_test.cpp
+        src/column_test.cpp
+        src/configuration_test.cpp
+        src/row_test.cpp
+        src/meta_queries_test.cpp
+        src/utility_test.cpp
+        src/queries_test.cpp
+        src/queries_ssl_test.cpp
+        src/test_utils.cpp
+        src/sql_test_suite_fixture.cpp
+        src/sql_string_functions_test.cpp
+        src/sql_numeric_functions_test.cpp
+        src/sql_aggregate_functions_test.cpp
+        src/sql_system_functions_test.cpp
+        src/sql_esc_convert_function_test.cpp
+        src/sql_operators_test.cpp
+        src/sql_value_expressions_test.cpp
+        src/sql_types_test.cpp
+        src/sql_date_time_functions_test.cpp
+        src/sql_outer_join_test.cpp
+        src/sql_get_info_test.cpp
+        src/api_robustness_test.cpp
+        src/attributes_test.cpp
+        src/errors_test.cpp
+        src/odbc_test_suite.cpp
+        src/types_test.cpp
+        src/transaction_test.cpp
+        src/authentication_test.cpp
+        src/sql_parsing_test.cpp
+        src/streaming_test.cpp
+        ../odbc/src/log.cpp
+        ../odbc/src/cursor.cpp
+        ../odbc/src/diagnostic/diagnostic_record.cpp
+        ../odbc/src/diagnostic/diagnostic_record_storage.cpp
+        ../odbc/src/config/config_tools.cpp
+        ../odbc/src/config/configuration.cpp
+        ../odbc/src/config/connection_info.cpp
+        ../odbc/src/config/connection_string_parser.cpp
+        ../odbc/src/app/application_data_buffer.cpp
+        ../odbc/src/ssl_mode.cpp
+        ../odbc/src/sql/sql_parser.cpp
+        ../odbc/src/sql/sql_lexer.cpp
+        ../odbc/src/sql/sql_set_streaming_command.cpp
+        ../odbc/src/sql/sql_utils.cpp
+        ../odbc/src/row.cpp
+        ../odbc/src/protocol_version.cpp
+        ../odbc/src/column.cpp
+        ../odbc/src/common_types.cpp
+        ../odbc/src/utility.cpp
+        ../odbc/src/result_page.cpp
+        ../odbc/src/nested_tx_mode.cpp)
+
+add_executable(${TARGET} ${SOURCES})
+
+target_link_libraries(${TARGET} ${Boost_LIBRARIES} ignite ${ODBC_LIBRARY})
+
+if (WIN32)
+    remove_definitions(-DUNICODE=1)
+else()
+    add_definitions(-DBOOST_TEST_DYN_LINK)
+endif()
+
+set(TEST_TARGET IgniteOdbcTest)
+
+add_test(NAME ${TEST_TARGET} COMMAND ${TARGET} --catch_system_errors=no 
--log_level=all)
+
+set_tests_properties(${TEST_TARGET} PROPERTIES ENVIRONMENT 
IGNITE_NATIVE_TEST_ODBC_CONFIG_PATH=${PROJECT_SOURCE_DIR}/config)
diff --git a/modules/platforms/cpp/odbc/CMakeLists.txt 
b/modules/platforms/cpp/odbc/CMakeLists.txt
new file mode 100644
index 0000000..5cbd99c
--- /dev/null
+++ b/modules/platforms/cpp/odbc/CMakeLists.txt
@@ -0,0 +1,108 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-odbc)
+
+set(TARGET ${PROJECT_NAME})
+
+find_package(ODBC REQUIRED)
+
+include_directories(include ${ODBC_INCLUDE_DIRS})
+
+set(SOURCES src/app/application_data_buffer.cpp
+        src/app/parameter.cpp
+        src/app/parameter_set.cpp
+        src/common_types.cpp
+        src/config/config_tools.cpp
+        src/config/configuration.cpp
+        src/config/connection_info.cpp
+        src/config/connection_string_parser.cpp
+        src/connection.cpp
+        src/cursor.cpp
+        src/diagnostic/diagnosable_adapter.cpp
+        src/diagnostic/diagnostic_record.cpp
+        src/diagnostic/diagnostic_record_storage.cpp
+        src/environment.cpp
+        src/meta/column_meta.cpp
+        src/meta/table_meta.cpp
+        src/odbc.cpp
+        src/entry_points.cpp
+        src/dsn_config.cpp
+        src/query/column_metadata_query.cpp
+        src/query/data_query.cpp
+        src/query/batch_query.cpp
+        src/query/foreign_keys_query.cpp
+        src/query/primary_keys_query.cpp
+        src/query/table_metadata_query.cpp
+        src/query/type_info_query.cpp
+        src/query/special_columns_query.cpp
+        src/query/streaming_query.cpp
+        src/sql/sql_parser.cpp
+        src/sql/sql_lexer.cpp
+        src/sql/sql_set_streaming_command.cpp
+        src/sql/sql_utils.cpp
+        src/streaming/streaming_batch.cpp
+        src/streaming/streaming_context.cpp
+        src/ssl_mode.cpp
+        src/protocol_version.cpp
+        src/result_page.cpp
+        src/row.cpp
+        src/nested_tx_mode.cpp
+        src/message.cpp
+        src/column.cpp
+        src/statement.cpp
+        src/type_traits.cpp
+        src/utility.cpp
+        src/log.cpp)
+
+if (WIN32)
+    include_directories(os/win/include)
+
+    list(APPEND SOURCES os/win/src/system_dsn.cpp
+            os/win/src/system/ui/custom_window.cpp
+            os/win/src/system/ui/dsn_configuration_window.cpp
+            os/win/src/system/ui/window.cpp)
+endif ()
+
+add_library(${TARGET} SHARED ${SOURCES})
+
+set_target_properties(${TARGET} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION})
+
+target_link_libraries(${TARGET} ${ODBC_LIBRARIES})
+
+if (WIN32)
+    target_link_libraries(${TARGET} ignite-common-objlib ignite-binary-objlib 
ignite-network-objlib shlwapi)
+
+    remove_definitions(-DUNICODE=1)
+
+    add_definitions(-DTARGET_MODULE_FULL_NAME="${TARGET}")
+
+    if (MSVC_VERSION GREATER_EQUAL 1900)
+        target_link_libraries(${TARGET} legacy_stdio_definitions)
+    endif()
+else()
+    target_link_libraries(${TARGET} ignite-common ignite-binary ignite-network)
+endif()
+
+target_include_directories(${TARGET} INTERFACE include)
+
+install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include 
FILES_MATCHING PATTERN "*.h*")
+
+if (WIN32)
+    install(DIRECTORY os/win/include/ DESTINATION 
${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h*")
+endif()
diff --git a/modules/platforms/cpp/thin-client-test/CMakeLists.txt 
b/modules/platforms/cpp/thin-client-test/CMakeLists.txt
new file mode 100644
index 0000000..381220b
--- /dev/null
+++ b/modules/platforms/cpp/thin-client-test/CMakeLists.txt
@@ -0,0 +1,36 @@
+project(ignite-thin-client-tests)
+
+set(TARGET ${PROJECT_NAME})
+
+if (WIN32)
+    set(Boost_USE_STATIC_LIBS ON)
+endif()
+
+find_package(Boost 1.53 REQUIRED COMPONENTS unit_test_framework chrono thread 
system)
+
+include_directories(include ${Boost_INCLUDE_DIRS} ${JNI_INCLUDE_DIRS})
+
+set(SOURCES src/teamcity/teamcity_boost.cpp
+        src/teamcity/teamcity_messages.cpp
+        src/cache_client_test.cpp
+        src/test_utils.cpp
+        src/ignite_client_test.cpp
+        src/auth_test.cpp
+        src/ssl_test.cpp)
+
+add_executable(${TARGET} ${SOURCES})
+
+target_link_libraries(${TARGET} ignite-thin-client ignite ${Boost_LIBRARIES})
+
+if (NOT WIN32)
+    add_definitions(-DBOOST_TEST_DYN_LINK)
+
+    target_link_libraries(${TARGET} -rdynamic)
+endif()
+
+set(TEST_TARGET IgniteThinClientTest)
+
+add_test(NAME ${TEST_TARGET} COMMAND ${TARGET} --catch_system_errors=no 
--log_level=all)
+
+set_tests_properties(${TEST_TARGET} PROPERTIES ENVIRONMENT
+        IGNITE_NATIVE_TEST_CPP_THIN_CONFIG_PATH=${PROJECT_SOURCE_DIR}/config)
diff --git a/modules/platforms/cpp/thin-client/CMakeLists.txt 
b/modules/platforms/cpp/thin-client/CMakeLists.txt
new file mode 100644
index 0000000..5cd121f
--- /dev/null
+++ b/modules/platforms/cpp/thin-client/CMakeLists.txt
@@ -0,0 +1,48 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(ignite-thin-client)
+
+set(TARGET ${PROJECT_NAME})
+
+include_directories(include src)
+
+set(SOURCES src/impl/data_channel.cpp
+        src/impl/utility.cpp
+        src/impl/protocol_version.cpp
+        src/impl/ignite_node.cpp
+        src/impl/ignite_client_impl.cpp
+        src/impl/data_router.cpp
+        src/impl/affinity/affinity_topology_version.cpp
+        src/impl/affinity/affinity_assignment.cpp
+        src/impl/affinity/affinity_manager.cpp
+        src/impl/remote_type_updater.cpp
+        src/impl/message.cpp
+        src/impl/cache/cache_client_proxy.cpp
+        src/impl/cache/cache_client_impl.cpp
+        src/ignite_client.cpp)
+
+add_library(${TARGET} SHARED ${SOURCES})
+
+set_target_properties(${TARGET} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION})
+
+target_link_libraries(${TARGET} ignite-binary ignite-network)
+
+target_include_directories(${TARGET} INTERFACE include)
+
+install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include 
FILES_MATCHING PATTERN "*.h*")
diff --git a/parent/pom.xml b/parent/pom.xml
index cbc099e..c8d7a5b 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -921,6 +921,8 @@
                                         <!--platforms-->
                                         
<exclude>src/test/binaries/repo/org/apache/ignite/binary/test1/1.1/test1-1.1.jar</exclude>
                                         
<exclude>src/test/binaries/repo/org/apache/ignite/binary/test2/1.1/test2-1.1.jar</exclude>
+                                        <exclude>**/*.cmake</exclude>
+                                        <exclude>**/CMakeLists.txt</exclude>
                                         <exclude>**/Makefile.am</exclude>
                                         <exclude>**/configure.ac</exclude>
                                         <exclude>**/Makefile.amrel</exclude>

Reply via email to