Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
07a1e32
feat: netlib 2.0 phase 0 — core primitives without C++ stdlib
cursoragent Jul 8, 2026
eda7b6a
feat: phase 1 — io_uring engine and buffer_registry (Linux)
cursoragent Jul 8, 2026
311c9f3
docs: AGENT_RULES.md — git/PR policy and architecture (tracked mirror…
cursoragent Jul 8, 2026
e646ac9
feat(v2): Phase 1 — io_context, connect/accept, socket_posix, TCP echo
cursoragent Jul 8, 2026
536b4a1
feat(v2): READ/WRITE_FIXED, async accept, non-blocking poll
cursoragent Jul 8, 2026
1764b9f
feat(v2): Phase 2 — socket, byte_stream, operator| pipeline
cursoragent Jul 8, 2026
956a344
feat(v2): tcp_acceptor, resolve_host, connect(host), pipe accept
cursoragent Jul 8, 2026
56dcfa5
feat(v2): async connect via pipe — run_connect, connect_async
cursoragent Jul 8, 2026
4ecb99b
feat(v2): coroutine awaitables поверх pipe — io_task, sync_wait
cursoragent Jul 8, 2026
609d10c
feat(v2): parallel TCP handshake — run_handshake, coro multi-wait
cursoragent Jul 8, 2026
62bb041
feat(v2): Windows RIO engine skeleton + Winsock socket layer
cursoragent Jul 8, 2026
6140d1a
feat(v2): generic coro when_all — multi_op, pump_multi, handshake ref…
cursoragent Jul 8, 2026
c9891cb
feat(v2): pipe::run_when_all — parallel submit/poll в nostd слое
cursoragent Jul 8, 2026
596eefa
feat(v2): io_uring capability probe + blocking connect fallback
cursoragent Jul 9, 2026
fae2ce1
fix(v2): coro connect/handshake fallback через pipe::run_* при !suppo…
cursoragent Jul 9, 2026
f8c67d8
feat(v2): registered I/O span fallback в io_context + pipe fixed stages
cursoragent Jul 9, 2026
00555ad
feat(v2): coro fixed I/O awaitables + pipe run_echo_fixed
cursoragent Jul 9, 2026
e846dd8
feat(v2): echo_fixed_async, parallel read_fixed + RIO request queue p…
cursoragent Jul 9, 2026
7150af8
feat(v2): Linux coro fixed I/O integration + RIO buffer registration
cursoragent Jul 9, 2026
e81bd92
feat(v2): async echo_fixed_awaitable через sequential pump + pipe whe…
cursoragent Jul 9, 2026
41550e9
feat(v2): operator co_await(io_task) + async echo_async + sequential …
cursoragent Jul 9, 2026
d29dded
test(v2): Linux io_uring integration для echo_async, run_echo, when_a…
cursoragent Jul 9, 2026
7e8add2
feat(v2): coro connect_async/handshake_async(host) + CHANGELOG
cursoragent Jul 9, 2026
c34e94e
feat(v2): pipe run_connect_host + RIO fixed I/O hardware path
cursoragent Jul 9, 2026
971dd85
feat(v2): bind_host, accept_bind_async, sequential_awaitable_base
cursoragent Jul 9, 2026
39b5b93
feat(v2): sequential2 awaitables, RIO span pool, accept integration
cursoragent Jul 9, 2026
56fae14
feat(v2): sequentialN chain + echo refactor + bind_host handshake test
cursoragent Jul 9, 2026
2dd392f
feat(v2): accept_connect_async + sequential defer_write
cursoragent Jul 9, 2026
a8995ee
feat(v2): when_all handshake fallback, v2_echo examples, io_uring cor…
cursoragent Jul 9, 2026
1dac909
feat(v2): connect_async(host) io_uring tests, restore v2_echo client,…
cursoragent Jul 9, 2026
74a6634
feat(v2): byte_stream::mark_filled, write_buffered, client echo round…
cursoragent Jul 9, 2026
7677f9b
feat(v2): read_exact_async, write_all_async и span::subspan
cursoragent Jul 9, 2026
3606368
feat(v2): read_text_async, write_text_async и фикс serve_once test
cursoragent Jul 9, 2026
dff52b5
feat(v2): echo_peer_async, accept_echo_n и multi-session server
cursoragent Jul 9, 2026
2fda617
feat(v2): stop_token и accept_echo_loop_async
cursoragent Jul 9, 2026
de3130f
feat(v2): thread-safe stop_token и graceful shutdown server
cursoragent Jul 9, 2026
45348da
feat(v2): stoppable accept, io_error::cancelled и RIO coro tests
cursoragent Jul 9, 2026
3a5a6ad
feat(v2): cross-platform v2_echo examples (Linux io_uring, Windows RIO)
cursoragent Jul 9, 2026
f7c676e
feat(v2): Windows RIO blocking Winsock fallback for real TCP coro I/O
cursoragent Jul 9, 2026
469e39d
test(v2): Windows RIO real TCP multi-session and stop integration tests
cursoragent Jul 9, 2026
461781c
feat(v2): Linux eventfd wake for stop_source in poll_accept_peer
cursoragent Jul 9, 2026
ac41fe6
refactor(v2): granular coro blocking traits for io_uring production path
cursoragent Jul 9, 2026
c556f7f
feat(v2): io_uring poll blocks on pending ops; enable async read/write
cursoragent Jul 9, 2026
a2f429e
fix(io_uring): async accept/connect + poll_accept_peer accept/wake race
cursoragent Jul 9, 2026
cefb0e5
feat(v2): io_uring poll timeout + per-op connect sockaddr scratch
cursoragent Jul 9, 2026
32c9d76
feat(v2): per-op accept addrlen + Windows stop wake
cursoragent Jul 9, 2026
0a95b86
feat(v2): accept_peer_buffer, dual-accept when_all, Windows socket tests
cursoragent Jul 9, 2026
ec31321
feat(v2): io_uring poll via IORING_ENTER_EXT_ARG timespec
cursoragent Jul 9, 2026
bec2f95
feat(v2): RIO real TCP accept/connect in software path
cursoragent Jul 9, 2026
e5e2eca
feat(v2): RIO poll timeout via WSAPoll + accept+connect when_all test
cursoragent Jul 9, 2026
e5dd40e
feat(v2): RIO hardware inflight tracking + concurrent connects test
cursoragent Jul 9, 2026
cff069a
fix(v2): require per-op scratch for async connect/accept
cursoragent Jul 9, 2026
abd3168
fix(ci): MSVC nostd portability + v2_echo smoke stability
cursoragent Jul 9, 2026
31413cf
fix(windows): RIO SDK API + MSVC memcpy byte-loop fallback
cursoragent Jul 9, 2026
d1dc05f
fix(windows): test TU portability for MSVC CI
cursoragent Jul 9, 2026
8f03933
fix(windows): rio/coro test includes and Winsock macro guards
cursoragent Jul 9, 2026
1d46920
fix(windows): rio_tests avoid Winsock byte/socket name clashes
cursoragent Jul 9, 2026
d9d50af
fix(windows): rio_tests qualify io_context/socket names
cursoragent Jul 9, 2026
417c3f3
fix(windows): qualify netlib types in test TUs with Winsock
cursoragent Jul 9, 2026
bd985ba
fix(windows): socket_tests second Windows case nl::byte
cursoragent Jul 9, 2026
57f2ccb
fix(tests): Windows Winsock byte macro via win_test_prereq
cursoragent Jul 9, 2026
dbd12f2
fix(windows): isolate Winsock from test TUs and rename memory_copy
cursoragent Jul 9, 2026
e1a73fa
fix(windows): rename log namespace alias to nlog (SDK conflict)
cursoragent Jul 9, 2026
84089db
fix(windows): enable v2_echo examples when POSIX examples skipped
cursoragent Jul 9, 2026
5878521
fix(windows): refcounted WSAStartup and software buffer registry
cursoragent Jul 9, 2026
fd146d8
fix(windows): use high mock fds in rio coro unit tests
cursoragent Jul 9, 2026
381f81e
fix(windows): coro blocking path only for live SOCKET handles
cursoragent Jul 9, 2026
438d737
docs: Windows CI stabilization, v2 testing guide, 97 test cases
cursoragent Jul 9, 2026
1f77461
feat(windows): rio_engine force_software_mode for mock-fd tests
cursoragent Jul 9, 2026
1848a04
feat(windows): RIO live TCP I/O in software path + integration tests
cursoragent Jul 9, 2026
14ef3e6
fix(windows): read_into requires byte_stream lvalue in rio test
cursoragent Jul 9, 2026
3039158
fix(ci): macOS POSIX platform + MSVC read_into lvalue
cursoragent Jul 9, 2026
4cd20e9
fix(macos): tcp_acceptor POSIX + drain_stop_wake in socket_posix
cursoragent Jul 9, 2026
9e038e6
fix(macos): include socket_posix.hpp for NETLIB_PLATFORM_POSIX
cursoragent Jul 9, 2026
5212c3e
feat(benchmarks): v2_echo_bench for io_uring/RIO coro echo
cursoragent Jul 9, 2026
5d0285a
ci: smoke v2_echo_bench; rio hardware span TCP test
cursoragent Jul 9, 2026
a18b3f9
feat(macos): poll_engine + v2_echo via poll() software path
cursoragent Jul 9, 2026
decf0af
test(macos): coro integration tests via poll_engine
cursoragent Jul 9, 2026
1668347
fix(macos): platform::io_context alias for poll_engine
cursoragent Jul 9, 2026
24411d1
fix(macos): posix_poll close_socket + coro helper for POSIX
cursoragent Jul 9, 2026
754cbad
fix(macos): coro blocking I/O fallback for poll_engine
cursoragent Jul 9, 2026
5fc98a4
fix(macos): use blocking_read_some in poll_engine TCP tests
cursoragent Jul 9, 2026
ad7d6c1
fix(macos): io::byte_stream alias in poll_engine coro test
cursoragent Jul 9, 2026
08d005e
feat(macos): v2_echo_bench via poll_engine + CI smoke
cursoragent Jul 9, 2026
e6f3d43
feat(v2): UDP recvfrom/sendto pipe + v2_udp_echo example
cursoragent Jul 13, 2026
50a3000
fix(macos): high mock fd in poll test; blocking_recvfrom in udp test
cursoragent Jul 13, 2026
23e0d85
feat(v2): coro UDP recvfrom/sendto + udp_echo_datagram_async
cursoragent Jul 13, 2026
9afde42
chore(ci): remove GitHub Actions, add local scripts/ci.sh
cursoragent Jul 13, 2026
ebfb91e
feat(v2): udp_echo_loop_async + v2_udp_echo coro examples
cursoragent Jul 13, 2026
273f228
feat(windows): v2 UDP via rio_engine blocking Winsock path
cursoragent Jul 13, 2026
f9dfb98
feat(windows): async UDP via rio_engine (WSAPoll + RIOReceiveEx/SendEx)
cursoragent Jul 13, 2026
69805e4
feat(linux): async UDP via io_uring RECVMSG/SENDMSG
cursoragent Jul 13, 2026
b163133
feat(v2): fully async macOS UDP and v2 UDP benchmark
cursoragent Jul 13, 2026
76313d4
feat(modules): add coroutine module interface
cursoragent Jul 13, 2026
8f16b60
feat(modules): add module-first core v2
cursoragent Jul 13, 2026
3dce724
feat(modules): add module-first IO layer
cursoragent Jul 13, 2026
a1e71f2
feat(modules): add Linux platform modules
cursoragent Jul 13, 2026
f1171d0
feat(modules): add Windows platform modules
cursoragent Jul 13, 2026
38fe808
feat(modules): add POSIX platform modules
cursoragent Jul 13, 2026
510a249
Replace legacy headers with module import facades
cursoragent Jul 13, 2026
7e8e466
Replace platform headers with module import stubs
cursoragent Jul 13, 2026
2a1772b
Replace v2 headers with module import stubs
cursoragent Jul 13, 2026
95d7b8d
Fix C++ module API visibility
cursoragent Jul 13, 2026
61b5fe3
Rename platform module names
cursoragent Jul 13, 2026
12b1d85
docs: document completed v2 module migration
cursoragent Jul 13, 2026
39a8b77
build(modules): make C++26 module graph canonical
cursoragent Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 0 additions & 69 deletions .github/workflows/ci.yml

This file was deleted.

28 changes: 27 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,31 @@

## [Unreleased]

### Changed

- Завершена module-first миграция netlib 2.0: реализация v2 перенесена в
`modules/cxx/**/*.cppm`, заголовочные пути v2 оставлены compatibility import
facades без собственной реализации.
- C++26 modules теперь обязательны; минимальные требования — CMake 3.30,
Ninja, Clang 18+, GCC 15+ или MSVC 19.38+.
- Канонический target потребителя — `netlib::modules`, основной импорт —
`import netlib;`.
- Legacy v1 API и документация сохранены, но больше не являются рекомендуемой
точкой входа.

### Added

- Иерархия модулей `netlib.core`, `netlib.io`, `netlib.io.coro` и платформенные
primary modules `netlib.platform.uring`, `netlib.platform.rio`,
`netlib.platform.poll`.
- Core-типы без stdlib, pipe/coroutine API, TCP/UDP, stop/cancel, mock engine и
платформенные backends для io_uring, RIO и poll.
- Установка экспортирует `netlib::modules` вместе с CMake `CXX_MODULES`
`FILE_SET`; добавлен внешний install-consumer smoke.
- Локальный `scripts/ci.sh`: Clang по умолчанию, GCC 15+ по запросу; build,
nostd module gate, runtime smoke, `ctest`, install и external consumer.
- V2 echo/UDP examples и loopback benchmarks для поддерживаемых платформ.

## [1.0.0] — 2026-05-22

Первый стабильный релиз поверх bootstrap `0.1.0`. Semver: `find_package(netlib 1.0)`.
Expand All @@ -24,4 +49,5 @@

## [0.1.0] — bootstrap

- Header-only `netlib::netlib`, execution fallback, TCP epoll, Catch2 tests
- Legacy v1 bootstrap: header-only `netlib::netlib`, execution fallback, TCP
epoll, Catch2 tests
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.24)
cmake_minimum_required(VERSION 3.30)

