202 lines
11 KiB
CMake
202 lines
11 KiB
CMake
# Сборка библиотеки setprotocol_static, set_protocol, setprotocol. Состав исходников и
|
|
# публичные include-пути задают подключение к проекту потребителя. Файл также собирает и
|
|
# регистрирует хостовые проверки; запускать их следует через CTest из каталога сборки.
|
|
|
|
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/firmware_image.c
|
|
src/altera_logic.c
|
|
src/altera_stream.c
|
|
src/set_protocol.c
|
|
src/set_can.c
|
|
src/set_firmware.c
|
|
src/set_boot.c
|
|
src/set_telemetry.c
|
|
src/set_plot.c
|
|
src/set_trends.c
|
|
src/set_gas_watch.c # Собирает единый кодек GAS_WATCH2 и MCU-захват выбранных GAS-слов для static/shared целей.
|
|
src/set_spectrum.c
|
|
src/set_signal.c
|
|
src/set_wavegen.c
|
|
)
|
|
|
|
# Совместимые ProtoCAN/SETGUI v1 форматы переходного периода.
|
|
set(SETPROTOCOL_LEGACY_SOURCES
|
|
src/balsam_can.c
|
|
src/set_crc.c
|
|
src/periph28335.c
|
|
src/tms2812.c
|
|
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_gas_slot.c # Собирает GAS SLOT типа 0x4 с Word0-маской и тремя значениями независимо от регистрового GAS 0x3.
|
|
src/pcan_id.c
|
|
src/pcan_link.c
|
|
src/pcan_modbus_server.c
|
|
src/pcan_ring.c
|
|
)
|
|
|
|
set(SETPROTOCOL_SOURCES
|
|
src/set_modbus_gateway.c # Единый кодек USB RTU, Ethernet TCP и таблицы маршрутов используется платой и Qt-панелью.
|
|
src/deif_xdi.c # Общее C99-ядро DEIF для всех платформ.
|
|
src/set_invertor_gas.c # Подключает две проекции одной карты STM Invertor: GAS 0x3 и масочный GAS SLOT 0x4.
|
|
src/set_deif_gauge.c
|
|
src/set_regmap.c
|
|
src/set_emu_ump.c
|
|
src/set_emu_tms.c
|
|
src/set_emu_igbt.c
|
|
src/set_igbt_realtime.c # Общий аппаратный IGBT v4 использует нс, сохраняя прежнюю модель v3 и её ABI.
|
|
src/set_emu_server.c
|
|
${SETPROTOCOL_V2_SOURCES}
|
|
${SETPROTOCOL_LEGACY_SOURCES}
|
|
)
|
|
|
|
add_library(setprotocol_static STATIC ${SETPROTOCOL_SOURCES})
|
|
target_include_directories(setprotocol_static PUBLIC include)
|
|
if(NOT MSVC)
|
|
target_link_libraries(setprotocol_static PUBLIC m)
|
|
endif()
|
|
|
|
# Совместимое имя цели для проектов, уже использовавших 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)
|
|
if(NOT MSVC)
|
|
target_link_libraries(setprotocol PRIVATE m)
|
|
endif()
|
|
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)
|
|
add_executable(test_modbus_gateway tests/test_modbus_gateway.c) # Эталонные ADU защищают маршрутизацию, CRC и настройки от расхождений между портами.
|
|
target_link_libraries(test_modbus_gateway PRIVATE setprotocol_static) # Проверяет тот же исходник, который выполняется на Zynq.
|
|
add_test(NAME modbus_gateway COMMAND test_modbus_gateway) # Делает проверку шлюза частью стандартного CTest.
|
|
enable_testing()
|
|
add_executable(test_deif_xdi tests/test_deif_xdi.c) # Прямые проверки C-контракта DEIF.
|
|
target_link_libraries(test_deif_xdi PRIVATE setprotocol_static) # Используется единственное общее ядро.
|
|
add_test(NAME deif_xdi COMMAND test_deif_xdi "${CMAKE_CURRENT_SOURCE_DIR}/tests/fixtures/deif-xdi-v1.tsv") # Векторы общие с JNI и Python.
|
|
add_executable(test_invertor_gas tests/test_invertor_gas.c) # Проверяет два формата, общие значения, маски, границы и транзакционные callbacks.
|
|
target_link_libraries(test_invertor_gas PRIVATE setprotocol_static) # Проверяем ту же реализацию, что подключается к прошивке.
|
|
add_test(NAME invertor_gas COMMAND test_invertor_gas) # Новый контракт выполняется стандартным CTest вместе с остальными протоколами.
|
|
add_executable(test_gas_register tests/test_gas_register.c) # Проверяет запись одной уставки без соседей, границы 0…65535 и изоляцию типа 0x3.
|
|
target_link_libraries(test_gas_register PRIVATE setprotocol_static) # Запускает проверки на том же ядре, которое используют прошивки и host-клиенты.
|
|
add_test(NAME protocan_gas_register COMMAND test_gas_register) # Отдельный тест защищает восстановленный регистровый контракт.
|
|
add_executable(test_gas_slot tests/test_gas_slot.c) # Проверяет MsgType=0x4, маску Word0, сохранение соседей и границы PERIPH.
|
|
target_link_libraries(test_gas_slot PRIVATE setprotocol_static) # Использует ту же библиотеку, что MCU и клиенты.
|
|
add_test(NAME protocan_gas_slot COMMAND test_gas_slot) # Делает проверку нового формата частью штатного CTest.
|
|
add_executable(test_emulator_services tests/test_emulator_services.c ports/example-emulator/service.c)
|
|
target_link_libraries(test_emulator_services PRIVATE setprotocol_static)
|
|
add_test(NAME emulator_services COMMAND test_emulator_services)
|
|
add_executable(test_boot tests/test_boot.c)
|
|
target_link_libraries(test_boot PRIVATE setprotocol_static)
|
|
add_test(NAME shared_boot COMMAND test_boot)
|
|
if(MSVC)
|
|
target_compile_options(test_emulator_services PRIVATE /UNDEBUG)
|
|
target_compile_options(test_boot PRIVATE /UNDEBUG)
|
|
else()
|
|
target_compile_options(test_emulator_services PRIVATE -UNDEBUG)
|
|
target_compile_options(test_boot PRIVATE -UNDEBUG)
|
|
endif()
|
|
add_executable(test_signal_wave tests/test_signal_wave.c)
|
|
target_link_libraries(test_signal_wave PRIVATE setprotocol_static)
|
|
add_test(NAME signal_wave COMMAND test_signal_wave)
|
|
add_executable(test_firmware_image tests/test_firmware_image.c)
|
|
target_link_libraries(test_firmware_image PRIVATE setprotocol_static)
|
|
add_test(NAME firmware_image COMMAND test_firmware_image)
|
|
add_executable(test_altera_logic tests/test_altera_logic.c)
|
|
target_link_libraries(test_altera_logic PRIVATE setprotocol_static)
|
|
add_test(NAME altera_logic COMMAND test_altera_logic)
|
|
add_executable(test_altera_stream tests/test_altera_stream.c)
|
|
target_link_libraries(test_altera_stream PRIVATE setprotocol_static)
|
|
add_test(NAME altera_stream COMMAND test_altera_stream)
|
|
|
|
add_executable(test_plot tests/test_plot.c)
|
|
target_link_libraries(test_plot PRIVATE setprotocol_static)
|
|
add_test(NAME shared_plot COMMAND test_plot)
|
|
|
|
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_modbus_server tests/test_modbus_server.c)
|
|
target_link_libraries(test_modbus_server PRIVATE setprotocol_static)
|
|
add_test(NAME protocan_modbus_server COMMAND test_modbus_server)
|
|
|
|
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)
|
|
add_executable(test_balsam_can tests/test_balsam_can.c)
|
|
target_link_libraries(test_balsam_can PRIVATE setprotocol_static)
|
|
add_test(NAME legacy_balsam_can COMMAND test_balsam_can)
|
|
add_executable(test_periph28335 tests/test_periph28335.c)
|
|
target_link_libraries(test_periph28335 PRIVATE setprotocol_static)
|
|
add_test(NAME shared_periph28335 COMMAND test_periph28335)
|
|
add_executable(test_periph28335_eeprom tests/test_periph28335_eeprom.c)
|
|
target_link_libraries(test_periph28335_eeprom PRIVATE setprotocol_static)
|
|
if(MSVC)
|
|
target_compile_options(test_periph28335_eeprom PRIVATE /UNDEBUG)
|
|
else()
|
|
target_compile_options(test_periph28335_eeprom PRIVATE -UNDEBUG)
|
|
endif()
|
|
add_test(NAME periph28335_eeprom COMMAND test_periph28335_eeprom)
|
|
add_executable(test_tms2812 tests/test_tms2812.c)
|
|
target_link_libraries(test_tms2812 PRIVATE setprotocol_static)
|
|
add_test(NAME shared_tms2812 COMMAND test_tms2812)
|
|
add_executable(test_tms2812_boot
|
|
tests/test_tms2812_boot.c
|
|
ports/tms320f2812/setp_tms2812_boot.c
|
|
)
|
|
target_include_directories(test_tms2812_boot PRIVATE ports/tms320f2812)
|
|
target_link_libraries(test_tms2812_boot PRIVATE setprotocol_static)
|
|
add_test(NAME setp_tms2812_boot COMMAND test_tms2812_boot)
|
|
add_executable(test_trends tests/test_trends.c)
|
|
target_link_libraries(test_trends PRIVATE setprotocol_static)
|
|
add_test(NAME shared_trends COMMAND test_trends)
|
|
add_executable(test_gas_watch tests/test_gas_watch.c) # Собирает транзакционные проверки конфигурации и эталонных байтов GAS_WATCH2.
|
|
target_link_libraries(test_gas_watch PRIVATE setprotocol_static) # Проверяет настоящее общее ядро, а не копию алгоритма в тесте.
|
|
add_test(NAME gas_watch_v2 COMMAND test_gas_watch) # Регистрирует новый контракт рядом с неизменёнными legacy-проверками.
|
|
add_executable(test_spectrum tests/test_spectrum.c)
|
|
target_link_libraries(test_spectrum PRIVATE setprotocol_static)
|
|
add_test(NAME shared_spectrum COMMAND test_spectrum)
|
|
endif()
|