@@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.5)
2
2
3
3
project (open_simulation_interface )
4
4
5
+ # Optional Flatbuffer support
6
+ set (BUILD_FLATBUFFER OFF CACHE BOOLEAN "Build flatbuffer versions of libraries" )
7
+
5
8
# Set a default build type if none was specified
6
9
set (default_build_type "Release" )
7
10
if (EXISTS "${CMAKE_SOURCE_DIR} /.git" )
@@ -78,6 +81,48 @@ set(OSI_PROTO_FILES
78
81
)
79
82
80
83
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 ()
81
126
82
127
add_library (${PROJECT_NAME} _static STATIC ${PROTO_SRCS} ${PROTO_HEADERS} )
83
128
target_include_directories (${PROJECT_NAME} _static
@@ -162,7 +207,7 @@ install(FILES
162
207
COMPONENT dev )
163
208
164
209
# Header files
165
- install (FILES ${PROTO_HEADERS}
210
+ install (FILES ${PROTO_HEADERS} ${FLAT_HEADERS}
166
211
DESTINATION "${INSTALL_INCLUDE_DIR} " )
167
212
168
213
# Install the export set for use with the install-tree
0 commit comments