@@ -2,11 +2,19 @@ cmake_minimum_required(VERSION 3.5)
2
2
3
3
project (open_simulation_interface )
4
4
5
- # set default compiler
5
+ # Toplevel check
6
+ set (OSI_IS_TOP_LEVEL OFF )
7
+ if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR )
8
+ set (OSI_IS_TOP_LEVEL ON )
9
+ endif ()
10
+
11
+ # Set the C++ standard
6
12
set (CMAKE_CXX_STANDARD 11 )
13
+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
7
14
8
15
# Optional Flatbuffer support
9
- set (BUILD_FLATBUFFER OFF CACHE BOOLEAN "Build flatbuffer versions of libraries" )
16
+ option (OSI_BUILD_FLATBUFFER "Build flatbuffer versions of libraries" OFF )
17
+ option (OSI_BUILD_DOCUMENTATION "Build flatbuffer versions of libraries" ${OSI_IS_TOP_LEVEL} )
10
18
11
19
# Set a default build type if none was specified
12
20
set (default_build_type "Release" )
@@ -38,27 +46,26 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
38
46
endif ()
39
47
40
48
# Offer the user the choice of overriding the installation directories
41
- set (INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries" )
42
- set (INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files" )
49
+ set (OSI_INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries" )
50
+ set (OSI_INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files" )
43
51
44
52
if (WIN32 AND NOT CYGWIN )
45
53
set (DEF_INSTALL_CMAKE_DIR CMake/${PROJECT_NAME}-${VERSION_MAJOR} )
46
54
else ()
47
55
set (DEF_INSTALL_CMAKE_DIR lib/cmake/${PROJECT_NAME}-${VERSION_MAJOR} )
48
56
endif ()
49
- set (INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH
50
- "Installation directory for CMake files" )
57
+ set (OSI_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files" )
51
58
52
- set (INSTALL_LIB_DIR ${INSTALL_LIB_DIR } /osi${VERSION_MAJOR} )
53
- set (INSTALL_INCLUDE_DIR ${INSTALL_INCLUDE_DIR } /osi${VERSION_MAJOR} )
59
+ set (OSI_INSTALL_LIB_DIR ${OSI_INSTALL_LIB_DIR } /osi${VERSION_MAJOR} )
60
+ set (OSI_INSTALL_INCLUDE_DIR ${OSI_INSTALL_INCLUDE_DIR } /osi${VERSION_MAJOR} )
54
61
55
- configure_file (osi_version.proto.in ${CMAKE_CURRENT_SOURCE_DIR} / osi_version.proto )
62
+ configure_file (osi_version.proto.in osi_version.proto )
56
63
57
64
find_package (Protobuf 2.6.1 REQUIRED )
58
65
set (PROTOBUF_IMPORT_DIRS ${PROTOBUF_INCLUDE_DIRS} )
59
66
60
67
set (OSI_PROTO_FILES
61
- osi_version.proto
68
+ ${CMAKE_CURRENT_BINARY_DIR} / osi_version.proto
62
69
osi_common.proto
63
70
osi_datarecording.proto
64
71
osi_detectedtrafficsign.proto
@@ -74,8 +81,10 @@ set(OSI_PROTO_FILES
74
81
osi_trafficlight.proto
75
82
osi_trafficupdate.proto
76
83
osi_trafficcommand.proto
84
+ osi_referenceline.proto
77
85
osi_roadmarking.proto
78
86
osi_lane.proto
87
+ osi_logicallane.proto
79
88
osi_featuredata.proto
80
89
osi_logicaldetectiondata.proto
81
90
osi_object.proto
@@ -88,7 +97,7 @@ set(OSI_PROTO_FILES
88
97
89
98
protobuf_generate_cpp (PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES} )
90
99
set (FLAT_HEADERS "" )
91
- if (BUILD_FLATBUFFER )
100
+ if (OSI_BUILD_FLATBUFFER )
92
101
set (FLAT_FBS "" )
93
102
add_subdirectory ("flatbuffers"
94
103
${CMAKE_CURRENT_BINARY_DIR} /flatbuffers-build
@@ -131,50 +140,53 @@ if(BUILD_FLATBUFFER)
131
140
endif ()
132
141
133
142
add_library (${PROJECT_NAME} _static STATIC ${PROTO_SRCS} ${PROTO_HEADERS} )
143
+ add_library (${PROJECT_NAME} ::${PROJECT_NAME}_static ALIAS ${PROJECT_NAME} _static )
134
144
target_include_directories (${PROJECT_NAME} _static
135
145
PUBLIC
136
146
${PROTOBUF_INCLUDE_DIR}
137
147
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
138
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
148
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
139
149
)
140
150
target_link_libraries (${PROJECT_NAME} _static PUBLIC ${PROTOBUF_LIBRARY} )
141
151
install (TARGETS ${PROJECT_NAME} _static
142
152
EXPORT ${PROJECT_NAME} _targets
143
- ARCHIVE DESTINATION "${INSTALL_LIB_DIR } " COMPONENT lib )
153
+ ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR } " COMPONENT lib )
144
154
145
155
146
156
add_library (${PROJECT_NAME} _obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS} )
157
+ add_library (${PROJECT_NAME} ::${PROJECT_NAME}_obj ALIAS ${PROJECT_NAME} _obj )
147
158
target_include_directories (${PROJECT_NAME} _obj
148
159
PUBLIC
149
160
${PROTOBUF_INCLUDE_DIR}
150
161
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
151
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
162
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
152
163
)
153
164
set_property (TARGET ${PROJECT_NAME} _obj PROPERTY POSITION_INDEPENDENT_CODE ON )
154
165
155
166
156
167
add_library (${PROJECT_NAME} _pic STATIC $< TARGET_OBJECTS:${PROJECT_NAME} _obj> )
157
-
168
+ add_library ( ${PROJECT_NAME} ::${PROJECT_NAME}_pic ALIAS ${PROJECT_NAME} _pic )
158
169
target_include_directories (${PROJECT_NAME} _pic
159
170
PUBLIC
160
171
${PROTOBUF_INCLUDE_DIR}
161
172
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
162
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
173
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
163
174
)
164
175
target_link_libraries (${PROJECT_NAME} _pic PUBLIC ${PROTOBUF_LIBRARY} )
165
176
166
177
set_property (TARGET ${PROJECT_NAME} _pic PROPERTY POSITION_INDEPENDENT_CODE ON )
167
178
168
179
install (TARGETS ${PROJECT_NAME} _pic
169
180
EXPORT ${PROJECT_NAME} _targets
170
- ARCHIVE DESTINATION "${INSTALL_LIB_DIR } " COMPONENT lib )
181
+ ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR } " COMPONENT lib )
171
182
172
183
add_library (${PROJECT_NAME} SHARED $< TARGET_OBJECTS:${PROJECT_NAME} _obj> )
184
+ add_library (${PROJECT_NAME} ::${PROJECT_NAME} ALIAS ${PROJECT_NAME} )
173
185
target_include_directories (${PROJECT_NAME}
174
186
PUBLIC
175
187
${PROTOBUF_INCLUDE_DIR}
176
188
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
177
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
189
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
178
190
)
179
191
180
192
set_property (
@@ -189,64 +201,72 @@ set_property(
189
201
target_link_libraries (${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} )
190
202
install (TARGETS ${PROJECT_NAME}
191
203
EXPORT ${PROJECT_NAME} _targets
192
- DESTINATION "${INSTALL_LIB_DIR} " COMPONENT lib )
193
-
194
- # Create the open_simulation_interface.cmake and open_simulation_interface-version files
195
-
196
- # ... for the build tree
197
- set (CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR} " "${PROJECT_BINARY_DIR} " )
198
- configure_file (open_simulation_interface-config.cmake.in
199
- "${PROJECT_BINARY_DIR} /${PROJECT_NAME} -config.cmake" @ONLY )
200
- # ... for the install tree
201
- set (CONF_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX} /${INSTALL_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIR} )
202
- configure_file (open_simulation_interface-config.cmake.in
203
- "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /open_simulation_interface-config.cmake" @ONLY )
204
- # ... for both
205
- configure_file (open_simulation_interface-config-version.cmake.in
206
- "${PROJECT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake" @ONLY )
204
+ DESTINATION "${OSI_INSTALL_LIB_DIR} " COMPONENT lib )
205
+
206
+ # Copy proto headers to where they are expected by the package config file
207
+ add_custom_command (
208
+ TARGET ${PROJECT_NAME} POST_BUILD
209
+ COMMAND ${CMAKE_COMMAND} -E make_directory
210
+ ${CMAKE_CURRENT_BINARY_DIR} /${OSI_INSTALL_INCLUDE_DIR}
211
+ COMMAND ${CMAKE_COMMAND} -E copy
212
+ ${PROTO_HEADERS}
213
+ ${CMAKE_CURRENT_BINARY_DIR} /${OSI_INSTALL_INCLUDE_DIR} )
214
+
215
+ # Create the package config files
216
+ include (CMakePackageConfigHelpers )
217
+ write_basic_package_version_file (
218
+ "${CMAKE_CURRENT_BINARY_DIR} /open_simulation_interface-config-version.cmake"
219
+ VERSION ${OPEN_SIMULATION_INTERFACE_VERSION}
220
+ COMPATIBILITY SameMajorVersion
221
+ )
222
+
223
+ export (EXPORT ${PROJECT_NAME} _targets
224
+ FILE "${CMAKE_CURRENT_BINARY_DIR} /open_simulation_interface-targets.cmake"
225
+ NAMESPACE ${PROJECT_NAME} ::
226
+ )
227
+
228
+ configure_package_config_file (open_simulation_interface-config.cmake.in
229
+ "${CMAKE_CURRENT_BINARY_DIR} /open_simulation_interface-config.cmake"
230
+ INSTALL_DESTINATION ${OSI_INSTALL_CMAKE_DIR}
231
+ PATH_VARS OSI_INSTALL_INCLUDE_DIR
232
+ NO_CHECK_REQUIRED_COMPONENTS_MACRO
233
+ )
207
234
208
235
# Install the *cmake files
209
236
install (FILES
210
- "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY } /open_simulation_interface-config.cmake"
211
- "${PROJECT_BINARY_DIR} / ${PROJECT_NAME} -config-version.cmake"
212
- DESTINATION "${INSTALL_CMAKE_DIR } "
213
- COMPONENT dev )
237
+ "${CMAKE_CURRENT_BINARY_DIR } /open_simulation_interface-config.cmake"
238
+ "${CMAKE_CURRENT_BINARY_DIR} /open_simulation_interface -config-version.cmake"
239
+ DESTINATION "${OSI_INSTALL_CMAKE_DIR } "
240
+ COMPONENT dev )
214
241
215
242
# Header files
216
243
install (FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
217
- DESTINATION "${INSTALL_INCLUDE_DIR } " )
244
+ DESTINATION "${OSI_INSTALL_INCLUDE_DIR } " )
218
245
219
246
# Install the export set for use with the install-tree
220
247
install (EXPORT ${PROJECT_NAME} _targets
221
- DESTINATION "${INSTALL_CMAKE_DIR} "
222
- COMPONENT dev )
223
-
224
- # add a target to generate API documentation with Doxygen
225
- # Dependencies: Doxygen and proto2cpp.py
226
- FIND_PACKAGE (Doxygen )
227
- set (FILTER_PROTO2CPP_PY_PATH CACHE PATH "directory to the filter proto2cpp.py" )
228
-
229
- if (NOT DOXYGEN_FOUND )
230
-
231
- message (WARNING "Doxygen could not be found." )
232
-
233
- else ()
234
-
248
+ FILE open_simulation_interface-targets.cmake
249
+ NAMESPACE ${PROJECT_NAME} ::
250
+ DESTINATION "${OSI_INSTALL_CMAKE_DIR} "
251
+ COMPONENT dev )
252
+
253
+ if (OSI_BUILD_DOCUMENTATION )
254
+ # add a target to generate API documentation with Doxygen
255
+ # Dependencies: Doxygen and proto2cpp.py
256
+ find_package (Doxygen )
257
+ if (Doxygen_FOUND )
258
+ set (FILTER_PROTO2CPP_PY_PATH CACHE PATH "directory to the filter proto2cpp.py" )
235
259
if (NOT EXISTS ${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py )
236
-
237
- message (WARNING "${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py could not be found." )
238
-
260
+ message (WARNING "${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py could not be found." )
239
261
else ()
262
+ set (doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR} /doxygen_config.cmake.in )
263
+ set (doxyfile ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile )
240
264
241
- set (doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR} /doxygen_config.cmake.in )
242
- set (doxyfile ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile )
243
-
244
- configure_file (${doxyfile_in} ${doxyfile} @ONLY )
265
+ configure_file (${doxyfile_in} ${doxyfile} @ONLY )
245
266
246
- ADD_CUSTOM_TARGET (api_doc ALL
267
+ add_custom_target (api_doc ALL
247
268
COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
248
269
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
249
-
250
- endif (NOT EXISTS ${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py )
251
-
252
- endif (NOT DOXYGEN_FOUND )
270
+ endif ()
271
+ endif ()
272
+ endif ()
0 commit comments