cmake_minimum_required(VERSION 4.0)
project(shmcpp)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if (WIN32)
    set(PLATFORM_SOURCES
            src/handle/win32/handle.cpp
            src/containers/win32/spsc_ring_buffer.cpp
            src/containers/win32/mpsc_ring_buffer.cpp
    )
    set(PLATFORM_HEADERS
            include/shmcpp/detail/handle/win32/handle.hpp
            include/shmcpp/detail/handle/win32/native_api.hpp
            include/shmcpp/detail/handle/win32/utils.hpp
            include/shmcpp/detail/containers/win32/spsc_ring_buffer.hpp
            include/shmcpp/detail/containers/win32/mpsc_ring_buffer.hpp
    )
else ()
    set(PLATFORM_SOURCES
            src/handle/posix/handle.cpp
            src/containers/posix/spsc_ring_buffer.cpp
            src/containers/posix/mpsc_ring_buffer.cpp
    )
    set(PLATFORM_HEADERS
            include/shmcpp/detail/handle/posix/handle.hpp
            include/shmcpp/detail/containers/posix/spsc_ring_buffer.hpp
            include/shmcpp/detail/containers/posix/mpsc_ring_buffer.hpp
    )
endif ()

add_library(shmcpp STATIC
        src/shared_memory.cpp
        src/mapped_view.cpp
        src/containers/spsc_ring_buffer.cpp
        src/containers/mpsc_ring_buffer.cpp
        ${PLATFORM_SOURCES}
        include/shmcpp/shared_memory.hpp
        include/shmcpp/mapped_view.hpp
        include/shmcpp/containers/spsc_ring_buffer.hpp
        include/shmcpp/containers/mpsc_ring_buffer.hpp
        include/shmcpp/detail/handle/handle_concept.hpp
        ${PLATFORM_HEADERS}
)

target_include_directories(shmcpp PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}/include
)
