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