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()