@@ -5,6 +5,9 @@ project(open_simulation_interface)
55# set default compiler
66set (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
912set (default_build_type "Release" )
1013if (EXISTS "${CMAKE_SOURCE_DIR} /.git" )
@@ -84,6 +87,48 @@ set(OSI_PROTO_FILES
8487)
8588
8689protobuf_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
88133add_library (${PROJECT_NAME} _static STATIC ${PROTO_SRCS} ${PROTO_HEADERS} )
89134target_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
0 commit comments