cmake_minimum_required(VERSION 3.13) project(protocan_transport C) set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED ON) # Ядро библиотеки: платформенных зависимостей нет, собирается под что угодно. set(PCAN_CORE_SOURCES src/pcan_abi.c src/pcan_crc.c src/pcan_frame.c src/pcan_id.c src/pcan_link.c src/pcan_ring.c src/pcan_gas.c ) add_library(protocan_transport STATIC ${PCAN_CORE_SOURCES}) target_include_directories(protocan_transport PUBLIC include) option(PCAN_BUILD_SHARED "Build stable host ABI shared library" ON) if(PCAN_BUILD_SHARED) add_library(setcore SHARED ${PCAN_CORE_SOURCES}) target_include_directories(setcore PUBLIC include) target_compile_definitions(setcore PRIVATE PCAN_ABI_BUILD_DLL) set_target_properties(setcore PROPERTIES C_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN YES OUTPUT_NAME setcore ) endif() if(MSVC) target_compile_options(protocan_transport PRIVATE /W4) else() target_compile_options(protocan_transport PRIVATE -Wall -Wextra -Wpedantic) endif() if(TARGET setcore) if(MSVC) target_compile_options(setcore PRIVATE /W4) else() target_compile_options(setcore PRIVATE -Wall -Wextra -Wpedantic) endif() endif() # Порт ports/stm32f4 сюда не входит: ему нужен CMSIS-заголовок stm32f4xx.h, # он подключается напрямую в проект прошивки. option(PCAN_BUILD_TESTS "Собирать тесты" ON) if(PCAN_BUILD_TESTS) enable_testing() add_executable(test_transport tests/test_transport.c) target_link_libraries(test_transport PRIVATE protocan_transport) add_test(NAME transport COMMAND test_transport) add_executable(test_abi tests/test_abi.c) target_link_libraries(test_abi PRIVATE protocan_transport) add_test(NAME abi COMMAND test_abi) endif()