Skip to content

Commit d3cd08f

Browse files
Merge branch 'master' into OSI-584-VehicleRole
2 parents 0149c67 + 9f762e3 commit d3cd08f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+2298
-214
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ osi_version.proto
2323
version.py
2424
pyproject.toml
2525

26+
compile_commands.json
27+
2628
# Eclipse-specific files, if any
2729
*.cproject
2830
*.project

CMakeLists.txt

Lines changed: 84 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@ cmake_minimum_required(VERSION 3.5)
22

33
project(open_simulation_interface)
44

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
612
set(CMAKE_CXX_STANDARD 11)
13+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
714

815
# 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})
1018

1119
# Set a default build type if none was specified
1220
set(default_build_type "Release")
@@ -38,27 +46,26 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
3846
endif()
3947

4048
# 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")
4351

4452
if(WIN32 AND NOT CYGWIN)
4553
set(DEF_INSTALL_CMAKE_DIR CMake/${PROJECT_NAME}-${VERSION_MAJOR})
4654
else()
4755
set(DEF_INSTALL_CMAKE_DIR lib/cmake/${PROJECT_NAME}-${VERSION_MAJOR})
4856
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")
5158

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})
5461

55-
configure_file(osi_version.proto.in ${CMAKE_CURRENT_SOURCE_DIR}/osi_version.proto)
62+
configure_file(osi_version.proto.in osi_version.proto)
5663

5764
find_package(Protobuf 2.6.1 REQUIRED)
5865
set(PROTOBUF_IMPORT_DIRS ${PROTOBUF_INCLUDE_DIRS})
5966

6067
set(OSI_PROTO_FILES
61-
osi_version.proto
68+
${CMAKE_CURRENT_BINARY_DIR}/osi_version.proto
6269
osi_common.proto
6370
osi_datarecording.proto
6471
osi_detectedtrafficsign.proto
@@ -74,8 +81,10 @@ set(OSI_PROTO_FILES
7481
osi_trafficlight.proto
7582
osi_trafficupdate.proto
7683
osi_trafficcommand.proto
84+
osi_referenceline.proto
7785
osi_roadmarking.proto
7886
osi_lane.proto
87+
osi_logicallane.proto
7988
osi_featuredata.proto
8089
osi_logicaldetectiondata.proto
8190
osi_object.proto
@@ -88,7 +97,7 @@ set(OSI_PROTO_FILES
8897

8998
protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES})
9099
set(FLAT_HEADERS "")
91-
if(BUILD_FLATBUFFER)
100+
if(OSI_BUILD_FLATBUFFER)
92101
set(FLAT_FBS "")
93102
add_subdirectory("flatbuffers"
94103
${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build
@@ -131,50 +140,53 @@ if(BUILD_FLATBUFFER)
131140
endif()
132141

133142
add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
143+
add_library(${PROJECT_NAME}::${PROJECT_NAME}_static ALIAS ${PROJECT_NAME}_static)
134144
target_include_directories(${PROJECT_NAME}_static
135145
PUBLIC
136146
${PROTOBUF_INCLUDE_DIR}
137147
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
138-
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
148+
$<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR}>
139149
)
140150
target_link_libraries(${PROJECT_NAME}_static PUBLIC ${PROTOBUF_LIBRARY})
141151
install(TARGETS ${PROJECT_NAME}_static
142152
EXPORT ${PROJECT_NAME}_targets
143-
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib)
153+
ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib)
144154

145155

146156
add_library(${PROJECT_NAME}_obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS})
157+
add_library(${PROJECT_NAME}::${PROJECT_NAME}_obj ALIAS ${PROJECT_NAME}_obj)
147158
target_include_directories(${PROJECT_NAME}_obj
148159
PUBLIC
149160
${PROTOBUF_INCLUDE_DIR}
150161
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
151-
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
162+
$<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR}>
152163
)
153164
set_property(TARGET ${PROJECT_NAME}_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
154165

155166

156167
add_library(${PROJECT_NAME}_pic STATIC $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
157-
168+
add_library(${PROJECT_NAME}::${PROJECT_NAME}_pic ALIAS ${PROJECT_NAME}_pic)
158169
target_include_directories(${PROJECT_NAME}_pic
159170
PUBLIC
160171
${PROTOBUF_INCLUDE_DIR}
161172
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
162-
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
173+
$<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR}>
163174
)
164175
target_link_libraries(${PROJECT_NAME}_pic PUBLIC ${PROTOBUF_LIBRARY})
165176

166177
set_property(TARGET ${PROJECT_NAME}_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
167178

168179
install(TARGETS ${PROJECT_NAME}_pic
169180
EXPORT ${PROJECT_NAME}_targets
170-
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib)
181+
ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib)
171182

172183
add_library(${PROJECT_NAME} SHARED $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
184+
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
173185
target_include_directories(${PROJECT_NAME}
174186
PUBLIC
175187
${PROTOBUF_INCLUDE_DIR}
176188
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
177-
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
189+
$<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR}>
178190
)
179191

180192
set_property(
@@ -189,64 +201,72 @@ set_property(
189201
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY})
190202
install(TARGETS ${PROJECT_NAME}
191203
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+
)
207234

208235
# Install the *cmake files
209236
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)
214241

