• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1set(ENABLE_NATIVE_FLATBUFFER "off")
2if(EXISTS ${TOP_DIR}/mindspore/lite/providers/flatbuffer/native_flatbuffer.cfg)
3    set(ENABLE_NATIVE_FLATBUFFER on)
4endif()
5if(ENABLE_NATIVE_FLATBUFFER)
6    file(STRINGS ${TOP_DIR}/mindspore/lite/providers/flatbuffer/native_flatbuffer.cfg native_flatbuffer_path)
7    set(FLATC "${native_flatbuffer_path}/bin")
8    set(FLAT_BUFFERS "")
9    set(flatbuffers_INC "${native_flatbuffer_path}/common")
10    if(EXISTS ${native_flatbuffer_path}/template)
11        set(FLATBUFFER_TEMPALTE "${native_flatbuffer_path}/template")
12    endif()
13    include_directories(${flatbuffers_INC})
14
15else()
16    if(MSVC)
17        set(flatbuffers_CXXFLAGS "/DWIN32 /D_WINDOWS /W3 /GR /EHsc")
18        set(flatbuffers_CFLAGS "${CMAKE_C_FLAGS}")
19        set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
20        set(_ms_tmp_CMAKE_STATIC_LIBRARY_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
21        # flatbuffers.lib cimplied by msvc
22        set(CMAKE_STATIC_LIBRARY_PREFIX "")
23    else()
24        set(flatbuffers_CXXFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong -Wno-error=unused-but-set-variable")
25        set(flatbuffers_CFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong -Wno-error=unused-but-set-variable")
26    endif()
27
28    if(WIN32)
29        set(flatbuffers_USE_STATIC_LIBS ON)
30    endif()
31    if(ENABLE_GITEE_EULER)
32        set(GIT_REPOSITORY "https://gitee.com/src-openeuler/flatbuffers.git")
33        set(GIT_TAG "openEuler-22.03-LTS")
34        set(SHA256 "d94ef2fb0c22198c7ffe2a6044e864bd467ca70b8cfdc52720dc94313321777b")
35        set(FLATBUFFER_SRC "${CMAKE_BINARY_DIR}/_deps/flatbuffers-src")
36        set(FLATBUFFER_DIR "${FLATBUFFER_SRC}/flatbuffers-2.0.0")
37        __download_pkg_with_git(flatbuffers ${GIT_REPOSITORY} ${GIT_TAG} ${SHA256})
38        execute_process(COMMAND tar -xf ${FLATBUFFER_SRC}/v2.0.0.tar.gz WORKING_DIRECTORY ${FLATBUFFER_SRC})
39
40        foreach(_SUBMODULE_FILE ${PKG_SUBMODULES})
41            STRING(REGEX REPLACE "(.+)_(.+)" "\\1" _SUBMODEPATH ${_SUBMODULE_FILE})
42            STRING(REGEX REPLACE "(.+)/(.+)" "\\2" _SUBMODENAME ${_SUBMODEPATH})
43            file(GLOB ${pkg_name}_INSTALL_SUBMODULE ${_SUBMODULE_FILE}/*)
44            file(COPY ${${pkg_name}_INSTALL_SUBMODULE} DESTINATION ${${pkg_name}_SOURCE_DIR}/3rdparty/${_SUBMODENAME})
45        endforeach()
46    else()
47    if(ENABLE_GITEE)
48        set(REQ_URL "https://gitee.com/mirrors/flatbuffers/repository/archive/v2.0.0.tar.gz")
49        set(SHA256 "3d1eabe298ddac718de34d334aefc22486064dcd8e7a367a809d87393d59ac5a")
50    else()
51        set(REQ_URL "https://github.com/google/flatbuffers/archive/v2.0.0.tar.gz")
52        set(SHA256 "9ddb9031798f4f8754d00fca2f1a68ecf9d0f83dfac7239af1311e4fd9a565c4")
53    endif()
54    endif()
55
56    if(APPLE)
57        set(flatbuffers_CXXFLAGS "${flatbuffers_CXXFLAGS} -Wno-deprecated")
58    endif()
59    if(APPLE)
60        mindspore_add_pkg(flatbuffers
61                VER 2.0.0
62                LIBS flatbuffers
63                EXE flatc
64                URL ${REQ_URL}
65                SHA256 ${SHA256}
66                CMAKE_OPTION -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib)
67    else()
68        if(TARGET_AOS_ARM)
69            mindspore_add_pkg(flatbuffers
70                    VER 2.0.0
71                    LIBS flatbuffers
72                    EXE flatc
73                    URL ${REQ_URL}
74                    SHA256 ${SHA256}
75                    CMAKE_OPTION -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++
76                    -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release)
77        else()
78            mindspore_add_pkg(flatbuffers
79                    VER 2.0.0
80                    LIBS flatbuffers
81                    EXE flatc
82                    URL ${REQ_URL}
83                    SHA256 ${SHA256}
84                    DIR ${FLATBUFFER_DIR}
85                    CMAKE_OPTION -DCMAKE_C_COMPILER=${FLATC_GCC_COMPILER} -DCMAKE_CXX_COMPILER=${FLATC_GXX_COMPILER}
86                    -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release)
87        endif()
88    endif()
89
90    include_directories(${flatbuffers_INC})
91    add_library(mindspore::flatbuffers ALIAS flatbuffers::flatbuffers)
92    add_executable(mindspore::flatc ALIAS flatbuffers::flatc)
93endif()
94
95# recover original value
96if(MSVC)
97    set(CMAKE_STATIC_LIBRARY_PREFIX, ${_ms_tmp_CMAKE_STATIC_LIBRARY_PREFIX})
98endif()
99
100function(ms_build_flatbuffers source_schema_files
101                              source_schema_dirs
102                              custom_target_name
103                              generated_output_dir)
104
105    set(total_schema_dirs "")
106    set(total_generated_files "")
107    set(FLATC mindspore::flatc)
108    foreach(schema_dir ${source_schema_dirs})
109        set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
110    endforeach()
111
112    foreach(schema IN LISTS ${source_schema_files})
113        get_filename_component(filename ${schema} NAME_WE)
114        if(NOT ${generated_output_dir} STREQUAL "")
115            set(generated_file ${generated_output_dir}/${filename}_generated.h)
116            add_custom_command(
117                    OUTPUT ${generated_file}
118                    COMMAND ${FLATC} --gen-mutable
119                    --reflect-names --gen-object-api -o ${generated_output_dir}
120                    ${total_schema_dirs}
121                    -c -b --reflect-types ${schema}
122                    DEPENDS ${FLATC} ${schema}
123                    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
124                    COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
125            list(APPEND total_generated_files ${generated_file})
126        endif()
127    endforeach()
128
129    add_custom_target(${custom_target_name} ALL
130            DEPENDS ${total_generated_files})
131
132    if(NOT ${generated_output_dir} STREQUAL "")
133        include_directories(${generated_output_dir})
134        set_property(TARGET ${custom_target_name}
135                PROPERTY GENERATED_OUTPUT_DIR
136                ${generated_output_dir})
137    endif()
138endfunction()
139
140if(ENABLE_NATIVE_FLATBUFFER)
141    function(ms_build_flatbuffers_lite
142            source_schema_files source_schema_dirs custom_target_name generated_output_dir if_inner)
143        set(total_schema_dirs "")
144        set(total_generated_files "")
145        foreach(schema_dir ${source_schema_dirs})
146            set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
147        endforeach()
148        file(MAKE_DIRECTORY ${generated_output_dir})
149        foreach(schema IN LISTS ${source_schema_files})
150            get_filename_component(filename ${schema} NAME_WE)
151            if(NOT ${generated_output_dir} STREQUAL "")
152                set(generated_file ${generated_output_dir}/${filename}_generated.h)
153                if(if_inner MATCHES "inner")
154                    add_custom_command(
155                            OUTPUT ${generated_file}
156                            COMMAND ${FLATC} --template ${FLATBUFFER_TEMPALTE} --cpp
157                            -o ${generated_output_dir}
158                            ${schema}
159                            DEPENDS ${FLATC} ${schema}
160                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
161                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
162                else()
163                    add_custom_command(
164                            OUTPUT ${generated_file}
165                            COMMAND ${FLATC} --template ${FLATBUFFER_TEMPALTE} --cpp
166                            -o ${generated_output_dir}
167                            ${schema}
168                            DEPENDS ${FLATC} ${schema}
169                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
170                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
171                endif()
172                list(APPEND total_generated_files ${generated_file})
173            endif()
174        endforeach()
175
176        add_custom_target(${custom_target_name} ALL
177                DEPENDS ${total_generated_files})
178
179        if(NOT ${generated_output_dir} STREQUAL "")
180            include_directories(${generated_output_dir})
181            set_property(TARGET ${custom_target_name}
182                    PROPERTY GENERATED_OUTPUT_DIR
183                    ${generated_output_dir})
184        endif()
185    endfunction()
186else()
187    function(ms_build_flatbuffers_lite
188      source_schema_files source_schema_dirs custom_target_name generated_output_dir if_inner)
189
190        set(total_schema_dirs "")
191        set(total_generated_files "")
192        set(FLATC mindspore::flatc)
193        foreach(schema_dir ${source_schema_dirs})
194            set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
195        endforeach()
196
197        foreach(schema IN LISTS ${source_schema_files})
198            get_filename_component(filename ${schema} NAME_WE)
199            if(NOT ${generated_output_dir} STREQUAL "")
200                set(generated_file ${generated_output_dir}/${filename}_generated.h)
201                if(if_inner MATCHES "inner")
202                    add_custom_command(
203                            OUTPUT ${generated_file}
204                            COMMAND ${FLATC} --gen-mutable
205                            --reflect-names --gen-object-api -o ${generated_output_dir}
206                            ${total_schema_dirs}
207                            -c -b --reflect-types ${schema}
208                            DEPENDS ${FLATC} ${schema}
209                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
210                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
211                else()
212                    add_custom_command(
213                            OUTPUT ${generated_file}
214                            COMMAND ${FLATC} -o ${generated_output_dir}
215                            ${total_schema_dirs}
216                            -c -b  ${schema}
217                            DEPENDS ${FLATC} ${schema}
218                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
219                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
220                endif()
221                list(APPEND total_generated_files ${generated_file})
222            endif()
223        endforeach()
224
225        add_custom_target(${custom_target_name} ALL
226                DEPENDS ${total_generated_files})
227
228        if(NOT ${generated_output_dir} STREQUAL "")
229            include_directories(${generated_output_dir})
230            set_property(TARGET ${custom_target_name}
231                    PROPERTY GENERATED_OUTPUT_DIR
232                    ${generated_output_dir})
233        endif()
234    endfunction()
235endif()