- CMakeLists в корне: ветвление ESP_PLATFORM (idf_component_register, lwip/esp_timer/esp_hw_support/pthread) / POSIX (статическая библиотека fgl-aircon, C++20, -fno-exceptions -fno-rtti, -Werror). - src/ayla/platform: сокеты/потоки/CSPRNG/время; posix (getrandom, poll, pthread_join) и esp-idf (lwip_select, esp_fill_random, pthread-слой IDF); tcp_shutdown/tcp_local_port/thread_join для управляемой остановки. - src/ayla: log (sink, без printf); мини-httpd/1.1 (keep-alive, Content-Length, лимиты заголовков/тела, ephemeral-порт, жизненный цикл с гарантией завершения потока: shutdown(active)→join→close). - tests/ayla: platform (join, loopback+shutdown) и httpd (404, keep-alive, обработчик/парсинг, oversize-400, stop при живом соединении, стрим заголовков). doctest через FetchContent. - scripts/ci.sh: сборка+ctest. ESP-IDF v5.5.5 esp32: смоук-сборка с ядром как компонентом — Project build complete. Ревью под-агентом: 3 круга, все блокеры (жизненный цикл httpd) закрыты, APPROVED.
25 lines
943 B
CMake
25 lines
943 B
CMake
# Тесты ядра. Структура зеркалит src: tests/ayla — протоколная часть,
|
||
# tests/aircon — конверсии/шаблоны (появятся в M3).
|
||
#
|
||
# Тесты собираются с исключениями (фреймворк), сама библиотека — без.
|
||
|
||
include(FetchContent)
|
||
FetchContent_Declare(
|
||
doctest
|
||
GIT_REPOSITORY https://github.com/doctest/doctest.git
|
||
GIT_TAG v2.4.12
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
FetchContent_MakeAvailable(doctest)
|
||
|
||
function(fgl_add_test name)
|
||
add_executable(test_${name} ${ARGN})
|
||
target_compile_features(test_${name} PRIVATE cxx_std_20)
|
||
target_link_libraries(test_${name} PRIVATE fgl-aircon doctest_with_main)
|
||
target_include_directories(test_${name} PRIVATE "${CMAKE_SOURCE_DIR}/src")
|
||
add_test(NAME ${name} COMMAND test_${name})
|
||
endfunction()
|
||
|
||
fgl_add_test(ayla_platform ayla/test_platform.cpp)
|
||
fgl_add_test(ayla_httpd ayla/test_httpd.cpp)
|