Skip to content

Commit 7d52b71

Browse files
authored
Merge pull request #427 from OpenSimulationInterface/experimental/flatbuffers
Experimental: Add Flatbuffers support
2 parents 3d276cb + 5e9d0d6 commit 7d52b71

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[submodule "asciidoc-resources"]
22
path = asciidoc-resources
33
url = https://code.asam.net/simulation/asciidoc-resources.git
4+
[submodule "flatbuffers"]
5+
path = flatbuffers
6+
url = https://github.com/google/flatbuffers.git

CMakeLists.txt

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ project(open_simulation_interface)
55
# set default compiler
66
set(CMAKE_CXX_STANDARD 11)
77

8+
# Optional Flatbuffer support
9+
set(BUILD_FLATBUFFER OFF CACHE BOOLEAN "Build flatbuffer versions of libraries")
10+
811
# Set a default build type if none was specified
912
set(default_build_type "Release")
1013
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
@@ -84,6 +87,48 @@ set(OSI_PROTO_FILES
8487
)
8588

8689
protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES})
90+
set(FLAT_HEADERS "")
91+
if(BUILD_FLATBUFFER)
92+
set(FLAT_FBS "")
93+
add_subdirectory("flatbuffers"
94+
${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build
95+
EXCLUDE_FROM_ALL)
96+
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/descriptor.fbs" "namespace osi3;")
97+
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include")
98+
list(APPEND FLAT_FBS "${CMAKE_CURRENT_BINARY_DIR}/descriptor.fbs")
99+
foreach (proto ${OSI_PROTO_FILES})
100+
get_filename_component(proto_base ${proto} NAME_WE)
101+
set(fbs "${proto_base}.fbs")
102+
add_custom_command(
103+
OUTPUT "${fbs}"
104+
COMMAND $<TARGET_FILE:flatc> -I "${PROTOBUF_IMPORT_DIRS}" -o "${CMAKE_CURRENT_BINARY_DIR}" --proto "${CMAKE_CURRENT_SOURCE_DIR}/${proto}"
105+
DEPENDS "${proto}" flatc
106+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
107+
COMMENT "Convert ${proto} to ${fbs} using flatc"
108+
)
109+
list(APPEND FLAT_FBS "${CMAKE_CURRENT_BINARY_DIR}/${fbs}")
110+
endforeach()
111+
112+
foreach (flat ${FLAT_FBS})
113+
get_filename_component(flat_base ${flat} NAME_WE)
114+
set(fbs "${flat_base}.fbs")
115+
set(fbh "${flat_base}_generated.h")
116+
add_custom_command(
117+
OUTPUT "include/${fbh}"
118+
COMMAND $<TARGET_FILE:flatc> -o "${CMAKE_CURRENT_BINARY_DIR}/include" --cpp --gen-mutable --gen-name-strings --scoped-enums "${fbs}"
119+
DEPENDS "${FLAT_FBS}" flatc
120+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
121+
COMMENT "Process ${fbs} to ${fbh} using flatc"
122+
)
123+
list(APPEND FLAT_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/include/${fbh}")
124+
endforeach()
125+
126+
add_custom_target(${PROJECT_NAME}_fbs_build ALL DEPENDS "${FLAT_HEADERS}")
127+
add_library(${PROJECT_NAME}_fbs INTERFACE)
128+
target_include_directories(${PROJECT_NAME}_fbs INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/>)
129+
target_include_directories(${PROJECT_NAME}_fbs SYSTEM INTERFACE $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>)
130+
target_link_libraries(${PROJECT_NAME}_fbs INTERFACE flatbuffers)
131+
endif()
87132

88133
add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
89134
target_include_directories(${PROJECT_NAME}_static
@@ -168,7 +213,7 @@ install(FILES
168213
COMPONENT dev)
169214

170215
# Header files
171-
install(FILES ${PROTO_HEADERS}
216+
install(FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
172217
DESTINATION "${INSTALL_INCLUDE_DIR}")
173218

174219
# Install the export set for use with the install-tree

flatbuffers

Submodule flatbuffers added at 6df40a2

0 commit comments

Comments
 (0)