if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
    cmake_minimum_required(VERSION 3.20)
    project(ipcnode LANGUAGES CXX)
endif()

# 由使用方 FetchContent_Declare(SOURCE_DIR ...) 指向本目录后 MakeAvailable。
# 不安装、不提供 find_package 配置；C++ 标准沿用使用方的，最低 C++20。
find_package(Boost REQUIRED)

add_library(
    ipcnode
    STATIC
    src/protocol.cpp
    src/ipcnode.cpp
)
add_library(ipcnode::ipcnode ALIAS ipcnode)

target_compile_features(ipcnode PUBLIC cxx_std_20)
set_target_properties(
    ipcnode
    PROPERTIES
        DEBUG_POSTFIX
            "_d"
        POSITION_INDEPENDENT_CODE
            ON
)

target_include_directories(ipcnode PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
target_compile_definitions(
    ipcnode
    PUBLIC
        BOOST_ALL_NO_LIB
        BOOST_JSON_HEADER_ONLY
)
target_link_libraries(ipcnode PUBLIC Boost::boost)

if(WIN32)
    target_sources(ipcnode PRIVATE src/os_win.cpp)
    set_property(
        SOURCE src/os_win.cpp
        APPEND
        PROPERTY COMPILE_DEFINITIONS WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0A00 NOMINMAX
    )
else()
    target_sources(ipcnode PRIVATE src/os_posix.cpp)
    find_package(Threads REQUIRED)
    target_link_libraries(ipcnode PUBLIC Threads::Threads rt)
endif()
