aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Cheng <kevin.cheng@arm.com>2021-10-20 12:12:02 -0700
committerKevin Cheng <kevin.cheng@arm.com>2021-10-26 08:27:53 -0700
commite6563f52231c603b409638b22530d016757542c8 (patch)
tree43700371a56ce6b23052924b59c4e5ab43f286ca
parentb97cb1d46690321235f814e5a52cb8186380bce3 (diff)
downloadserialization_lib-e6563f52231c603b409638b22530d016757542c8.tar.gz
Bring back TosaVersion struct
- check fails only when major/minor mismatches - dump warning if major/minor matches but patch/draft mismatches Signed-off-by: Kevin Cheng <kevin.cheng@arm.com> Change-Id: I0464f1018faa69b81fa93d42e51e1afd7412977a
-rw-r--r--include/tosa_serialization_handler.h62
-rw-r--r--python/tosa_serializer.py1
-rw-r--r--src/tosa_serialization_handler.cpp33
3 files changed, 75 insertions, 21 deletions
diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h
index 7fd8282..61c02db 100644
--- a/include/tosa_serialization_handler.h
+++ b/include/tosa_serialization_handler.h
@@ -26,6 +26,7 @@
#include <string>
#include <vector>
+// Keep version number in sync with the version default value with schema/tosa.fbs
#define TOSA_VERSION_MAJOR 0
#define TOSA_VERSION_MINOR 23
#define TOSA_VERSION_PATCH 0
@@ -47,6 +48,62 @@ enum tosa_err_t
NUM_TOSA_ERROR
};
+struct TosaVersion
+{
+ int32_t _major;
+ int32_t _minor;
+ int32_t _patch;
+ bool _draft;
+
+ enum class compat_t
+ {
+ COMPLETELY_COMPATIBLE,
+ PARTIALLY_COMPATIBLE,
+ NOT_COMPATIBLE
+ };
+
+ TosaVersion() = default;
+ TosaVersion(int32_t major, int32_t minor, int32_t patch, bool draft)
+ {
+ set_version(major, minor, patch, draft);
+ }
+
+ void set_version(int32_t major, int32_t minor, int32_t patch, bool draft)
+ {
+ _major = major;
+ _minor = minor;
+ _patch = patch;
+ _draft = draft;
+ }
+
+ std::string to_string() const
+ {
+ std::string str;
+ str += std::to_string(_major) + ".";
+ str += std::to_string(_minor) + ".";
+ str += std::to_string(_patch);
+ if (_draft)
+ str += "d";
+ return str;
+ }
+
+ compat_t is_compatible(const TosaVersion& rhs) const
+ {
+ if (rhs._major == _major && rhs._minor == _minor)
+ {
+ if (rhs._patch == _patch && rhs._draft == _draft)
+ {
+ return TosaVersion::compat_t::COMPLETELY_COMPATIBLE;
+ }
+ else
+ {
+ return TosaVersion::compat_t::PARTIALLY_COMPATIBLE;
+ }
+ }
+ return TosaVersion::compat_t::NOT_COMPATIBLE;
+ }
+};
+
class TosaSerializationHandler;
class TosaSerializationTensor
@@ -247,7 +304,7 @@ public:
static tosa_err_t ConvertU8toBool(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<bool>& out);
// version
- const std::string& GetVersionStr()
+ const TosaVersion& GetVersion()
{
return _version;
}
@@ -296,10 +353,9 @@ protected:
tosa_err_t Clear();
tosa_err_t Deserialize(const uint8_t* buf);
tosa_err_t Serialize();
- std::string VersionToStr(int32_t major, int32_t minor, int32_t patch, bool draft);
private:
- std::string _version; /* version string */
+ TosaVersion _version; /* version struct */
flatbuffers::FlatBufferBuilder _builder; /* flatbuffer builder */
flatbuffers::Parser _parser; /* flatbuffer parser, used for json parsing */
std::vector<TosaSerializationBasicBlock*> _blocks; /* array structure to store all TosaSerializationBasicBlock */
diff --git a/python/tosa_serializer.py b/python/tosa_serializer.py
index f0d7c63..d85494d 100644
--- a/python/tosa_serializer.py
+++ b/python/tosa_serializer.py
@@ -35,6 +35,7 @@ from tosa_ref_run import TosaReturnCode
import tosa
+# Keep version number in sync with the version default value with schema/tosa.fbs
TOSA_VERSION_MAJOR = 0
TOSA_VERSION_MINOR = 23
TOSA_VERSION_PATCH = 0
diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp
index fced242..a382542 100644
--- a/src/tosa_serialization_handler.cpp
+++ b/src/tosa_serialization_handler.cpp
@@ -148,7 +148,7 @@ TosaSerializationBasicBlock::~TosaSerializationBasicBlock()
TosaSerializationHandler::TosaSerializationHandler()
{
_schemaLoaded = false;
- _version = VersionToStr(TOSA_VERSION_MAJOR, TOSA_VERSION_MINOR, TOSA_VERSION_PATCH, TOSA_VERSION_DRAFT);
+ _version = TosaVersion(TOSA_VERSION_MAJOR, TOSA_VERSION_MINOR, TOSA_VERSION_PATCH, TOSA_VERSION_DRAFT);
}
TosaSerializationHandler::~TosaSerializationHandler()
@@ -319,17 +319,6 @@ tosa_err_t TosaSerializationHandler::Clear()
return TOSA_OK;
}
-std::string TosaSerializationHandler::VersionToStr(int32_t major, int32_t minor, int32_t patch, bool draft)
-{
- std::string str;
- str += std::to_string(major) + ".";
- str += std::to_string(minor) + ".";
- str += std::to_string(patch);
- if (draft)
- str += "d";
- return str;
-}
-
tosa_err_t TosaSerializationHandler::Deserialize(const uint8_t* buf)
{
auto fb_tosa_graph = GetTosaGraph(buf);
@@ -353,14 +342,22 @@ tosa_err_t TosaSerializationHandler::Deserialize(const uint8_t* buf)
// erase container
Clear();
- std::string read_version = VersionToStr(fb_tosa_version->_major(), fb_tosa_version->_minor(),
- fb_tosa_version->_patch(), fb_tosa_version->_draft());
+ TosaVersion read_version(fb_tosa_version->_major(), fb_tosa_version->_minor(), fb_tosa_version->_patch(),
+ fb_tosa_version->_draft());
- if (read_version != GetVersionStr())
+ TosaVersion::compat_t is_compat = read_version.is_compatible(GetVersion());
+ switch (is_compat)
{
- printf("Read flatbuffer version %s doesn't match serializer version %s\n", read_version.c_str(),
- GetVersionStr().c_str());
- return TOSA_VERSION_MISMATCH;
+ case TosaVersion::compat_t::COMPLETELY_COMPATIBLE:
+ break;
+ case TosaVersion::compat_t::PARTIALLY_COMPATIBLE:
+ printf("WARNING: Read flatbuffer version %s is partially compatible with serializer version %s\n",
+ read_version.to_string().c_str(), GetVersion().to_string().c_str());
+ break;
+ case TosaVersion::compat_t::NOT_COMPATIBLE:
+ printf("ERROR: Read flatbuffer version %s is not compatible with serializer version %s\n",
+ read_version.to_string().c_str(), GetVersion().to_string().c_str());
+ return TOSA_VERSION_MISMATCH;
}
for (size_t i = 0; i < fb_tosa_blocks->size(); i++)