Skip to content

Commit 0202201

Browse files
committed
Add support for flatbuffers code generation
Signed-off-by: Pierre R. Mai <[email protected]>
1 parent 3d276cb commit 0202201

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+
foreach (proto ${OSI_PROTO_FILES})
99+
get_filename_component(proto_base ${proto} NAME_WE)
100+
set(fbs "${proto_base}.fbs")
101+
add_custom_command(
102+
OUTPUT "${fbs}"
103+
COMMAND $<TARGET_FILE:flatc> -o "${CMAKE_CURRENT_BINARY_DIR}" --proto "${CMAKE_CURRENT_SOURCE_DIR}/${proto}"
104+
DEPENDS "${proto}" flatc
105+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
106+
COMMENT "Convert ${proto} to ${fbs} using flatc"
107+
)
108+
list(APPEND FLAT_FBS "${CMAKE_CURRENT_BINARY_DIR}/${fbs}")
109+
endforeach()
110+
111+
foreach (flat ${FLAT_FBS})
112+
get_filename_component(flat_base ${flat} NAME_WE)
113+
set(fbs "${flat_base}.fbs")
114+
set(fbh "${flat_base}_generated.h")
115+
add_custom_command(
116+
OUTPUT "include/${fbh}"
117+
COMMAND $<TARGET_FILE:flatc> -o "${CMAKE_CURRENT_BINARY_DIR}/include" --cpp --gen-mutable --gen-name-strings --scoped-enums "${fbs}"
118+
DEPENDS "${FLAT_FBS}" flatc
119+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
120+
COMMENT "Process ${fbs} to ${fbh} using flatc"
121+
)
122+
list(APPEND FLAT_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/include/${fbh}")
123+
endforeach()
124+
125+
add_custom_target(${PROJECT_NAME}_fbs_build ALL DEPENDS "${FLAT_HEADERS}")
126+
add_library(${PROJECT_NAME}_fbs INTERFACE)
127+
target_sources(${PROJECT_NAME}_fbs INTERFACE "$<BUILD_INTERFACE:${FLAT_HEADERS}>")
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)