1 function(_FlatBuffers_import)
2 find_package(Flatbuffers QUIET)
3 set(FlatBuffers_FOUND ${Flatbuffers_FOUND} PARENT_SCOPE)
4 endfunction(_FlatBuffers_import)
6 function(_FlatBuffers_build)
7 if(NOT BUILD_FLATBUFFERS)
8 message(STATUS "FlatBuffersConfig !BUILD_FLATBUFFERS")
10 endif(NOT BUILD_FLATBUFFERS)
12 nnas_find_package(FlatBuffersSource EXACT 1.12 QUIET)
14 if(NOT FlatBuffersSource_FOUND)
15 # Source is not available
16 message(STATUS "FlatBuffersConfig !FlatBuffersSource_FOUND")
18 endif(NOT FlatBuffersSource_FOUND)
20 set(ADDITIONAL_CXX_FLAGS "")
21 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0)
22 set(ADDITIONAL_CXX_FLAGS "-Wno-error=class-memaccess")
25 nnas_include(ExternalBuildTools)
26 ExternalBuild_CMake(CMAKE_DIR ${FlatBuffersSource_DIR}
27 BUILD_DIR ${CMAKE_BINARY_DIR}/externals/FLATBUFFERS-1.12/build
28 INSTALL_DIR ${EXT_OVERLAY_DIR}/FLATBUFFERS-1.12
29 BUILD_FLAGS ${ADDITIONAL_CXX_FLAGS}
30 IDENTIFIER "1.12-fix3"
31 EXTRA_OPTS "-DFLATBUFFERS_BUILD_TESTS:BOOL=OFF"
32 "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON"
33 PKG_NAME "FLATBUFFERS-1.12")
35 endfunction(_FlatBuffers_build)
41 if(NOT TARGET flatbuffers-1.12)
42 add_library(flatbuffers-1.12 INTERFACE)
43 target_link_libraries(flatbuffers-1.12 INTERFACE flatbuffers::flatbuffers)
44 message(STATUS "Found FlatBuffers-1.12: TRUE")
45 endif(NOT TARGET flatbuffers-1.12)
47 function(FlatBuffers_Generate PREFIX OUTPUT_DIR SCHEMA_DIR)
48 get_filename_component(abs_output_dir ${OUTPUT_DIR} ABSOLUTE)
49 get_filename_component(abs_schema_dir ${SCHEMA_DIR} ABSOLUTE)
51 foreach(schema ${ARGN})
52 get_filename_component(schema_fn "${schema}" NAME)
53 get_filename_component(dir "${schema}" DIRECTORY)
55 get_filename_component(schema_fn_we "${schema_fn}" NAME_WE)
57 list(APPEND SCHEMA_FILES "${abs_schema_dir}/${schema}")
58 list(APPEND OUTPUT_FILES "${abs_output_dir}/${schema_fn_we}_generated.h")
61 add_custom_command(OUTPUT ${OUTPUT_FILES}
62 COMMAND ${CMAKE_COMMAND} -E make_directory "${abs_output_dir}"
63 COMMAND "$<TARGET_FILE:flatbuffers::flatc>" -c --no-includes
64 --no-union-value-namespacing
65 --gen-object-api -o "${abs_output_dir}"
67 DEPENDS flatbuffers::flatc)
69 set(${PREFIX}_SOURCES ${OUTPUT_FILES} PARENT_SCOPE)
70 set(${PREFIX}_INCLUDE_DIRS ${abs_output_dir} PARENT_SCOPE)
71 endfunction(FlatBuffers_Generate)
73 function(FlatBuffers_Target TGT)
74 set(oneValueArgs OUTPUT_DIR SCHEMA_DIR INCLUDE_DIR)
75 set(multiValueArgs SCHEMA_FILES)
76 cmake_parse_arguments(ARG "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
78 # Use OUTPUT_DIR as INCLUDE_DIR if INCLUDE_DIR is not specified
79 if(NOT ARG_INCLUDE_DIR)
80 set(ARG_INCLUDE_DIR ${ARG_OUTPUT_DIR})
81 endif(NOT ARG_INCLUDE_DIR)
83 get_filename_component(abs_output_dir ${ARG_OUTPUT_DIR} ABSOLUTE)
84 get_filename_component(abs_include_dir ${ARG_INCLUDE_DIR} ABSOLUTE)
85 get_filename_component(abs_schema_dir ${ARG_SCHEMA_DIR} ABSOLUTE)
87 # Let's reset list variables before using them
88 # NOTE THIS DOES NOT AFFECT parent scope
92 foreach(schema ${ARG_SCHEMA_FILES})
93 get_filename_component(schema_fn "${schema}" NAME)
94 get_filename_component(dir "${schema}" DIRECTORY)
96 get_filename_component(schema_fn_we "${schema_fn}" NAME_WE)
98 list(APPEND SCHEMA_FILES "${abs_schema_dir}/${schema}")
99 list(APPEND OUTPUT_FILES "${abs_output_dir}/${schema_fn_we}_generated.h")
103 add_custom_command(OUTPUT ${OUTPUT_FILES}
104 COMMAND ${CMAKE_COMMAND} -E make_directory "${abs_output_dir}"
105 COMMAND "$<TARGET_FILE:flatbuffers::flatc>" -c --no-includes
106 --no-union-value-namespacing
107 --gen-object-api -o "${abs_output_dir}"
109 DEPENDS ${SCHEMA_FILES}
110 COMMENT "Generate '${TGT}' headers")
112 # NOTE This header-only library is deliberately declared as STATIC library
113 # to avoid possible scope issues related with generated files
114 add_library(${TGT} STATIC ${OUTPUT_FILES})
115 set_target_properties(${TGT} PROPERTIES LINKER_LANGUAGE CXX)
116 target_include_directories(${TGT} PUBLIC "${ARG_INCLUDE_DIR}")
117 target_link_libraries(${TGT} PUBLIC flatbuffers-1.12)
118 endfunction(FlatBuffers_Target)
119 endif(FlatBuffers_FOUND)