@@ -5,6 +5,9 @@ project(open_simulation_interface)
5
5
# set default compiler
6
6
set (CMAKE_CXX_STANDARD 11 )
7
7
8
+ # Optional Flatbuffer support
9
+ set (BUILD_FLATBUFFER OFF CACHE BOOLEAN "Build flatbuffer versions of libraries" )
10
+
8
11
# Set a default build type if none was specified
9
12
set (default_build_type "Release" )
10
13
if (EXISTS "${CMAKE_SOURCE_DIR} /.git" )
@@ -84,6 +87,48 @@ set(OSI_PROTO_FILES
84
87
)
85
88
86
89
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 ()
87
132
88
133
add_library (${PROJECT_NAME} _static STATIC ${PROTO_SRCS} ${PROTO_HEADERS} )
89
134
target_include_directories (${PROJECT_NAME} _static
@@ -168,7 +213,7 @@ install(FILES
168
213
COMPONENT dev )
169
214
170
215
# Header files
171
- install (FILES ${PROTO_HEADERS}
216
+ install (FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
172
217
DESTINATION "${INSTALL_INCLUDE_DIR} " )
173
218
174
219
# Install the export set for use with the install-tree
0 commit comments