project(netlib VERSION 1.0.0 LANGUAGES CXX)
project(netlib VERSION 2.0.0 LANGUAGES CXX)

include(${CMAKE_CURRENT_LIST_DIR}/cmake/netlib_options.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/netlib_probes.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/netlib_target.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/netlib_core.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/netlib_install.cmake)

if(NETLIB_BUILD_EXAMPLES)
Expand Down
108 changes: 62 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,72 +1,88 @@
# netlib

**v1.0.0** — header-only C++23 библиотека: слой **execution** (планирование задач) и **net** (TCP, UDP, UNIX stream, reactor).
**netlib 2.0** — module-first библиотека сетевого I/O на C++26. Каноническая
реализация находится только в `modules/cxx/**/*.cppm`; основной вход для
потребителя — `import netlib;` и CMake-target `netlib::modules`.

- Namespace: `rrmode::netlib::{execution,net}`
- Зависимости: только стандартная библиотека + платформенный код в `::detail`
- Платформы: Linux (epoll), macOS (kqueue), Windows (WSAPoll + unit-тесты)
- Namespace: `rrmode::netlib`
- Core: собственные `span`, `result`, контейнеры и `-nostdinc++` compile gate
- I/O: Linux `io_uring`, Windows RIO, macOS/POSIX `poll`
- Tests/examples могут использовать C++ standard library и Catch2