215242
# Header files
216243
install(FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
217-
DESTINATION "${INSTALL_INCLUDE_DIR}")
244+
DESTINATION "${OSI_INSTALL_INCLUDE_DIR}")
218245

219246
# Install the export set for use with the install-tree
220247
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")
235259
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.")
239261
else()
262+
set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/doxygen_config.cmake.in)
263+
set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
240264

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)
245266

246-
ADD_CUSTOM_TARGET(api_doc ALL
267+
add_custom_target(api_doc ALL
247268
COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
248269
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()

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ Install `pip3` and missing python packages:
9191
```bash
9292
$ sudo apt-get install python3-pip python3-setuptools
9393
```
94-
Install `protobuf` 3.0.0:
94+
Install `protobuf`:
9595
```bash
9696
$ sudo apt-get install libprotobuf-dev protobuf-compiler
9797
```

doc/architecture/architecture_overview.adoc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,16 @@ The `HostVehicleData` interface describes the measured internal states of a traf
2929
OSI currently provides only limited support for data structures that describe measured internal states of traffic participants.
3030
Actuator intentions are currently not covered by OSI and must be handled using a different data description format.
3131

32-
All fields in an interface are set to `optional`.
32+
NOTE: OSI uses singular instead of plural for `repeated` field names.
33+
34+
NOTE: All fields in an interface are set to `optional`.
3335
`required` is not used.
36+
3437
This has been done to allow backward-compatible changes in the field.
3538
Additionally, this is the default behavior in Protocol Buffer version 3 that no longer has the `required` type.
3639
Setting all fields to `optional` thus ensures update compatibility.
3740
However, this does not mean that it is optional to fill the field.
3841
For the purpose of providing a complete interface, all existing fields should be set, unless not setting a field carries a specific meaning, as indicated in the accompanying comment.
3942

40-
All field numbers equal to or greater than 10000 are available for user-specific extensions via custom fields.
43+
NOTE: All field numbers equal to or greater than 10000 are available for user-specific extensions via custom fields.
4144
No future evolution of OSI will therefore use field numbers equal to or greater than 10000.

doc/architecture/reference_points_coordinate_systems.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
= Coordinate systems and reference points
1+
= Coordinate systems, reference points and coordinate transformation
22

33
OSI uses DIN ISO 8855:2013-11 cite:[iso8855] for coordinate systems and transformations between coordinate systems.
44
OSI uses three coordinate systems:

doc/images/OSI_LogicalLane1.png

17.1 KB
Loading

doc/images/OSI_LogicalLane2.png

9.2 KB
Loading

0 commit comments

Comments
 (0)