/
CMakeLists.txt
243 lines (197 loc) · 10.7 KB
/
CMakeLists.txt
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
include (CMakeDependentOption)
include (CreatePCFlags)
include (SelectOneLibrary)
###
### List user options first before traversing sub-directories:
### All user options must be defined in this file, sub-directories can
### only read the options, not change them (Variable scope limits in cmake).
###
### OS Abstraction
OPTION(OS_AGNOSTIC "Do not use asm/system.h and asm/atomic.h global system heades, but use RTT implementations." ON)
OPTION(OS_HAVE_IOSTREAM "Use C++ iostream library." ON)
OPTION(OS_HAVE_STREAMS "Use C++ streams library." ON)
OPTION(OS_HAVE_MAIN "Provide main() function in rtt library, which sets up the OS. The user implements ORO_main()." ON)
OPTION(ORO_OS_USE_BOOST_THREAD "Use the Boost.Thread library. Currently only the mutex implementation is used." OFF)
if (ORO_OS_USE_BOOST_THREAD)
# Look for boost threads
find_package(Boost 1.36 COMPONENTS thread date_time REQUIRED)
if (NOT Boost_THREAD_FOUND)
message(SEND_ERROR "ORO_OS_USE_BOOST_THREAD turned on, but Boost thread library is not installed or wrong version.")
endif()
SELECT_ONE_LIBRARY("Boost_THREAD_LIBRARY" BOOST_THREAD_LIB)
list(APPEND OROCOS-RTT_LIBRARIES ${BOOST_THREAD_LIB} ${Boost_DATE_TIME_LIBRARY})
endif()
SET(OS_MAX_CONC_ACCESS 8 CACHE STRING "The maximum number of threads that will access a lock-free resource at exactly the same time. The Default (8) is very conservative. Your application may have more threads than this number.")
SET(OS_MAX_THREADS ${OS_MAX_CONC_ACCESS})
MARK_AS_ADVANCED(FORCE OS_MAX_CONC_ACCESS)
OPTION(OS_THREAD_SCOPE "Enable to monitor thread execution times through ThreadScope API." OFF)
OPTION(CONFIG_FORCE_UP "Enable to optimise for single core/cpu systems." OFF)
# Notify unit tests that no assembly must be tested.
SET(TESTS_OS_NO_ASM ${OS_NO_ASM} PARENT_SCOPE)
### Embedded
OPTION(OS_EMBEDDED "Build/Customise for embedded Operating System" OFF)
CMAKE_DEPENDENT_OPTION(OS_NOEXCEPTIONS "Disable exceptions." ON "OS_EMBEDDED" OFF)
CMAKE_DEPENDENT_OPTION(OS_EMBEDDED_SCRIPTING "Enable Scripting for embedded Operating System. (requires EXCEPTIONS)" OFF "NOT OS_NOEXCEPTIONS" OFF)
#Set build-local CFLAGS.
IF ( OS_NOEXCEPTIONS )
SET( CMAKE_CXX_FLAGS_ADD "${CMAKE_CXX_FLAGS_ADD} -fno-exceptions")
ENDIF ( OS_NOEXCEPTIONS )
IF ( OS_EMBEDDED )
SET( CMAKE_CXX_FLAGS_ADD "${CMAKE_CXX_FLAGS_ADD} -ffunction-sections -fdata-sections")
ENDIF ( OS_EMBEDDED )
### Logger
OPTION(OROBLD_DISABLE_LOGGING "Disable Logging Infrastructure" OFF)
CMAKE_DEPENDENT_OPTION(OROSEM_PRINTF_LOGGING "Logger uses printf()/fprintf() instead of std::iostream." OFF "NOT OROBLD_DISABLE_LOGGING" OFF)
CMAKE_DEPENDENT_OPTION(OROSEM_FILE_LOGGING "Logger logs to orocos.log file." ON "NOT OROBLD_DISABLE_LOGGING" OFF)
CMAKE_DEPENDENT_OPTION(OROSEM_REMOTE_LOGGING "Logger allows remote log retrieval." ON "NOT OROBLD_DISABLE_LOGGING" OFF)
IF (OROSEM_REMOTE_LOGGING AND NOT OROBLD_DISABLE_LOGGING)
SET(ORONUM_LOGGING_BUFSIZE 1000 CACHE STRING "Maximum number of lines kept for remote log retrieval.")
ELSE (OROSEM_REMOTE_LOGGING AND NOT OROBLD_DISABLE_LOGGING)
SET(ORONUM_LOGGING_BUFSIZE CACHE INTERNAL "")
ENDIF (OROSEM_REMOTE_LOGGING AND NOT OROBLD_DISABLE_LOGGING)
### Execution Engine
OPTION(OROPKG_EXECUTION_ADVANCED "Advanced Execution Engine configuration" OFF)
CMAKE_DEPENDENT_OPTION(OROPKG_EXECUTION_ENGINE_EVENTS "Enable Event Processing." ON "OROPKG_EXECUTION_ADVANCED" ON)
CMAKE_DEPENDENT_OPTION(OROPKG_EXECUTION_ENGINE_COMMANDS "Enable Command Processing." ON "OROPKG_EXECUTION_ADVANCED" ON)
CMAKE_DEPENDENT_OPTION(OROPKG_EXECUTION_ENGINE_PROGRAMS "Enable Program Processing." ON "OROPKG_EXECUTION_ADVANCED" ON)
CMAKE_DEPENDENT_OPTION(OROPKG_EXECUTION_ENGINE_STATEMACHINES "Enable Statemachine Processing." ON "OROPKG_EXECUTION_ADVANCED" ON)
IF (OROPKG_EXECUTION_ADVANCED)
SET(ORONUM_EXECUTION_PROC_QUEUE_SIZE 16 CACHE STRING "Default Command Queue size.")
ELSE (OROPKG_EXECUTION_ADVANCED)
SET(ORONUM_EXECUTION_PROC_QUEUE_SIZE 16 CACHE STRING "Default Command Queue size.")
ENDIF (OROPKG_EXECUTION_ADVANCED)
### Marshalling
OPTION(PLUGINS_ENABLE_MARSHALLING "Enable reading and writing Orocos Properties to XML." ON)
### Scripting
OPTION(PLUGINS_ENABLE_SCRIPTING "Enable loading Orocos program scripts." ON)
### RTT-Typekit
OPTION(PLUGINS_ENABLE_TYPEKIT "Enable default RTT typekit plugin." ON)
### TaskContext & Activities
OPTION(ORO_ACT_DEFAULT_ACTIVITY "Create default Activity object (thread) for each created TaskContext." ON)
CMAKE_DEPENDENT_OPTION(ORO_ACT_DEFAULT_SEQUENTIAL "Make the default activity a SequentialActivity (not-threaded) for each created TaskContext." OFF "ORO_ACT_DEFAULT_ACTIVITY" OFF)
### POSIX Message queues for IPC dataflow
OPTION(ENABLE_MQ "Enable real-time posix message queues for data-flow." ON)
### TLSF
CMAKE_DEPENDENT_OPTION(OS_RT_MALLOC "Enable RT memory management" ON "OS_HAS_TLSF" OFF)
IF ( OS_RT_MALLOC )
SET(TLSF_FLAGS "")
OPTION( OS_RT_MALLOC_SBRK "Enable RT memory management with sbrk support" ON)
OPTION( OS_RT_MALLOC_MMAP "Enable RT memory management with mmap support" ON)
OPTION( OS_RT_MALLOC_STATS "Enable RT memory management with statistics" ON)
OPTION( OS_RT_MALLOC_DEBUG "Enable RT memory management debugging" OFF)
IF (OS_RT_MALLOC_SBRK)
SET( TLSF_FLAGS "${TLSF_FLAGS} -DUSE_SBRK")
ENDIF (OS_RT_MALLOC_SBRK)
IF (OS_RT_MALLOC_MMAP)
SET( TLSF_FLAGS "${TLSF_FLAGS} -DUSE_MMAP -D_GNU_SOURCE")
ENDIF (OS_RT_MALLOC_MMAP)
IF (OS_RT_MALLOC_STATS)
SET( TLSF_FLAGS "${TLSF_FLAGS} -DTLSF_STATISTIC")
ENDIF (OS_RT_MALLOC_STATS)
IF (OS_RT_MALLOC_DEBUG)
SET( TLSF_FLAGS "${TLSF_FLAGS} -D_DEBUG_TLSF_")
ENDIF (OS_RT_MALLOC_DEBUG)
SET_SOURCE_FILES_PROPERTIES( os/tlsf/tlsf.c PROPERTIES
COMPILE_FLAGS "${TLSF_FLAGS}")
GET_SOURCE_FILE_PROPERTY( TLSF os/tlsf/tlsf.c COMPILE_FLAGS)
MESSAGE( "TLSF settings: ${TLSF}")
ENDIF (OS_RT_MALLOC )
### Use of Signal Class:
OPTION(ORO_SIGNALLING_OPERATIONS "Enable the signal function of operations. scripting::StateMachine needs this for responding to operations." OFF)
OPTION(ORO_SIGNALLING_PORTS "Enable the signal callback mechanism on ports. Enable if you want to attach multiple callbacks to flow ports." OFF)
###
# Collect Sources:
#
### Subdirs must append srcs inhere.
SET(ENV{GLOBAL_LIBRARY_SRCS})
FILE( GLOB CPPS [^.]*.cpp )
FILE( GLOB HPPS [^.]*.hpp [^.]*.h [^.]*.inl)
GLOBAL_ADD_INCLUDE( rtt ${HPPS})
GLOBAL_ADD_INCLUDE( rtt ${CMAKE_CURRENT_BINARY_DIR}/rtt-config.h)
GLOBAL_ADD_SRC( ${CPPS})
IF (OS_RT_MALLOC )
GLOBAL_ADD_SRC( os/tlsf/tlsf.c )
GLOBAL_ADD_INCLUDE( rtt/os/tlsf os/tlsf/tlsf.h )
ENDIF (OS_RT_MALLOC )
ADD_SUBDIRECTORY( os )
ADD_SUBDIRECTORY( base )
ADD_SUBDIRECTORY( internal )
ADD_SUBDIRECTORY( types )
ADD_SUBDIRECTORY( typekit )
ADD_SUBDIRECTORY( transports/corba )
ADD_SUBDIRECTORY( transports/mqueue )
ADD_SUBDIRECTORY( scripting )
ADD_SUBDIRECTORY( marsh )
ADD_SUBDIRECTORY( plugin )
ADD_SUBDIRECTORY( deployment )
ADD_SUBDIRECTORY( extras )
####
# Build Libraries:
#
# Due to generation of some .h files in build directories, we also need to include some build dirs in our include paths.
INCLUDE_DIRECTORIES(BEFORE ${PROJ_SOURCE_DIR} ${PROJ_SOURCE_DIR}/rtt ${PROJ_SOURCE_DIR}/rtt/os ${PROJ_SOURCE_DIR}/rtt/os/${OROCOS_TARGET} )
INCLUDE_DIRECTORIES(BEFORE ${PROJ_BINARY_DIR}/rtt ${PROJ_BINARY_DIR}/rtt/os ${PROJ_BINARY_DIR}/rtt/os/${OROCOS_TARGET} )
#SET(COMPILE_FLAGS "${CMAKE_CXX_FLAGS_ADD} ${RTT_CFLAGS} -DOROCOS_TARGET=${OROCOS_TARGET}")
IF ( BUILD_STATIC )
ADD_LIBRARY(orocos-rtt-${OROCOS_TARGET}_static STATIC $ENV{GLOBAL_LIBRARY_SRCS})
SET_TARGET_PROPERTIES( orocos-rtt-${OROCOS_TARGET}_static
PROPERTIES DEFINE_SYMBOL "RTT_DLL_EXPORT"
OUTPUT_NAME orocos-rtt-${OROCOS_TARGET}
# Set accumulated compilation flags: (.so and .a)
COMPILE_FLAGS "${CMAKE_CXX_FLAGS_ADD}"
LINK_FLAGS "${CMAKE_LD_FLAGS_ADD}"
COMPILE_DEFINITIONS OROCOS_TARGET=${OROCOS_TARGET}
VERSION "${RTT_VERSION}"
CLEAN_DIRECT_OUTPUT 1)
ENDIF ( BUILD_STATIC )
ADD_LIBRARY(orocos-rtt-${OROCOS_TARGET}_dynamic SHARED $ENV{GLOBAL_LIBRARY_SRCS})
SET_TARGET_PROPERTIES( orocos-rtt-${OROCOS_TARGET}_dynamic PROPERTIES
DEFINE_SYMBOL "RTT_DLL_EXPORT"
SOVERSION "${RTT_VERSION_MAJOR}.${RTT_VERSION_MINOR}"
VERSION "${RTT_VERSION}"
OUTPUT_NAME orocos-rtt-${OROCOS_TARGET}
# Set accumulated compilation flags: (.so and .a)
COMPILE_FLAGS "${CMAKE_CXX_FLAGS_ADD}"
LINK_FLAGS "${CMAKE_LD_FLAGS_ADD}"
COMPILE_DEFINITIONS OROCOS_TARGET=${OROCOS_TARGET}
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
CLEAN_DIRECT_OUTPUT 1)
IF (UNIX AND NOT APPLE)
SET_TARGET_PROPERTIES( orocos-rtt-${OROCOS_TARGET}_dynamic PROPERTIES
LINK_FLAGS "-Wl,-zdefs")
if ( LINUX_CAP_NG_LIBRARY )
target_link_libraries( orocos-rtt-${OROCOS_TARGET}_dynamic ${LINUX_CAP_NG_LIBRARY} )
set( ORO_OS_LINUX_CAP_NG 1 )
endif()
ENDIF ()
target_link_libraries(orocos-rtt-${OROCOS_TARGET}_dynamic ${OROCOS-RTT_LIBRARIES})
IF (BUILD_ENABLE_COVERAGE)
target_link_libraries(orocos-rtt-${OROCOS_TARGET}_dynamic gcov)
ENDIF (BUILD_ENABLE_COVERAGE)
IF (ROSLIB_SUPPORT)
target_link_libraries(orocos-rtt-${OROCOS_TARGET}_dynamic ${ROS_LIBRARIES})
get_filename_component(ROS_LIBRARY_PATH "${ROS_LIBRARIES}" PATH)
set_target_properties(orocos-rtt-${OROCOS_TARGET}_dynamic PROPERTIES
INSTALL_RPATH "${ROS_LIBRARY_PATH}")
ENDIF (ROSLIB_SUPPORT)
if(ENABLE_MQ AND OROPKG_OS_XENOMAI AND XENOMAI_POSIX_FOUND)
target_link_libraries(orocos-rtt-${OROCOS_TARGET}_dynamic ${XENOMAI_POSIX_LIBRARIES})
endif()
create_pc_flags( "${OROCOS-RTT_DEFINITIONS}" "${OROCOS-RTT_INCLUDE_DIRS}" "${OROCOS-RTT_LIBRARIES}" RTT_DEFINES RTT_CFLAGS RTT_LINKFLAGS)
create_pc_flags( "${RTT_DUMMY}" "${RTT_DUMMY}" "${OROCOS-RTT_USER_LINK_LIBS}" RTT_DUMMY RTT_DUMMY RTT_USER_LINK_LIBS)
### Generate rtt-config.h : HAS NO ACCESS TO SUBDIRECTORY VARIABLES !!!
CONFIGURE_FILE( ${PROJ_SOURCE_DIR}/rtt/rtt-config.h.in ${PROJ_BINARY_DIR}/rtt/rtt-config.h @ONLY)
CONFIGURE_FILE( ${PROJ_SOURCE_DIR}/rtt/os/targets/rtt-target.h.in ${PROJ_BINARY_DIR}/rtt/os/targets/rtt-target.h @ONLY)
CONFIGURE_FILE( ${PROJ_SOURCE_DIR}/rtt/os/targets/target-config.h.in ${PROJ_BINARY_DIR}/rtt/os/targets/${OROCOS_TARGET}-config.h @ONLY)
CONFIGURE_FILE( ${PROJ_SOURCE_DIR}/rtt/orocos-rtt.pc.in ${PROJ_BINARY_DIR}/rtt/orocos-rtt-${OROCOS_TARGET}.pc @ONLY)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/orocos-rtt-${OROCOS_TARGET}.pc DESTINATION lib/pkgconfig )
INSTALL(TARGETS orocos-rtt-${OROCOS_TARGET}_dynamic
EXPORT ${LIBRARY_EXPORT_FILE}
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin )
IF(BUILD_STATIC)
INSTALL(TARGETS orocos-rtt-${OROCOS_TARGET}_static
EXPORT ${LIBRARY_EXPORT_FILE}
ARCHIVE DESTINATION lib )
ENDIF(BUILD_STATIC)