From 0202201d87a5dd9ac8072b854665572e2c7f5136 Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Wed, 22 Jul 2020 13:51:28 +0200 Subject: [PATCH 1/3] Add support for flatbuffers code generation Signed-off-by: Pierre R. Mai --- .gitmodules | 3 +++ CMakeLists.txt | 47 ++++++++++++++++++++++++++++++++++++++++++++++- flatbuffers | 1 + 3 files changed, 50 insertions(+), 1 deletion(-) create mode 160000 flatbuffers diff --git a/.gitmodules b/.gitmodules index bd9e7f997..cae3296fc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "asciidoc-resources"] path = asciidoc-resources url = https://code.asam.net/simulation/asciidoc-resources.git +[submodule "flatbuffers"] + path = flatbuffers + url = https://github.com/google/flatbuffers.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 58c125328..2ce8930a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,9 @@ project(open_simulation_interface) # set default compiler set(CMAKE_CXX_STANDARD 11) +# Optional Flatbuffer support +set(BUILD_FLATBUFFER OFF CACHE BOOLEAN "Build flatbuffer versions of libraries") + # Set a default build type if none was specified set(default_build_type "Release") if(EXISTS "${CMAKE_SOURCE_DIR}/.git") @@ -84,6 +87,48 @@ set(OSI_PROTO_FILES ) protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES}) +set(FLAT_HEADERS "") +if(BUILD_FLATBUFFER) + set(FLAT_FBS "") + add_subdirectory("flatbuffers" + ${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build + EXCLUDE_FROM_ALL) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/descriptor.fbs" "namespace osi3;") + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include") + foreach (proto ${OSI_PROTO_FILES}) + get_filename_component(proto_base ${proto} NAME_WE) + set(fbs "${proto_base}.fbs") + add_custom_command( + OUTPUT "${fbs}" + COMMAND $ -o "${CMAKE_CURRENT_BINARY_DIR}" --proto "${CMAKE_CURRENT_SOURCE_DIR}/${proto}" + DEPENDS "${proto}" flatc + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + COMMENT "Convert ${proto} to ${fbs} using flatc" + ) + list(APPEND FLAT_FBS "${CMAKE_CURRENT_BINARY_DIR}/${fbs}") + endforeach() + + foreach (flat ${FLAT_FBS}) + get_filename_component(flat_base ${flat} NAME_WE) + set(fbs "${flat_base}.fbs") + set(fbh "${flat_base}_generated.h") + add_custom_command( + OUTPUT "include/${fbh}" + COMMAND $ -o "${CMAKE_CURRENT_BINARY_DIR}/include" --cpp --gen-mutable --gen-name-strings --scoped-enums "${fbs}" + DEPENDS "${FLAT_FBS}" flatc + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + COMMENT "Process ${fbs} to ${fbh} using flatc" + ) + list(APPEND FLAT_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/include/${fbh}") + endforeach() + + add_custom_target(${PROJECT_NAME}_fbs_build ALL DEPENDS "${FLAT_HEADERS}") + add_library(${PROJECT_NAME}_fbs INTERFACE) + target_sources(${PROJECT_NAME}_fbs INTERFACE "$") + target_include_directories(${PROJECT_NAME}_fbs INTERFACE $) + target_include_directories(${PROJECT_NAME}_fbs SYSTEM INTERFACE $/include>) + target_link_libraries(${PROJECT_NAME}_fbs INTERFACE flatbuffers) +endif() add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS}) target_include_directories(${PROJECT_NAME}_static @@ -168,7 +213,7 @@ install(FILES COMPONENT dev) # Header files -install(FILES ${PROTO_HEADERS} +install(FILES ${PROTO_HEADERS} ${FLAT_HEADERS} DESTINATION "${INSTALL_INCLUDE_DIR}") # Install the export set for use with the install-tree diff --git a/flatbuffers b/flatbuffers new file mode 160000 index 000000000..6df40a247 --- /dev/null +++ b/flatbuffers @@ -0,0 +1 @@ +Subproject commit 6df40a2471737b27271bdd9b900ab5f3aec746c7 From 32738408042b5ae81b78f27a4967e924ef7da34a Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Wed, 22 Jul 2020 21:32:25 +0200 Subject: [PATCH 2/3] Fix include and source file distribution issues Signed-off-by: Pierre R. Mai --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ce8930a4..f49ebf6da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,7 @@ if(BUILD_FLATBUFFER) EXCLUDE_FROM_ALL) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/descriptor.fbs" "namespace osi3;") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include") + list(APPEND FLAT_FBS "${CMAKE_CURRENT_BINARY_DIR}/descriptor.fbs") foreach (proto ${OSI_PROTO_FILES}) get_filename_component(proto_base ${proto} NAME_WE) set(fbs "${proto_base}.fbs") @@ -124,7 +125,6 @@ if(BUILD_FLATBUFFER) add_custom_target(${PROJECT_NAME}_fbs_build ALL DEPENDS "${FLAT_HEADERS}") add_library(${PROJECT_NAME}_fbs INTERFACE) - target_sources(${PROJECT_NAME}_fbs INTERFACE "$") target_include_directories(${PROJECT_NAME}_fbs INTERFACE $) target_include_directories(${PROJECT_NAME}_fbs SYSTEM INTERFACE $/include>) target_link_libraries(${PROJECT_NAME}_fbs INTERFACE flatbuffers) From 5e9d0d65c45249df4be154f8a637b1aae8b83bcf Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Wed, 25 Aug 2021 11:52:54 +0200 Subject: [PATCH 3/3] Fix missing protobuf include path for flatc conversion Signed-off-by: Pierre R. Mai --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f49ebf6da..1acc23fcf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,7 +101,7 @@ if(BUILD_FLATBUFFER) set(fbs "${proto_base}.fbs") add_custom_command( OUTPUT "${fbs}" - COMMAND $ -o "${CMAKE_CURRENT_BINARY_DIR}" --proto "${CMAKE_CURRENT_SOURCE_DIR}/${proto}" + COMMAND $ -I "${PROTOBUF_IMPORT_DIRS}" -o "${CMAKE_CURRENT_BINARY_DIR}" --proto "${CMAKE_CURRENT_SOURCE_DIR}/${proto}" DEPENDS "${proto}" flatc WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMENT "Convert ${proto} to ${fbs} using flatc"