/
FindXenomai.cmake
186 lines (161 loc) · 6.42 KB
/
FindXenomai.cmake
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
# (C) Copyright 2005-2014 Johns Hopkins University (JHU), All Rights
# Reserved.
#
# --- begin cisst license - do not edit ---
#
# This software is provided "as is" under an open source license, with
# no warranty. The complete license can be found in license.txt and
# http://www.cisst.org/cisst/license.txt.
#
# --- end cisst license ---
#
# CMake script for finding Xenomai
#
# This will find Xenomai on Linux systems and define flags for each of the
# supported Xenomai "skins". The current supported skins are:
#
# - NATIVE
# - POSIX
#
# Input variables:
#
# - ${Xenomai_ROOT_DIR} (optional): Used as a hint to find the Xenomai root dir
# - $ENV{XENOMAI_ROOT_DIR} (optional): Used as a hint to find the Xenomai root dir
#
# Cache variables:
#
# - Xenomai_ROOT_DIR
# - Xenomai_INCLUDE_DIRS
#
# Output Variables:
#
# - Xenomai_FOUND: Boolean that indicates if the package was found. See the
# Xenomai_*_FOUND variables below for individual skins.
# - Xenomai_VERSION: major.minor.patch Xenomai version string
# - Xenomai_XENO_CONFIG: Path to xeno-config program
#
# - Individual library variables:
# - Xenomai_LIBRARY_XENOMAI
# - Xenomai_LIBRARY_NATIVE
# - Xenomai_LIBRARY_PTHREAD_RT
# - Xenomai_LIBRARY_RTDM
# - Xenomai_LIBRARY_RTDK ( this will be empty, deprecated after Xenomai 2.6.0)
#
# - Native Flags:
# - Xenomai_NATIVE_FOUND: Boolean that indicates if the native skin was found
# - Xenomai_NATIVE_DEFINITIONS
# - Xenomai_NATIVE_INCLUDE_DIRS
# - Xenomai_NATIVE_LIBRARY_DIRS
# - Xenomai_NATIVE_LIBRARIES
# - Xenomai_NATIVE_LDFLAGS
#
# - POSIX Flags:
# - Xenomai_POSIX_FOUND: Boolean that indicates if the posix skin was found
# - Xenomai_POSIX_DEFINITIONS
# - Xenomai_POSIX_INCLUDE_DIRS
# - Xenomai_POSIX_LIBRARY_DIRS
# - Xenomai_POSIX_LIBRARIES
# - Xenomai_POSIX_LDFLAGS
#
# - RTDM Flags:
# - Xenomai_RTDM_FOUND: Boolean that indicates if the RTDM skin was found
# - Xenomai_RTDM_DEFINITIONS
# - Xenomai_RTDM_INCLUDE_DIRS
# - Xenomai_RTDM_LIBRARY_DIRS
# - Xenomai_RTDM_LIBRARIES
# - Xenomai_RTDM_LDFLAGS
if( UNIX )
# Get hint from environment variable (if any)
if(NOT $ENV{XENOMAI_ROOT_DIR} STREQUAL "")
set(XENOMAI_ROOT_DIR $ENV{XENOMAI_ROOT_DIR} CACHE PATH "Xenomai base directory location (optional, used for nonstandard installation paths)" FORCE)
mark_as_advanced(XENOMAI_ROOT_DIR)
endif()
# set the search paths
set( Xenomai_SEARCH_PATH /usr/local /usr $ENV{XENOMAI_ROOT_DIR} ${Xenomai_ROOT_DIR})
# find xeno_config.h
find_path( Xenomai_INCLUDE_DIR
xeno_config.h
PATHS ${Xenomai_SEARCH_PATH}
PATH_SUFFIXES xenomai include xenomai/include include/xenomai
)
# did we find xeno_config.h?
if(Xenomai_INCLUDE_DIR)
MESSAGE(STATUS "xenomai found: \"${Xenomai_INCLUDE_DIR}\"")
# set the root directory
if( "${Xenomai_INCLUDE_DIR}" MATCHES "/usr/include/xenomai" )
# on ubuntu linux, xenomai install is not rooted to a single dir
set( Xenomai_ROOT_DIR /usr CACHE PATH "The Xenomai FHS root")
set( Xenomai_INCLUDE_POSIX_DIR ${Xenomai_INCLUDE_DIR}/posix )
else()
# elsewhere, xenomai install is packaged
get_filename_component(Xenomai_ROOT_DIR ${Xenomai_INCLUDE_DIR} PATH CACHE)
set( Xenomai_INCLUDE_POSIX_DIR ${Xenomai_ROOT_DIR}/include/posix )
endif()
# Find xeno-config
find_program(Xenomai_XENO_CONFIG NAMES xeno-config PATHS ${Xenomai_ROOT_DIR}/bin NO_DEFAULT_PATH)
# get xenomai version
execute_process(COMMAND ${Xenomai_XENO_CONFIG} --version OUTPUT_VARIABLE Xenomai_VERSION)
# find the xenomai pthread library
find_library( Xenomai_LIBRARY_NATIVE native ${Xenomai_ROOT_DIR}/lib )
find_library( Xenomai_LIBRARY_XENOMAI xenomai ${Xenomai_ROOT_DIR}/lib )
find_library( Xenomai_LIBRARY_PTHREAD_RT pthread_rt ${Xenomai_ROOT_DIR}/lib )
find_library( Xenomai_LIBRARY_RTDM rtdm ${Xenomai_ROOT_DIR}/lib )
# In 2.6.0 RTDK was merged into the main xenomai library
if(Xenomai_VERSION VERSION_GREATER 2.6.0)
set(Xenomai_LIBRARY_RTDK_FOUND ${Xenomai_LIBRARY_XENOMAI_FOUND})
set(Xenomai_LIBRARY_RTDK ${Xenomai_LIBRARY_XENOMAI})
else()
find_library( Xenomai_LIBRARY_RTDK rtdk ${Xenomai_ROOT_DIR}/lib )
endif()
# Xenomai libraries for each skin
set(Xenomai_NATIVE_LIBRARIES ${Xenomai_LIBRARY_NATIVE} ${Xenomai_LIBRARY_XENOMAI} pthread)
set(Xenomai_POSIX_LIBRARIES ${Xenomai_LIBRARY_PTHREAD_RT} ${Xenomai_LIBRARY_XENOMAI} pthread rt)
set(Xenomai_RTDM_LIBRARIES ${Xenomai_LIBRARY_RTDM} ${Xenomai_LIBRARY_XENOMAI} pthread rt)
# Xenomai LDFLAGS for each skin
set(Xenomai_NATIVE_LDFLAGS "")
set(Xenomai_POSIX_LDFLAGS "-Wl,@${Xenomai_ROOT_DIR}/lib/posix.wrappers")
set(Xenomai_RTDM_LDFLAGS "")
# Xenomai compiler definitions for each supported skin
set(Xenomai_NATIVE_DEFINITIONS -D_GNU_SOURCE -D_REENTRANT -D__XENO__)
set(Xenomai_POSIX_DEFINITIONS ${Xenomai_NATIVE_DEFINITIONS})
set(Xenomai_RTDM_DEFINITIONS ${Xenomai_NATIVE_DEFINITIONS})
# Xenomai library dirs for each skin
set( Xenomai_NATIVE_LIBRARY_DIRS ${Xenomai_ROOT_DIR}/lib )
set( Xenomai_POSIX_LIBRARY_DIRS ${Xenomai_NATIVE_LIBRARY_DIRS} )
set( Xenomai_RTDM_LIBRARY_DIRS ${Xenomai_NATIVE_LIBRARY_DIRS} )
# Xenomai library dirs for each skin
set( Xenomai_NATIVE_INCLUDE_DIRS ${Xenomai_INCLUDE_DIR} )
set( Xenomai_POSIX_INCLUDE_DIRS ${Xenomai_INCLUDE_DIR} ${Xenomai_INCLUDE_POSIX_DIR} )
set( Xenomai_RTDM_INCLUDE_DIRS ${Xenomai_INCLUDE_DIR} )
# Compatibility
set( Xenomai_LIBRARIES
${Xenomai_LIBRARY_XENOMAI}
${Xenomai_LIBRARY_NATIVE}
${Xenomai_LIBRARY_PTHREAD_RT}
${Xenomai_LIBRARY_RTDM}
${Xenomai_LIBRARY_RTDK}
)
else( )
MESSAGE(STATUS "Xenomai NOT found in paths: (${Xenomai_SEARCH_PATH})")
endif( )
endif( UNIX )
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Xenomai DEFAULT_MSG
Xenomai_ROOT_DIR
Xenomai_INCLUDE_DIR
Xenomai_LIBRARY_XENOMAI
Xenomai_LIBRARY_RTDK
)
set(Xenomai_FOUND ${XENOMAI_FOUND}) # Set appropriately cased variable
if(Xenomai_LIBRARY_XENOMAI AND Xenomai_LIBRARY_NATIVE)
message(STATUS "Xenomai Native skin found")
set(Xenomai_NATIVE_FOUND True)
endif()
if(Xenomai_LIBRARY_XENOMAI AND Xenomai_LIBRARY_PTHREAD_RT)
message(STATUS "Xenomai POSIX skin found")
set(Xenomai_POSIX_FOUND True)
endif()
if(Xenomai_LIBRARY_XENOMAI AND Xenomai_LIBRARY_RTDM)
message(STATUS "Xenomai RTDM skin found")
set(Xenomai_RTDM_FOUND True)
endif()