cmake_minimum_required(VERSION 3.0)

project(tinyrpc)



set(CMAKE_CXX_STANDARD 17)

enable_language(CXX ASM)

add_compile_options(-g -Wall)

include_directories(includes/coroutine)
include_directories(includes/log)
include_directories(includes/net)
include_directories(includes/net/tcp)
include_directories(includes/net/tinypb)

aux_source_directory(${CMAKE_SOURCE_DIR}/src SRC_LIST)
aux_source_directory(${CMAKE_SOURCE_DIR}/src/coroutine COROUTINE_SRC_LIST)
aux_source_directory(${CMAKE_SOURCE_DIR}/src/net NET_SRC_LIST)
aux_source_directory(${CMAKE_SOURCE_DIR}/src/net/tcp TCP_SRC_LIST)
aux_source_directory(${CMAKE_SOURCE_DIR}/src/net/tinypb TINYPB_SRC_LIST)


set(ASM_FILES ${CMAKE_SOURCE_DIR}/src/coroutine/coctx_swap.S)

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH  ${CMAKE_SOURCE_DIR}/bin)

# find_library(TINYRPC_LIB tinyrpc ${CMAKE_SOURCE_DIR}/lib)


add_library(tinyrpc 
        # ${SRC_LIST}
        ${COROUTINE_SRC_LIST}
        ${TCP_SRC_LIST}
        ${NET_SRC_LIST}
        ${TINYPB_SRC_LIST}
        ${ASM_FILES} 
)

# 引入 abseil-cpp 子目录
add_subdirectory(./third_party/abseil-cpp absl)

set(ABSEL_LIBARARY
    absl::absl_check
    absl::absl_log
    absl::algorithm
    absl::base
    absl::bind_front
    absl::bits
    absl::btree
    absl::cleanup
    absl::cord
    absl::core_headers
    absl::debugging
    absl::die_if_null
    absl::dynamic_annotations
    absl::flags
    absl::flat_hash_map
    absl::flat_hash_set
    absl::function_ref
    absl::hash
    absl::layout
    absl::log_initialize
    absl::log_severity
    absl::memory
    absl::node_hash_map
    absl::node_hash_set
    absl::optional
    absl::span
    absl::status
    absl::statusor
    absl::strings
    absl::synchronization
    absl::time
    absl::type_traits
    absl::utility
    absl::variant
)
# 链接库
target_link_libraries(tinyrpc PRIVATE protobuf)  # 链接 Protobuf 库
target_link_libraries(tinyrpc PRIVATE ${ABSEL_LIBARARY})  # 链接 Protobuf 库


aux_source_directory(${CMAKE_SOURCE_DIR}/test/servertest SER_TEST_SRC_LIST)
aux_source_directory(${CMAKE_SOURCE_DIR}/test/clienttest CLI_TEST_SRC_LIST)


add_executable(test_tinyrpc_server 
        ${SER_TEST_SRC_LIST}
)
add_executable(test_tinyrpc_client
        ${CLI_TEST_SRC_LIST}
)


target_link_libraries(test_tinyrpc_server PRIVATE tinyrpc)
target_link_libraries(test_tinyrpc_client PRIVATE tinyrpc)


aux_source_directory(${CMAKE_SOURCE_DIR}/test/codertest TEST_SRC_LIST)

add_executable(test_tinyrpc 
        ${TEST_SRC_LIST}
)

target_link_libraries(test_tinyrpc PRIVATE tinyrpc)