#  Copyright (C) GridGain Systems. All Rights Reserved.
#  _________        _____ __________________        _____
#  __  ____/___________(_)______  /__  ____/______ ____(_)_______
#  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
#  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
#  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/

set(TARGET gridgain-common)

set(PUBLIC_HEADERS
    big_decimal.h
    big_integer.h
    binary_object.h
    bit_array.h
    bytes_view.h
    detail/bits.h
    detail/byte_traits.h
    detail/bytes.h
    detail/config.h
    detail/byte_traits.h
    detail/mpi.h
    end_point.h
    error_codes.h
    ignite_date.h
    ignite_date_time.h
    ignite_duration.h
    ignite_error.h
    ignite_period.h
    ignite_result.h
    ignite_time.h
    ignite_timestamp.h
    ignite_type.h
    primitive.h
    uuid.h
)

set(PRIVATE_HEADERS
    detail/callback_executor.h
    detail/defer.h
    detail/duration_min_max.h
    detail/factory.h
    detail/ignite_mbedtls_config.h
    detail/server_version.h
    detail/string_utils.h
    detail/thread_timer.h
    detail/utils.h
)

ignite_check_headers(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC ${PUBLIC_HEADERS} PRIVATE ${PRIVATE_HEADERS})

ignite_collect_public_headers(common PUBLIC_HEADERS)

set(SOURCES
    big_decimal.cpp
    big_integer.cpp
    detail/callback_executor.cpp
    detail/hash_utils.cpp
    detail/name_utils.cpp
    detail/mpi.cpp
    detail/string_utils.cpp
    detail/string_extensions.cpp
    detail/thread_timer.cpp
    uuid.cpp
    detail/hash_calculator.cpp
    detail/murmur3_hash.cpp
)

add_library(${TARGET} STATIC ${SOURCES})

target_link_libraries(${TARGET} PUBLIC
    TF-PSA-Crypto::tfpsacrypto
    uni-algo::uni-algo
)

target_include_directories(${TARGET}
    PUBLIC
        $<BUILD_INTERFACE:${IGNITE_CMAKE_TOP_DIR}>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
    INTERFACE
        $<INSTALL_INTERFACE:${IGNITE_INCLUDEDIR}>)

ignite_install_headers(FILES ${PUBLIC_HEADERS} DESTINATION ${IGNITE_INCLUDEDIR}/common COMPONENT client)

ignite_test(bits_test DISCOVER SOURCES detail/bits_test.cpp LIBS ${TARGET})
ignite_test(bytes_test DISCOVER SOURCES detail/bytes_test.cpp LIBS ${TARGET})
ignite_test(string_utils_test DISCOVER SOURCES detail/string_utils_test.cpp LIBS ${TARGET})
ignite_test(thread_timer_test DISCOVER SOURCES detail/thread_timer_test.cpp LIBS ${TARGET})
ignite_test(callback_executor_test DISCOVER SOURCES detail/callback_executor_test.cpp LIBS ${TARGET})
ignite_test(uuid_test DISCOVER SOURCES uuid_test.cpp LIBS ${TARGET})
ignite_test(bignum_test DISCOVER SOURCES bignum_test.cpp LIBS ${TARGET})
ignite_test(primitive_test DISCOVER SOURCES primitive_test.cpp LIBS ${TARGET})
ignite_test(hash_utils_test DISCOVER SOURCES detail/hash_utils_test.cpp LIBS ${TARGET})
ignite_test(name_utils_test DISCOVER SOURCES detail/name_utils_test.cpp LIBS ${TARGET})
ignite_test(bit_array_test DISCOVER SOURCES bit_array_test.cpp LIBS ${TARGET})