## Быстрый старт
## Требования v2

```bash
cmake -B build -DCMAKE_BUILD_TYPE=Debug -DNETLIB_BUILD_TESTS=ON -DNETLIB_BUILD_EXAMPLES=ON
cmake --build build -j
ctest --test-dir build
```
| Компонент | Минимум |
|-----------|---------|
| CMake | 3.30 |
| Generator | Ninja |
| Язык | C++26 modules |
| Toolchain | Clang 18+, GCC 15+ или MSVC 19.38+ |

`NETLIB_BUILD_MODULES=ON` включён по умолчанию и обязателен для v2.
`NETLIB_MODULES_CXX_STANDARD` зафиксирован в `26`.

Терминал 1:
## Быстрый старт

```bash
./build/examples/tcp_echo/tcp_echo_server 9001
cmake -S . -B build-cxx26 -G Ninja \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_BUILD_TYPE=Debug \
-DNETLIB_BUILD_MODULES=ON \
-DNETLIB_MODULES_CXX_STANDARD=26 \
-DNETLIB_BUILD_TESTS=ON \
-DNETLIB_BUILD_EXAMPLES=ON
cmake --build build-cxx26 -j
ctest --test-dir build-cxx26 --output-on-failure
```

Терминал 2:
Локальный полный pipeline:

```bash
./build/examples/tcp_echo/tcp_echo_client 9001 hello
# ответ: hello
./scripts/ci.sh # Clang 18+ по умолчанию
./scripts/ci.sh gcc # требуется GCC 15+
```

## Документация

Полный набор — **[docs/README.md](docs/README.md)** (Markdown + PlantUML, без Doxygen).
Он выполняет сборку, module smoke и `-nostdinc++` gate, runtime smoke,
`ctest`, установку и сборку внешнего потребителя установленного модуля.

| Раздел | Файлы |
|--------|--------|
| Старт | [GETTING_STARTED](docs/GETTING_STARTED.md), [INSTALL](docs/INSTALL.md), [API_LAYERS](docs/API_LAYERS.md) |
| Архитектура | [ARCHITECTURE](docs/ARCHITECTURE.md), [EXECUTION](docs/EXECUTION.md), [NET_REACTOR](docs/NET_REACTOR.md) |
| Протоколы | [NET_TCP](docs/NET_TCP.md), [NET_UDP](docs/NET_UDP.md), [NET_UNIX](docs/NET_UNIX.md) |
| Coroutines | [COROUTINES](docs/COROUTINES.md), [CANCELLATION_AND_TIMEOUT](docs/CANCELLATION_AND_TIMEOUT.md), [LIFECYCLE](docs/LIFECYCLE.md) |
| Справочник | [HEADERS_REFERENCE](docs/HEADERS_REFERENCE.md) |
| Сборка / платформы | [CMAKE_OPTIONS](docs/CMAKE_OPTIONS.md), [PLATFORMS](docs/PLATFORMS.md) |
| Ошибки | [ERRORS](docs/ERRORS.md) |
| Примеры | [EXAMPLES](docs/EXAMPLES.md) |
| Разработка / релиз | [DEVELOPMENT](docs/DEVELOPMENT.md), [V1_RELEASE](docs/V1_RELEASE.md), [CHANGELOG](../CHANGELOG.md) |
| Эксплуатация | [TESTING](docs/TESTING.md), [BENCHMARKS](docs/BENCHMARKS.md), [ROADMAP](docs/ROADMAP.md) |
| Диаграммы | [docs/diagrams/](docs/diagrams/) |

