Imported Upstream version 1.19.0
[platform/core/ml/nnfw.git] / infra / cmake / packages / FlatBuffers-1.12 / FlatBuffersConfig.cmake
1 function(_FlatBuffers_import)
2   find_package(Flatbuffers QUIET)
3   set(FlatBuffers_FOUND ${Flatbuffers_FOUND} PARENT_SCOPE)
4 endfunction(_FlatBuffers_import)
5
6 function(_FlatBuffers_build)
7   if(NOT BUILD_FLATBUFFERS)
8     message(STATUS "FlatBuffersConfig !BUILD_FLATBUFFERS")
9     return()
10   endif(NOT BUILD_FLATBUFFERS)
11
12   nnas_find_package(FlatBuffersSource EXACT 1.12 QUIET)
13
14   if(NOT FlatBuffersSource_FOUND)
15     # Source is not available
16     message(STATUS "FlatBuffersConfig !FlatBuffersSource_FOUND")
17     return()
18   endif(NOT FlatBuffersSource_FOUND)
19
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")
23   endif()
24
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")
34
35 endfunction(_FlatBuffers_build)
36
37 _FlatBuffers_build()
38 _FlatBuffers_import()
39
40 if(FlatBuffers_FOUND)
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)
46
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)
50
51     foreach(schema ${ARGN})
52       get_filename_component(schema_fn "${schema}" NAME)
53       get_filename_component(dir "${schema}" DIRECTORY)
54
55       get_filename_component(schema_fn_we "${schema_fn}" NAME_WE)
56
57       list(APPEND SCHEMA_FILES "${abs_schema_dir}/${schema}")
58       list(APPEND OUTPUT_FILES "${abs_output_dir}/${schema_fn_we}_generated.h")
59     endforeach()
60
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}"
66                        ${SCHEMA_FILES}
67                        DEPENDS flatbuffers::flatc)
68
69     set(${PREFIX}_SOURCES ${OUTPUT_FILES} PARENT_SCOPE)
70     set(${PREFIX}_INCLUDE_DIRS ${abs_output_dir} PARENT_SCOPE)
71   endfunction(FlatBuffers_Generate)
72
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})
77
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)
82
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)
86
87     # Let's reset list variables before using them
88     # NOTE THIS DOES NOT AFFECT parent scope
89     unset(SCHEMA_FILES)
90     unset(OUTPUT_FILES)
91
92     foreach(schema ${ARG_SCHEMA_FILES})
93       get_filename_component(schema_fn "${schema}" NAME)
94       get_filename_component(dir "${schema}" DIRECTORY)
95
96       get_filename_component(schema_fn_we "${schema_fn}" NAME_WE)
97
98       list(APPEND SCHEMA_FILES "${abs_schema_dir}/${schema}")
99       list(APPEND OUTPUT_FILES "${abs_output_dir}/${schema_fn_we}_generated.h")
100     endforeach()
101
102     # Generate headers
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}"
108                                ${SCHEMA_FILES}
109                        DEPENDS ${SCHEMA_FILES}
110                        COMMENT "Generate '${TGT}' headers")
111
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)