• 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
32    if(ENABLE_GITEE OR ENABLE_GITEE_EULER) # Channel GITEE_EULER is NOT supported now, use GITEE instead.
33        set(REQ_URL "https://gitee.com/mirrors/flatbuffers/repository/archive/v24.3.25.tar.gz")
34        set(SHA256 "3767fc37c8c3c500405052f2180f0f9a65e36512b07b78834a369c563fe3c644")
35    else()
36        set(REQ_URL "https://github.com/google/flatbuffers/archive/v24.3.25.tar.gz")
37        set(SHA256 "4157c5cacdb59737c5d627e47ac26b140e9ee28b1102f812b36068aab728c1ed")
38    endif()
39
40    if(APPLE)
41        set(flatbuffers_CXXFLAGS "${flatbuffers_CXXFLAGS} -Wno-deprecated")
42    endif()
43    if(APPLE)
44        mindspore_add_pkg(flatbuffers
45                VER 24.3.35
46                LIBS flatbuffers
47                EXE flatc
48                URL ${REQ_URL}
49                SHA256 ${SHA256}
50                CMAKE_OPTION -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib)
51    else()
52        if(TARGET_AOS_ARM)
53            mindspore_add_pkg(flatbuffers
54                    VER 24.3.25
55                    LIBS flatbuffers
56                    EXE flatc
57                    URL ${REQ_URL}
58                    SHA256 ${SHA256}
59                    CMAKE_OPTION -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++
60                    -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release)
61        else()
62            mindspore_add_pkg(flatbuffers
63                    VER 24.3.25
64                    LIBS flatbuffers
65                    EXE flatc
66                    URL ${REQ_URL}
67                    SHA256 ${SHA256}
68                    DIR ${FLATBUFFER_DIR}
69                    CMAKE_OPTION -DCMAKE_C_COMPILER=${FLATC_GCC_COMPILER} -DCMAKE_CXX_COMPILER=${FLATC_GXX_COMPILER}
70                    -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release)
71        endif()
72    endif()
73
74    include_directories(${flatbuffers_INC})
75    add_library(mindspore::flatbuffers ALIAS flatbuffers::flatbuffers)
76    add_executable(mindspore::flatc ALIAS flatbuffers::flatc)
77endif()
78
79# recover original value
80if(MSVC)
81    set(CMAKE_STATIC_LIBRARY_PREFIX, ${_ms_tmp_CMAKE_STATIC_LIBRARY_PREFIX})
82endif()
83
84function(ms_build_flatbuffers source_schema_files
85                              source_schema_dirs
86                              custom_target_name
87                              generated_output_dir)
88
89    set(total_schema_dirs "")
90    set(total_generated_files "")
91    set(FLATC mindspore::flatc)
92    foreach(schema_dir ${source_schema_dirs})
93        set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
94    endforeach()
95
96    foreach(schema IN LISTS ${source_schema_files})
97        get_filename_component(filename ${schema} NAME_WE)
98        if(NOT ${generated_output_dir} STREQUAL "")
99            set(generated_file ${generated_output_dir}/${filename}_generated.h)
100            add_custom_command(
101                    OUTPUT ${generated_file}
102                    COMMAND ${FLATC} --gen-mutable
103                    --reflect-names --gen-object-api -o ${generated_output_dir}
104                    ${total_schema_dirs}
105                    -c -b --reflect-types ${schema}
106                    DEPENDS ${FLATC} ${schema}
107                    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
108                    COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
109            list(APPEND total_generated_files ${generated_file})
110        endif()
111    endforeach()
112
113    add_custom_target(${custom_target_name} ALL
114            DEPENDS ${total_generated_files})
115
116    if(NOT ${generated_output_dir} STREQUAL "")
117        include_directories(${generated_output_dir})
118        set_property(TARGET ${custom_target_name}
119                PROPERTY GENERATED_OUTPUT_DIR
120                ${generated_output_dir})
121    endif()
122endfunction()
123
124if(ENABLE_NATIVE_FLATBUFFER)
125    function(ms_build_flatbuffers_lite
126            source_schema_files source_schema_dirs custom_target_name generated_output_dir if_inner)
127        set(total_schema_dirs "")
128        set(total_generated_files "")
129        foreach(schema_dir ${source_schema_dirs})
130            set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
131        endforeach()
132        file(MAKE_DIRECTORY ${generated_output_dir})
133        foreach(schema IN LISTS ${source_schema_files})
134            get_filename_component(filename ${schema} NAME_WE)
135            if(NOT ${generated_output_dir} STREQUAL "")
136                set(generated_file ${generated_output_dir}/${filename}_generated.h)
137                if(if_inner MATCHES "inner")
138                    add_custom_command(
139                            OUTPUT ${generated_file}
140                            COMMAND ${FLATC} --template ${FLATBUFFER_TEMPALTE} --cpp
141                            -o ${generated_output_dir}
142                            ${schema}
143                            DEPENDS ${FLATC} ${schema}
144                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
145                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
146                else()
147                    add_custom_command(
148                            OUTPUT ${generated_file}
149                            COMMAND ${FLATC} --template ${FLATBUFFER_TEMPALTE} --cpp
150                            -o ${generated_output_dir}
151                            ${schema}
152                            DEPENDS ${FLATC} ${schema}
153                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
154                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
155                endif()
156                list(APPEND total_generated_files ${generated_file})
157            endif()
158        endforeach()
159
160        add_custom_target(${custom_target_name} ALL
161                DEPENDS ${total_generated_files})
162
163        if(NOT ${generated_output_dir} STREQUAL "")
164            include_directories(${generated_output_dir})
165            set_property(TARGET ${custom_target_name}
166                    PROPERTY GENERATED_OUTPUT_DIR
167                    ${generated_output_dir})
168        endif()
169    endfunction()
170else()
171    function(ms_build_flatbuffers_lite
172      source_schema_files source_schema_dirs custom_target_name generated_output_dir if_inner)
173
174        set(total_schema_dirs "")
175        set(total_generated_files "")
176        set(FLATC mindspore::flatc)
177        foreach(schema_dir ${source_schema_dirs})
178            set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
179        endforeach()
180
181        foreach(schema IN LISTS ${source_schema_files})
182            get_filename_component(filename ${schema} NAME_WE)
183            if(NOT ${generated_output_dir} STREQUAL "")
184                set(generated_file ${generated_output_dir}/${filename}_generated.h)
185                if(if_inner MATCHES "inner")
186                    add_custom_command(
187                            OUTPUT ${generated_file}
188                            COMMAND ${FLATC} --gen-mutable
189                            --reflect-names --gen-object-api -o ${generated_output_dir}
190                            ${total_schema_dirs}
191                            -c -b --reflect-types ${schema}
192                            DEPENDS ${FLATC} ${schema}
193                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
194                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
195                else()
196                    add_custom_command(
197                            OUTPUT ${generated_file}
198                            COMMAND ${FLATC} -o ${generated_output_dir}
199                            ${total_schema_dirs}
200                            -c -b  ${schema}
201                            DEPENDS ${FLATC} ${schema}
202                            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
203                            COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM)
204                endif()
205                list(APPEND total_generated_files ${generated_file})
206            endif()
207        endforeach()
208
209        add_custom_target(${custom_target_name} ALL
210                DEPENDS ${total_generated_files})
211
212        if(NOT ${generated_output_dir} STREQUAL "")
213            include_directories(${generated_output_dir})
214            set_property(TARGET ${custom_target_name}
215                    PROPERTY GENERATED_OUTPUT_DIR
216                    ${generated_output_dir})
217        endif()
218    endfunction()
219endif()