@@ -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
@@ -90,7 +97,7 @@ set(OSI_PROTO_FILES
90
97
91
98
protobuf_generate_cpp (PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES} )
92
99
set (FLAT_HEADERS "" )
93
- if (BUILD_FLATBUFFER )
100
+ if (OSI_BUILD_FLATBUFFER )
94
101
set (FLAT_FBS "" )
95
102
add_subdirectory ("flatbuffers"
96
103
${CMAKE_CURRENT_BINARY_DIR} /flatbuffers-build
@@ -133,50 +140,53 @@ if(BUILD_FLATBUFFER)
133
140
endif ()
134
141
135
142
add_library (${PROJECT_NAME} _static STATIC ${PROTO_SRCS} ${PROTO_HEADERS} )
143
+ add_library (${PROJECT_NAME} ::${PROJECT_NAME}_static ALIAS ${PROJECT_NAME} _static )
136
144
target_include_directories (${PROJECT_NAME} _static
137
145
PUBLIC
138
146
${PROTOBUF_INCLUDE_DIR}
139
147
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
140
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
148
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
141
149
)
142
150
target_link_libraries (${PROJECT_NAME} _static PUBLIC ${PROTOBUF_LIBRARY} )
143
151
install (TARGETS ${PROJECT_NAME} _static
144
152
EXPORT ${PROJECT_NAME} _targets
145
- ARCHIVE DESTINATION "${INSTALL_LIB_DIR } " COMPONENT lib )
153
+ ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR } " COMPONENT lib )
146
154
147
155
148
156
add_library (${PROJECT_NAME} _obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS} )
157
+ add_library (${PROJECT_NAME} ::${PROJECT_NAME}_obj ALIAS ${PROJECT_NAME} _obj )
149
158
target_include_directories (${PROJECT_NAME} _obj
150
159
PUBLIC
151
160
${PROTOBUF_INCLUDE_DIR}
152
161
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
153
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
162
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
154
163
)
155
164
set_property (TARGET ${PROJECT_NAME} _obj PROPERTY POSITION_INDEPENDENT_CODE ON )
156
165
157
166
158
167
add_library (${PROJECT_NAME} _pic STATIC $< TARGET_OBJECTS:${PROJECT_NAME} _obj> )
159
-
168
+ add_library ( ${PROJECT_NAME} ::${PROJECT_NAME}_pic ALIAS ${PROJECT_NAME} _pic )
160
169
target_include_directories (${PROJECT_NAME} _pic
161
170
PUBLIC
162
171
${PROTOBUF_INCLUDE_DIR}
163
172
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
164
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
173
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
165
174
)
166
175
target_link_libraries (${PROJECT_NAME} _pic PUBLIC ${PROTOBUF_LIBRARY} )
167
176
168
177
set_property (TARGET ${PROJECT_NAME} _pic PROPERTY POSITION_INDEPENDENT_CODE ON )
169
178
170
179
install (TARGETS ${PROJECT_NAME} _pic
171
180
EXPORT ${PROJECT_NAME} _targets
172
- ARCHIVE DESTINATION "${INSTALL_LIB_DIR } " COMPONENT lib )
181
+ ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR } " COMPONENT lib )
173
182
174
183
add_library (${PROJECT_NAME} SHARED $< TARGET_OBJECTS:${PROJECT_NAME} _obj> )
184
+ add_library (${PROJECT_NAME} ::${PROJECT_NAME} ALIAS ${PROJECT_NAME} )
175
185
target_include_directories (${PROJECT_NAME}
176
186
PUBLIC
177
187
${PROTOBUF_INCLUDE_DIR}
178
188
$< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
179
- $< INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR } >
189
+ $< INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR } >
180
190
)
181
191
182
192
set_property (
@@ -191,64 +201,72 @@ set_property(
191
201
target_link_libraries (${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} )
192
202
install (TARGETS ${PROJECT_NAME}
193
203
EXPORT ${PROJECT_NAME} _targets
194
- DESTINATION "${INSTALL_LIB_DIR} " COMPONENT lib )
195
-
196
- # Create the open_simulation_interface.cmake and open_simulation_interface-version files
197
-
198
- # ... for the build tree
199
- set (CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR} " "${PROJECT_BINARY_DIR} " )
200
- configure_file (open_simulation_interface-config.cmake.in
201
- "${PROJECT_BINARY_DIR} /${PROJECT_NAME} -config.cmake" @ONLY )
202
- # ... for the install tree
203
- set (CONF_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX} /${INSTALL_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIR} )
204
- configure_file (open_simulation_interface-config.cmake.in
205
- "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /open_simulation_interface-config.cmake" @ONLY )
206
- # ... for both
207
- configure_file (open_simulation_interface-config-version.cmake.in
208
- "${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
+ )
209
234
210
235
# Install the *cmake files
211
236
install (FILES
212
- "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY } /open_simulation_interface-config.cmake"
213
- "${PROJECT_BINARY_DIR} / ${PROJECT_NAME} -config-version.cmake"
214
- DESTINATION "${INSTALL_CMAKE_DIR } "
215
- 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 )
216
241
217
242
# Header files
218
243
install (FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
219
- DESTINATION "${INSTALL_INCLUDE_DIR } " )
244
+ DESTINATION "${OSI_INSTALL_INCLUDE_DIR } " )
220
245
221
246
# Install the export set for use with the install-tree
222
247
install (EXPORT ${PROJECT_NAME} _targets
223
- DESTINATION "${INSTALL_CMAKE_DIR} "
224
- COMPONENT dev )
225
-
226
- # add a target to generate API documentation with Doxygen
227
- # Dependencies: Doxygen and proto2cpp.py
228
- FIND_PACKAGE (Doxygen )
229
- set (FILTER_PROTO2CPP_PY_PATH CACHE PATH "directory to the filter proto2cpp.py" )
230
-
231
- if (NOT DOXYGEN_FOUND )
232
-
233
- message (WARNING "Doxygen could not be found." )
234
-
235
- else ()
236
-
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" )
237
259
if (NOT EXISTS ${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py )
238
-
239
- message (WARNING "${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py could not be found." )
240
-
260
+ message (WARNING "${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py could not be found." )
241
261
else ()
262
+ set (doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR} /doxygen_config.cmake.in )
263
+ set (doxyfile ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile )
242
264
243
- set (doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR} /doxygen_config.cmake.in )
244
- set (doxyfile ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile )
245
-
246
- configure_file (${doxyfile_in} ${doxyfile} @ONLY )
265
+ configure_file (${doxyfile_in} ${doxyfile} @ONLY )
247
266
248
- ADD_CUSTOM_TARGET (api_doc ALL
267
+ add_custom_target (api_doc ALL
249
268
COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
250
269
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
251
-
252
- endif (NOT EXISTS ${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py )
253
-
254
- endif (NOT DOXYGEN_FOUND )
270
+ endif ()
271
+ endif ()
272
+ endif ()
0 commit comments