forked from OpenEtherCATsociety/SOEM
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
191 lines (163 loc) · 6.17 KB
/
CMakeLists.txt
File metadata and controls
191 lines (163 loc) · 6.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# 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)