cmake_minimum_required(VERSION 3.13) project(setprotocol C) set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED ON) # SET protocol v2: управление, телеметрия, CAN segmentation и firmware flow. set(SETPROTOCOL_V2_SOURCES src/set_protocol.c src/set_can.c src/set_firmware.c src/set_telemetry.c ) # Совместимые ProtoCAN/SETGUI v1 форматы переходного периода. set(SETPROTOCOL_LEGACY_SOURCES src/gui_catalog.c src/gui_frame.c src/pcan_abi.c src/pcan_crc.c src/pcan_frame.c src/pcan_gas.c src/pcan_id.c src/pcan_link.c src/pcan_ring.c ) set(SETPROTOCOL_SOURCES ${SETPROTOCOL_V2_SOURCES} ${SETPROTOCOL_LEGACY_SOURCES} ) add_library(setprotocol_static STATIC ${SETPROTOCOL_SOURCES}) target_include_directories(setprotocol_static PUBLIC include) # Совместимое имя цели для проектов, уже использовавших SET protocol v2. add_library(set_protocol ALIAS setprotocol_static) option(SETP_BUILD_SHARED "Build stable host ABI shared library" ON) if(SETP_BUILD_SHARED) add_library(setprotocol SHARED ${SETPROTOCOL_SOURCES}) target_include_directories(setprotocol PUBLIC include) target_compile_definitions(setprotocol PRIVATE PCAN_ABI_BUILD_DLL) set_target_properties(setprotocol PROPERTIES C_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN YES OUTPUT_NAME setprotocol ) endif() function(setprotocol_warnings target) if(MSVC) target_compile_options(${target} PRIVATE /W4) else() target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic) endif() endfunction() setprotocol_warnings(setprotocol_static) if(TARGET setprotocol) setprotocol_warnings(setprotocol) endif() # JNI/CMSIS-порты подключаются целевым проектом и в host CMake не входят. option(SETP_BUILD_TESTS "Build host tests" ON) if(SETP_BUILD_TESTS) enable_testing() add_executable(test_set_protocol tests/test_set_protocol.c) target_link_libraries(test_set_protocol PRIVATE setprotocol_static) add_test(NAME set_protocol_v2 COMMAND test_set_protocol) add_executable(test_transport tests/test_transport.c) target_link_libraries(test_transport PRIVATE setprotocol_static) add_test(NAME legacy_transport COMMAND test_transport) add_executable(test_gui tests/test_gui.c) target_link_libraries(test_gui PRIVATE setprotocol_static) add_test(NAME legacy_gui COMMAND test_gui) add_executable(test_abi tests/test_abi.c) target_link_libraries(test_abi PRIVATE setprotocol_static) add_test(NAME stable_abi COMMAND test_abi) endif()