cmake_minimum_required(VERSION 3.16) if(ESP_PLATFORM) # --------------------------------------------------------------------------- # Сборка как компонента ESP-IDF (корень репозитория = компонент; имя # компонента = имя каталога, из которого он подключён). # ВАЖНО: cmake_minimum_required должен остаться до этой ветки, project() # для IDF-сборки не вызывается. # --------------------------------------------------------------------------- idf_component_register( SRCS "src/ayla/crypto.cpp" "src/ayla/envelope.cpp" "src/ayla/httpc.cpp" "src/ayla/httpd.cpp" "src/ayla/log.cpp" "src/ayla/session.cpp" "src/ayla/platform/esp-idf/platform.cpp" INCLUDE_DIRS "include" PRIV_INCLUDE_DIRS "." "src" PRIV_REQUIRES lwip esp_timer esp_hw_support pthread mbedtls ) target_compile_options(${COMPONENT_LIB} PRIVATE -Wall -Wextra -Werror -fno-exceptions -fno-rtti ) target_compile_features(${COMPONENT_LIB} PUBLIC cxx_std_20) else() # --------------------------------------------------------------------------- # Обычная (POSIX) сборка: статическая библиотека + тесты. # --------------------------------------------------------------------------- project(fgl-aircon VERSION 0.1.0 LANGUAGES CXX) option(FGL_BUILD_TESTS "Build tests" ON) option(FGL_BUNDLED_MBEDTLS "Fetch and build Mbed TLS instead of system" OFF) # ---- mbedtls ---- if(NOT FGL_BUNDLED_MBEDTLS) find_path(MBEDTLS_INCLUDE_DIR mbedtls/aes.h HINTS /usr/include/mbedtls3 /usr/include ) find_library(MBEDTLS_CRYPTO_LIB NAMES mbedcrypto-3 mbedcrypto ) if(NOT MBEDTLS_INCLUDE_DIR OR NOT MBEDTLS_CRYPTO_LIB) message(STATUS "System Mbed TLS not found - falling back to bundled") set(FGL_BUNDLED_MBEDTLS ON) endif() endif() if(FGL_BUNDLED_MBEDTLS) include(FetchContent) FetchContent_Declare(mbedtls GIT_REPOSITORY https://github.com/Mbed-TLS/mbedtls.git GIT_TAG v3.6.2 GIT_SHALLOW TRUE ) set(ENABLE_PROGRAMS OFF CACHE BOOL "" FORCE) set(ENABLE_TESTING OFF CACHE BOOL "" FORCE) set(USE_SHARED_MBEDTLS_LIBRARY OFF CACHE BOOL "" FORCE) set(USE_STATIC_MBEDTLS_LIBRARY ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(mbedtls) set(FGL_MBEDTLS_TARGET mbedcrypto STATIC) set(FGL_MBEDTLS_INCLUDE_DIR "") else() set(FGL_MBEDTLS_TARGET "${MBEDTLS_CRYPTO_LIB}") set(FGL_MBEDTLS_INCLUDE_DIR "${MBEDTLS_INCLUDE_DIR}") endif() add_library(fgl-aircon STATIC src/ayla/crypto.cpp src/ayla/envelope.cpp src/ayla/httpc.cpp src/ayla/httpd.cpp src/ayla/log.cpp src/ayla/session.cpp src/ayla/platform/posix/platform.cpp ) target_include_directories(fgl-aircon PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_SOURCE_DIR}" "${FGL_MBEDTLS_INCLUDE_DIR}" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src" ) target_link_libraries(fgl-aircon PUBLIC ${FGL_MBEDTLS_TARGET}) target_compile_features(fgl-aircon PUBLIC cxx_std_20) target_compile_options(fgl-aircon PRIVATE -Wall -Wextra -Werror -fno-exceptions -fno-rtti ) if(FGL_BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() endif()