libtugraph-sys 0.1.2+3.5.0

Native bindings to liblgraph
Documentation
cmake_minimum_required(VERSION 3.1)

# boost
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.68 REQUIRED COMPONENTS system filesystem)

# threads
find_package(Threads REQUIRED)

if (ENABLE_FULLTEXT_INDEX)
    # jni
    if (APPLE)
        SET(JAVA_INCLUDE_PATH "$ENV{JAVA_INCLUDE_PATH}")
    endif ()
    find_package(JNI REQUIRED)
endif ()

# generate version info
include(cmake/GenerateVersionInfo.cmake)
GenerateVersionInfo(${LGRAPH_VERSION_MAJOR} ${LGRAPH_VERSION_MINOR} ${LGRAPH_VERSION_PATCH}
        ${CMAKE_CURRENT_LIST_DIR}/core/version.h.in
        ${CMAKE_CURRENT_LIST_DIR}/core/version.h)

# protbuf
include(cmake/GenerateProtobuf.cmake)
GenerateProtobufCpp(${CMAKE_CURRENT_LIST_DIR}/protobuf
        PROTO_SRCS PROTO_HEADERS
        ${CMAKE_CURRENT_LIST_DIR}/protobuf/ha.proto)

set(LGRAPH_CORE_SRC
        core/audit_logger.cpp
        core/data_type.cpp
        core/edge_index.cpp
        core/field_extractor.cpp
        core/full_text_index.cpp
        core/global_config.cpp
        core/graph.cpp
        core/graph_edge_iterator.cpp
        core/graph_vertex_iterator.cpp
        core/index_manager.cpp
        core/iterator_base.cpp
        core/kv_store_iterator.cpp
        core/kv_store_mdb.cpp
        core/kv_store_table.cpp
        core/kv_store_transaction.cpp
        core/kv_table_comparators.cpp
        core/lgraph_date_time.cpp
        core/lightning_graph.cpp
        core/schema.cpp
        core/sync_file.cpp
        core/thread_id.cpp
        core/transaction.cpp
        core/vertex_index.cpp
        core/wal.cpp
        core/lmdb/mdb.c
        core/lmdb/midl.c)

set(LGRAPH_DB_SRC
        db/acl.cpp
        db/db.cpp
        db/galaxy.cpp
        db/graph_manager.cpp
        db/token_manager.cpp)

set(LGRAPH_API_SRC
        lgraph_api/c.cpp
        lgraph_api/lgraph_db.cpp
        lgraph_api/lgraph_edge_iterator.cpp
        lgraph_api/lgraph_galaxy.cpp
        lgraph_api/olap_base.cpp
        lgraph_api/lgraph_vertex_index_iterator.cpp
        lgraph_api/lgraph_edge_index_iterator.cpp
        lgraph_api/lgraph_traversal.cpp
        lgraph_api/lgraph_txn.cpp
        lgraph_api/lgraph_utils.cpp
        lgraph_api/lgraph_vertex_iterator.cpp
        lgraph_api/lgraph_result.cpp
        lgraph_api/result_element.cpp)

set(TARGET_LGRAPH lgraph)

add_library(${TARGET_LGRAPH} SHARED
        ${LGRAPH_API_SRC}
        ${LGRAPH_CORE_SRC}
        ${LGRAPH_DB_SRC}
        ${LGRAPH_ALGO_SRC}

        plugin/cpp_plugin.cpp
        plugin/plugin_context.cpp
        plugin/plugin_manager.cpp
        plugin/python_plugin.cpp


        ${DEPS_INCLUDE_DIR}/tiny-process-library/process.cpp
        ${DEPS_INCLUDE_DIR}/tiny-process-library/process_unix.cpp
        ${PROTO_SRCS})

target_include_directories(${TARGET_LGRAPH} PUBLIC
        ${DEPS_LOCAL_INCLUDE_DIR}
        ${DEPS_INCLUDE_DIR}
        ${LGRAPH_INCLUDE_DIR}
        ${LGRAPH_SRC_DIR}
        ${LGRAPH_SRC_DIR}/cypher
        ${JNI_INCLUDE_DIRS})

if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
    target_link_libraries(${TARGET_LGRAPH} PUBLIC
            libgomp.a
            -static-libstdc++
            -static-libgcc
            libstdc++fs.a
            ${Boost_LIBRARIES}
            -Wl,-Bdynamic
            -Wl,--whole-archive
            ${PROTOBUF_LIBRARY}
            -Wl,--no-whole-archive
            ${JAVA_JVM_LIBRARY}
            crypto
            pthread
            rt
            z
            )
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
        target_link_libraries(${TARGET_LGRAPH} PUBLIC
                boost_system
                boost_filesystem
                omp
                pthread
                crypto
                ${PROTOBUF_LIBRARY}
                ${JAVA_JVM_LIBRARY})
    else ()
        target_link_libraries(${TARGET_LGRAPH} PUBLIC
                rt
                omp
                pthread
                -Wl,-Bstatic
                ${Boost_LIBRARIES}
                -Wl,-Bdynamic
                c++experimental
                c++fs
                crypto
                -Wl,--whole-archive
                ${PROTOBUF_LIBRARY}
                -Wl,--no-whole-archive
                ${JAVA_JVM_LIBRARY}
                z)
    endif ()
endif ()

if (ENABLE_SQL_IO)
    find_library(ODBC_LIBRARIES NAMES odbc)
    if (ODBC_LIBRARIES_NOT_FOUND)
        message(FATAL_ERROR "ODBC enabled, but unable to find ODBC library.")
    endif (ODBC_LIBRARIES_NOT_FOUND)
    target_sources(${TARGET_LGRAPH} PRIVATE ${DEPS_INCLUDE_DIR}/fma-common/sql_stream.cpp)
    target_link_libraries(${TARGET_LGRAPH} PUBLIC odbc)
endif (ENABLE_SQL_IO)

set_target_properties(lgraph PROPERTIES OUTPUT_NAME "lgraph")
target_compile_definitions(lgraph PUBLIC -DBOOST_STACKTRACE_USE_ADDR2LINE=1)