soem-node
Version:
Bindings Node-API pour SOEM (Simple Open EtherCAT Master)
192 lines (163 loc) • 6.31 kB
Plain Text
# This software is dual-licensed under GPLv3 and a commercial
# license. See the file LICENSE.md distributed with this software for
# full license information.
cmake_minimum_required(VERSION 3.28)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
project(SOEM VERSION 2.0.0 LANGUAGES C)
# Debug enable
option(EC_DEBUG "Enable debug output")
# Configurable sizes
set(EC_BUFSIZE EC_MAXECATFRAME CACHE STRING "standard frame buffer size in bytes")
set(EC_MAXBUF 16 CACHE STRING "number of frame buffers per channel (tx, rx1 rx2)")
set(EC_MAXEEPBITMAP 128 CACHE STRING "size of EEPROM bitmap cache")
set(EC_MAXEEPBUF "EC_MAXEEPBITMAP << 5" CACHE STRING "size of EEPROM cache buffer")
set(EC_LOGGROUPOFFSET 16 CACHE STRING "default group size in 2^x")
set(EC_MAXELIST 64 CACHE STRING "max. entries in EtherCAT error list")
set(EC_MAXNAME 40 CACHE STRING "max. length of readable name in slavelist and Object Description List")
set(EC_MAXSLAVE 200 CACHE STRING "max. number of slaves in array")
set(EC_MAXGROUP 2 CACHE STRING "max. number of groups")
set(EC_MAXIOSEGMENTS 64 CACHE STRING "max. number of IO segments per group")
set(EC_MAXMBX 1486 CACHE STRING "max. mailbox size")
set(EC_MBXPOOLSIZE 32 CACHE STRING "number of mailboxes in pool")
set(EC_MAXEEPDO 0x200 CACHE STRING "max. eeprom PDO entries")
set(EC_MAXSM 8 CACHE STRING "max. SM used")
set(EC_MAXFMMU 4 CACHE STRING "max. FMMU used")
set(EC_MAXLEN_ADAPTERNAME 128 CACHE STRING "max. adapter name length")
set(EC_MAX_MAPT 1 CACHE STRING " define maximum number of concurrent threads in mapping")
set(EC_MAXODLIST 1024 CACHE STRING "max entries in Object Description list")
set(EC_MAXOELIST 256 CACHE STRING "max entries in Object Entry list")
set(EC_SOE_MAXNAME 60 CACHE STRING "max. length of readable SoE name")
set(EC_SOE_MAXMAPPING 64 CACHE STRING "max. number of SoE mappings")
# Configurable timeouts and retries
set(EC_TIMEOUTRET 2000 CACHE STRING "timeout value in us for tx frame to return to rx")
set(EC_TIMEOUTRET3 "EC_TIMEOUTRET * 3" CACHE STRING "timeout value in us for safe data transfer, max. triple retry")
set(EC_TIMEOUTSAFE 20000 CACHE STRING "timeout value in us for return \"safe\" variant (f.e. wireless)")
set(EC_TIMEOUTEEP 20000 CACHE STRING "timeout value in us for EEPROM access")
set(EC_TIMEOUTTXM 20000 CACHE STRING "timeout value in us for tx mailbox cycle")
set(EC_TIMEOUTRXM 700000 CACHE STRING "timeout value in us for rx mailbox cycle")
set(EC_TIMEOUTSTATE 2000000 CACHE STRING "timeout value in us for check statechange")
set(EC_DEFAULTRETRIES 3 CACHE STRING "default number of retries if wkc <= 0")
# MAC addresses
set(EC_PRIMARY_MAC "01:01:01:01:01:01" CACHE STRING "Primary MAC address")
set(EC_SECONDARY_MAC "04:04:04:04:04:04" CACHE STRING "Secondary MAC address")
if(PROJECT_IS_TOP_LEVEL)
# Make option visible in ccmake, cmake-gui
option(BUILD_SHARED_LIBS "Build shared library" OFF)
option(SOEM_BUILD_SAMPLES "Build samples" ON)
# Default to release build with debug info
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
FORCE)
endif(NOT CMAKE_BUILD_TYPE)
# Default to installing in build directory
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/install
CACHE PATH "Default install path" FORCE)
endif()
message(STATUS "Current build type is: ${CMAKE_BUILD_TYPE}")
message(STATUS "Current install path is: ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Building for ${CMAKE_SYSTEM_NAME}")
endif()
# Always use standard .o suffix
set(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1)
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)
add_library(soem
src/ec_base.c
src/ec_coe.c
src/ec_config.c
src/ec_dc.c
src/ec_eoe.c
src/ec_foe.c
src/ec_main.c
src/ec_print.c
src/ec_soe.c
)
target_include_directories(soem PUBLIC
$<BUILD_INTERFACE:${SOEM_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${SOEM_BINARY_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_include_directories(soem PUBLIC
$<BUILD_INTERFACE:${SOEM_SOURCE_DIR}/osal>
$<INSTALL_INTERFACE:include>
)
target_compile_definitions(soem PRIVATE
$<$<BOOL:${EC_DEBUG}>:EC_DEBUG>
$<$<STREQUAL:${CMAKE_C_BYTE_ORDER},BIG_ENDIAN>:EC_BIG_ENDIAN>
)
# Convert mac address to word arrays for use in options file
macro(convert_mac address array)
set(RE_BYTE "([0-9A-Fa-f][0-9A-Fa-f])")
string(REGEX REPLACE
"^${RE_BYTE}:${RE_BYTE}:${RE_BYTE}:${RE_BYTE}:${RE_BYTE}:${RE_BYTE}$"
"{0x\\1\\2, 0x\\3\\4, 0x\\5\\6}"
${array}
${address})
endmacro()
convert_mac(${EC_PRIMARY_MAC} EC_PRIMARY_MAC_ARRAY)
convert_mac(${EC_SECONDARY_MAC} EC_SECONDARY_MAC_ARRAY)
configure_file(
include/soem/ec_options.h.in
${SOEM_BINARY_DIR}/include/soem/ec_options.h
)
install(
TARGETS soem
EXPORT soemConfig
DESTINATION lib
)
install(
EXPORT soemConfig
DESTINATION cmake
)
install(FILES
include/soem/ec_base.h
include/soem/ec_coe.h
include/soem/ec_config.h
include/soem/ec_dc.h
include/soem/ec_eoe.h
include/soem/ec_foe.h
include/soem/ec_main.h
include/soem/ec_print.h
include/soem/ec_soe.h
include/soem/ec_type.h
include/soem/soem.h
osal/osal.h
${SOEM_BINARY_DIR}/include/soem/ec_options.h
DESTINATION include/soem
)
install(FILES
scripts/eniconv.py
DESTINATION scripts
)
install(FILES
cmake/AddENI.cmake
DESTINATION cmake
)
install(FILES
README.md
LICENSE.md
DESTINATION .
)
if(SOEM_BUILD_SAMPLES)
add_subdirectory(samples/ec_sample)
add_subdirectory(samples/eepromtool)
add_subdirectory(samples/firm_update)
add_subdirectory(samples/simple_ng)
add_subdirectory(samples/slaveinfo)
if (${CMAKE_SYSTEM_NAME} STREQUAL Linux)
add_subdirectory(samples/eoe_test)
endif()
find_package (Python3 QUIET)
if (Python3_FOUND)
add_subdirectory(samples/eni_test)
endif()
endif()
# Platform configuration
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/${CMAKE_SYSTEM_NAME}.cmake)
include (InstallRequiredSystemLibraries)
set (CPACK_RESOURCE_FILE_LICENSE "${SOEM_SOURCE_DIR}/LICENSE.md")
set (CPACK_PACKAGE_CONTACT info.soem@rt-labs.com)
set (CPACK_PACKAGE_NAME soem)
set (CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR})
include (CPack)