## Подключение в CMake
## Подключение

```cmake
add_subdirectory(path/to/netlib) # или find_package(netlib)
target_link_libraries(app PRIVATE netlib::netlib)
```
find_package(netlib 2 CONFIG REQUIRED)

Три уровня API (см. [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)):
add_executable(app main.cpp)
target_link_libraries(app PRIVATE netlib::modules)
target_compile_features(app PRIVATE cxx_std_26)
set_target_properties(app PROPERTIES CXX_SCAN_FOR_MODULES ON)
```

```cpp
#include <netlib/simple.hpp> // простой sync + write_stream
#include <netlib/medium.hpp> // socket_options, io_context
#include <netlib/netlib.hpp> // full: event_loop, колбэки
import netlib;

int main() {
rrmode::netlib::inplace_vector<int, 4> values;
return values.push_back(26) ? 0 : 1;
}
```

Coroutines (если включены при сборке):
Заголовки в `modules/netlib/**`, а также `include/netlib/netlib.hpp` и
`include/netlib/io/coro.hpp`, оставлены только как compatibility import
facades. Реализации v2 в них нет; для нового кода используйте прямой `import`.

```cpp
#include <netlib/execution/coroutine.hpp>
#include <netlib/net/coro.hpp>
// co_await connect_async(sock, loop, ep);
```
Подробнее:

- [C++26 modules: иерархия, сборка и ограничения](docs/MODULES.md)
- [Быстрый старт](docs/GETTING_STARTED.md)
- [Установка и `find_package`](docs/INSTALL.md)
- [Архитектура](docs/ARCHITECTURE.md)
- [Полное оглавление](docs/README.md)
- [Changelog](CHANGELOG.md)

## Legacy v1

API `execution`/`net`, `simple.hpp`/`medium.hpp`, callback reactor и target
`netlib::netlib` относятся к legacy v1. Они сохранены для совместимости, но не
являются рекомендуемой точкой входа v2. Их документы явно помечены `Legacy v1`.

## Лицензия

Expand Down
74 changes: 55 additions & 19 deletions benchmarks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,62 @@ if(NETLIB_BENCHMARK_BUILD_SCHEDULE)
target_include_directories(schedule_bench PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
endif()

if(NOT NETLIB_BENCHMARK_BUILD_NETWORK)
return()
endif()

if(WIN32 AND NETLIB_BENCHMARKS_REQUIRE_POSIX)
message(STATUS "netlib: tcp/udp benchmarks пропущены (NETLIB_BENCHMARKS_REQUIRE_POSIX)")
return()
endif()
if(NETLIB_BENCHMARK_BUILD_NETWORK)
if(WIN32 AND NETLIB_BENCHMARKS_REQUIRE_POSIX)
message(STATUS "netlib: tcp/udp benchmarks пропущены (NETLIB_BENCHMARKS_REQUIRE_POSIX)")
elseif(NETLIB_BENCHMARKS_REQUIRE_COROUTINES AND NOT NETLIB_ENABLE_COROUTINES)
message(STATUS "netlib: tcp/udp benchmarks требуют NETLIB_ENABLE_COROUTINES")
else()
find_package(Threads REQUIRED)

if(NETLIB_BENCHMARKS_REQUIRE_COROUTINES AND NOT NETLIB_ENABLE_COROUTINES)
message(STATUS "netlib: tcp/udp benchmarks требуют NETLIB_ENABLE_COROUTINES")
return()
add_executable(tcp_echo_bench tcp_echo_bench.cpp)
add_executable(udp_ping_bench udp_ping_bench.cpp)
foreach(target tcp_echo_bench udp_ping_bench)
target_link_libraries(${target} PRIVATE netlib::netlib Threads::Threads)
target_compile_features(${target} PRIVATE cxx_std_${NETLIB_CXX_STANDARD})
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
endforeach()
endif()
endif()

find_package(Threads REQUIRED)
if(NETLIB_BENCHMARK_BUILD_V2 AND NETLIB_ENABLE_COROUTINES)
set(_netlib_v2_bench_backend OFF)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND TARGET netlib::platform_uring)
set(_netlib_v2_bench_backend ON)
elseif(WIN32 AND TARGET netlib::platform_rio)
set(_netlib_v2_bench_backend ON)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND TARGET netlib::platform_posix)
set(_netlib_v2_bench_backend ON)
endif()

add_executable(tcp_echo_bench tcp_echo_bench.cpp)
add_executable(udp_ping_bench udp_ping_bench.cpp)
foreach(target tcp_echo_bench udp_ping_bench)
target_link_libraries(${target} PRIVATE netlib::netlib Threads::Threads)
target_compile_features(${target} PRIVATE cxx_std_${NETLIB_CXX_STANDARD})
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
endforeach()
if(_netlib_v2_bench_backend)
find_package(Threads REQUIRED)
add_executable(v2_echo_bench v2_echo_bench.cpp)
add_executable(v2_udp_bench v2_udp_bench.cpp)
foreach(target v2_echo_bench v2_udp_bench)
target_link_libraries(${target} PRIVATE netlib::core Threads::Threads)
target_compile_features(${target} PRIVATE cxx_std_${NETLIB_CXX_STANDARD})
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
endforeach()
if(TARGET netlib::platform_uring)
foreach(target v2_echo_bench v2_udp_bench)
target_link_libraries(${target} PRIVATE netlib::platform_uring)
target_compile_definitions(${target} PRIVATE NETLIB_PLATFORM_LINUX=1 NETLIB_ENABLE_COROUTINES=1)
endforeach()
endif()
if(TARGET netlib::platform_rio)
foreach(target v2_echo_bench v2_udp_bench)
target_link_libraries(${target} PRIVATE netlib::platform_rio)
target_compile_definitions(${target} PRIVATE NETLIB_PLATFORM_WINDOWS=1 NETLIB_ENABLE_COROUTINES=1)
endforeach()
endif()
if(TARGET netlib::platform_posix)
foreach(target v2_echo_bench v2_udp_bench)
target_link_libraries(${target} PRIVATE netlib::platform_posix)
target_compile_definitions(${target} PRIVATE NETLIB_PLATFORM_POSIX=1 NETLIB_ENABLE_COROUTINES=1)
endforeach()
endif()
else()
message(STATUS "netlib: v2_echo_bench пропущен (нужен Linux io_uring, Windows RIO или macOS poll_engine)")
endif()
endif()
Loading