Files
utun2/lib/ble/CMakeLists.txt
T
evgeny ba1c4cf160 Add cross-platform BLE transport and Bluetooth settings
Integrate shared C transport with desktop and Android frontends, add radio probes and detailed Windows diagnostics, and fix GUI build dependencies and early configuration startup errors.
2026-10-29 10:51:19 +01:00

61 lines
3.2 KiB
CMake

cmake_minimum_required(VERSION 3.16)
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
project(vibechat_ble LANGUAGES C CXX)
enable_testing()
set(CMAKE_C_STANDARD 99)
set(BLE_LIB "${CMAKE_CURRENT_SOURCE_DIR}/..")
add_library(uasync STATIC ${BLE_LIB}/u_async.c ${BLE_LIB}/ll_queue.c ${BLE_LIB}/timeout_heap.c
${BLE_LIB}/memory_pool.c ${BLE_LIB}/mem.c ${BLE_LIB}/debug_config.c
${BLE_LIB}/platform_compat.c ${BLE_LIB}/socket_compat.c)
target_include_directories(uasync PUBLIC "${BLE_LIB}")
if(WIN32)
target_link_libraries(uasync PUBLIC ws2_32 iphlpapi)
else()
target_link_libraries(uasync PUBLIC pthread m)
endif()
endif()
add_library(vibechat_ble_core OBJECT ble_transport.c ble_identity.c)
target_link_libraries(vibechat_ble_core PUBLIC uasync)
target_include_directories(vibechat_ble_core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
set_target_properties(vibechat_ble_core PROPERTIES AUTOMOC OFF)
if(WIN32)
add_library(vibechat_ble STATIC ble_winrt.cpp)
target_compile_features(vibechat_ble PRIVATE cxx_std_20)
find_path(BLE_WINRT_INCLUDE winrt/Windows.Devices.Bluetooth.h REQUIRED)
target_include_directories(vibechat_ble PRIVATE "${BLE_WINRT_INCLUDE}")
target_link_libraries(vibechat_ble PRIVATE windowsapp)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_package(PkgConfig REQUIRED)
pkg_check_modules(BLE_SYSTEMD REQUIRED IMPORTED_TARGET libsystemd)
add_library(vibechat_ble STATIC ble_bluez.c)
target_link_libraries(vibechat_ble PRIVATE PkgConfig::BLE_SYSTEMD)
else()
message(FATAL_ERROR "BLE backend supports Linux and Windows")
endif()
target_link_libraries(vibechat_ble PUBLIC vibechat_ble_core)
set_target_properties(vibechat_ble PROPERTIES AUTOMOC OFF)
add_executable(test_ble_transport tests/test_ble_transport.c)
target_link_libraries(test_ble_transport PRIVATE vibechat_ble_core)
set_target_properties(test_ble_transport PROPERTIES AUTOMOC OFF)
add_test(NAME test_ble_transport COMMAND test_ble_transport)
set_tests_properties(test_ble_transport PROPERTIES TIMEOUT 30)
add_executable(ble_probe tests/ble_probe.c)
target_link_libraries(ble_probe PRIVATE vibechat_ble)
set_target_properties(ble_probe PROPERTIES AUTOMOC OFF)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_program(BLE_DBUS_RUN_SESSION dbus-run-session REQUIRED)
add_executable(test_ble_bluez tests/test_ble_bluez.c)
target_link_libraries(test_ble_bluez PRIVATE vibechat_ble PkgConfig::BLE_SYSTEMD)
set_target_properties(test_ble_bluez PROPERTIES AUTOMOC OFF)
add_test(NAME test_ble_bluez COMMAND "${BLE_DBUS_RUN_SESSION}" -- $<TARGET_FILE:test_ble_bluez>)
set_tests_properties(test_ble_bluez PROPERTIES TIMEOUT 30)
endif()
add_executable(ble_peer_probe tests/ble_peer_probe.c)
target_link_libraries(ble_peer_probe PRIVATE vibechat_ble)
set_target_properties(ble_peer_probe PROPERTIES AUTOMOC OFF)
add_executable(test_ble_identity tests/test_ble_identity.c ble_identity.c)
target_link_libraries(test_ble_identity PRIVATE uasync)
target_include_directories(test_ble_identity PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
set_target_properties(test_ble_identity PROPERTIES AUTOMOC OFF)
add_test(NAME test_ble_identity COMMAND test_ble_identity)