diff options
Diffstat (limited to 'compiler/mio-circle')
-rw-r--r-- | compiler/mio-circle/CMakeLists.txt | 12 | ||||
-rw-r--r-- | compiler/mio-circle/include/mio_circle/Helper.h | 36 | ||||
-rw-r--r-- | compiler/mio-circle/src/Helper.cpp | 81 |
3 files changed, 127 insertions, 2 deletions
diff --git a/compiler/mio-circle/CMakeLists.txt b/compiler/mio-circle/CMakeLists.txt index 9c1126d6f..d24717343 100644 --- a/compiler/mio-circle/CMakeLists.txt +++ b/compiler/mio-circle/CMakeLists.txt @@ -1,13 +1,14 @@ -nnas_find_package(FlatBuffers QUIET) +nnas_find_package(FlatBuffers EXACT 2.0 QUIET) if(NOT FlatBuffers_FOUND) + message(STATUS "mio-circle skip: FlatBuffers 2.0 NOT FOUND") return() endif(NOT FlatBuffers_FOUND) message(STATUS "Build mio-circle: TRUE") # TODO Find a better way -set(SCHEMA_FILE "${NNAS_PROJECT_SOURCE_DIR}/nnpackage/schema/circle_schema.fbs") +set(SCHEMA_FILE "${NNAS_PROJECT_SOURCE_DIR}/res/CircleSchema/0.3/circle_schema.fbs") # NOTE Copy circle_schema.fbs as schema.fbs to generate "schema_generated.fbs" instead of "circle_schema_generated.fbs" add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/schema.fbs" @@ -26,3 +27,10 @@ FlatBuffers_Target(mio_circle # This example shows how to use "mio-circle" library add_executable(mio_circle_example example.cpp) target_link_libraries(mio_circle_example mio_circle) + +file(GLOB_RECURSE SOURCES "src/*.cpp") + +add_library(mio_circle_helper STATIC ${SOURCES}) +target_include_directories(mio_circle_helper PRIVATE src) +target_include_directories(mio_circle_helper PUBLIC include) +target_link_libraries(mio_circle_helper mio_circle) diff --git a/compiler/mio-circle/include/mio_circle/Helper.h b/compiler/mio-circle/include/mio_circle/Helper.h new file mode 100644 index 000000000..c0f8115fe --- /dev/null +++ b/compiler/mio-circle/include/mio_circle/Helper.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MIO_CIRCLE_HELPER_H__ +#define __MIO_CIRCLE_HELPER_H__ + +#include <mio/circle/schema_generated.h> + +namespace mio +{ +namespace circle +{ + +bool is_valid(const ::circle::OperatorCode *opcode); +bool is_custom(const ::circle::OperatorCode *opcode); +std::string opcode_name(const ::circle::OperatorCode *opcode); +const char *tensor_type(const ::circle::Tensor *tensor); +const char *tensor_name(const ::circle::Tensor *tensor); + +} // namespace circle +} // namespace mio + +#endif // __MIO_CIRCLE_HELPER_H__ diff --git a/compiler/mio-circle/src/Helper.cpp b/compiler/mio-circle/src/Helper.cpp new file mode 100644 index 000000000..6f30c8c10 --- /dev/null +++ b/compiler/mio-circle/src/Helper.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mio_circle/Helper.h" + +#include <sstream> + +namespace mio +{ +namespace circle +{ + +bool is_valid(const ::circle::OperatorCode *opcode) +{ + ::circle::BuiltinOperator code = opcode->builtin_code(); + return (::circle::BuiltinOperator_MIN <= code && code <= ::circle::BuiltinOperator_MAX); +} + +bool is_custom(const ::circle::OperatorCode *opcode) +{ + ::circle::BuiltinOperator code = opcode->builtin_code(); + return (code == ::circle::BuiltinOperator_CUSTOM); +} + +std::string opcode_name(const ::circle::OperatorCode *opcode) +{ + assert(opcode); + + if (!is_valid(opcode)) + { + std::ostringstream oss; + oss << "(invalid)"; + return oss.str(); + } + + if (is_custom(opcode)) + { + if (!opcode->custom_code()) + return "(invalid custom)"; + + std::string custom_op = "CUSTOM("; + custom_op += opcode->custom_code()->c_str(); + custom_op += ")"; + return custom_op; + } + + ::circle::BuiltinOperator code = opcode->builtin_code(); + return ::circle::EnumNameBuiltinOperator(code); +} + +const char *tensor_type(const ::circle::Tensor *tensor) +{ + return ::circle::EnumNameTensorType(tensor->type()); +} + +const char *tensor_name(const ::circle::Tensor *tensor) +{ + static const char *kEmptyTensorName = "(noname)"; + + auto name = tensor->name(); + if (name) + return name->c_str(); + + return kEmptyTensorName; +} + +} // namespace circle +} // namespace mio |