ha(H1): pyfglair — cffi-ядро (очередь событий), wheel, CLI discover/monitor
- CMake: shared-таргет fgl-aircon-shared (FGL_BUILD_SHARED, PIC, SOVERSION) - C-API: fgl_prop_raw_range + кольцевые очереди событий/логов (fgl_session_poll/wait_events, fgl_log_poll/wait_events): прямые колбэки из потоков ядра со стеком 8 КБ небезопасны для интерпретатора Python - pyfglair: _corebuild (cmake->wheel), _cffi (ABI), Session (reader-поток -> loop.call_soon_threadsafe), templates (интроспекция C-таблиц), provision (aiohttp), CLI discover/monitor + esphome-secrets - setup.py/pyproject: платформенный wheel py3-none-linux_x86_64 с .so - tests/pyfglair: templates, provision (мок-облако), session + CLI против mock_ac.py; scripts/py-ci.sh; ci.sh запускает python-часть
This commit is contained in:
+37
-15
@@ -44,6 +44,7 @@ else()
|
||||
|
||||
option(FGL_BUILD_TESTS "Build tests" ON)
|
||||
option(FGL_BUILD_EXAMPLES "Build examples (fglctl)" ON)
|
||||
option(FGL_BUILD_SHARED "Build shared library (pyfglair/cffi)" ON)
|
||||
option(FGL_BUNDLED_MBEDTLS "Fetch and build Mbed TLS instead of system" OFF)
|
||||
|
||||
# ---- mbedtls ----
|
||||
@@ -73,12 +74,14 @@ else()
|
||||
FetchContent_MakeAvailable(mbedtls)
|
||||
set(FGL_MBEDTLS_TARGET mbedcrypto STATIC)
|
||||
set(FGL_MBEDTLS_INCLUDE_DIR "")
|
||||
# Статический mbedcrypto нужен и для shared-библиотеки (pyfglair).
|
||||
set_target_properties(mbedcrypto PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
else()
|
||||
set(FGL_MBEDTLS_TARGET "${MBEDTLS_CRYPTO_LIB}")
|
||||
set(FGL_MBEDTLS_INCLUDE_DIR "${MBEDTLS_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
add_library(fgl-aircon STATIC
|
||||
set(FGL_SOURCES
|
||||
src/ayla/crypto.cpp
|
||||
src/ayla/envelope.cpp
|
||||
src/ayla/httpc.cpp
|
||||
@@ -90,20 +93,39 @@ else()
|
||||
src/aircon/tables.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
|
||||
)
|
||||
|
||||
function(fgl_configure_target tgt)
|
||||
target_include_directories(${tgt}
|
||||
PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${FGL_MBEDTLS_INCLUDE_DIR}"
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src"
|
||||
)
|
||||
target_link_libraries(${tgt} PUBLIC ${FGL_MBEDTLS_TARGET})
|
||||
target_compile_features(${tgt} PUBLIC cxx_std_20)
|
||||
target_compile_options(${tgt} PRIVATE
|
||||
-Wall -Wextra -Werror
|
||||
-fno-exceptions -fno-rtti
|
||||
)
|
||||
endfunction()
|
||||
|
||||
add_library(fgl-aircon STATIC ${FGL_SOURCES})
|
||||
fgl_configure_target(fgl-aircon)
|
||||
|
||||
# Shared-библиотека для cffi/pyfglair (Home Assistant). Имя то же
|
||||
# (libfgl-aircon.so), чтобы dlopen по имени был предсказуем.
|
||||
if(FGL_BUILD_SHARED)
|
||||
add_library(fgl-aircon-shared SHARED ${FGL_SOURCES})
|
||||
fgl_configure_target(fgl-aircon-shared)
|
||||
set_target_properties(fgl-aircon-shared PROPERTIES
|
||||
OUTPUT_NAME fgl-aircon
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_VERSION_MAJOR}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(FGL_BUILD_TESTS)
|
||||
enable_testing()
|
||||
|
||||
Reference in New Issue
Block a user