@@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.5)
22
33project (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
69set (default_build_type "Release" )
710if (EXISTS "${CMAKE_SOURCE_DIR} /.git" )
@@ -78,6 +81,48 @@ set(OSI_PROTO_FILES
7881)
7982
8083protobuf_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
82127add_library (${PROJECT_NAME} _static STATIC ${PROTO_SRCS} ${PROTO_HEADERS} )
83128target_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
0 commit comments