Skip to content

Commit 1c124f3

Browse files
committed
Add support for flatbuffers code generation
Signed-off-by: Pierre R. Mai <pmai@pmsf.de>
1 parent 4d0e566 commit 1c124f3

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
@@ -0,0 +1,3 @@
1+
[submodule "flatbuffers"]
2+
path = flatbuffers
3+
url = https://github.com/google/flatbuffers.git

CMakeLists.txt

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.5)
22

33
project(open_simulation_interface)
44

5+
# Optional Flatbuffer support
6+
set(BUILD_FLATBUFFER OFF CACHE BOOLEAN "Build flatbuffer versions of libraries")
7+
58
# Set a default build type if none was specified
69
set(default_build_type "Release")
710
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
@@ -78,6 +81,48 @@ set(OSI_PROTO_FILES
7881
)
7982

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

82127
add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
83128
target_include_directories(${PROJECT_NAME}_static
@@ -162,7 +207,7 @@ install(FILES
162207
COMPONENT dev)
163208

164209
# Header files
165-
install(FILES ${PROTO_HEADERS}
210+
install(FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
166211
DESTINATION "${INSTALL_INCLUDE_DIR}")
167212

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

flatbuffers

Submodule flatbuffers added at 6df40a2

0 commit comments

Comments
 (0)