From f08956b10af531e382e1adf726f2196157f4caab Mon Sep 17 00:00:00 2001 From: Eric Kunze Date: Thu, 18 May 2023 01:13:41 +0000 Subject: Modify TOSA schema to force version to be written Previously if the values were the default, they would not be written to the file Signed-off-by: Eric Kunze Change-Id: Ibdf13d3ce672d3e8f062a7853d65a966ab5b0877 --- include/tosa_generated.h | 25 +++++++------- include/tosa_serialization_handler.h | 1 - python/tosa/Version.py | 14 ++++---- schema/tosa.fbs | 10 +++--- src/tosa_serialization_handler.cpp | 67 ------------------------------------ 5 files changed, 25 insertions(+), 92 deletions(-) diff --git a/include/tosa_generated.h b/include/tosa_generated.h index 72c1822..cbc6eb9 100644 --- a/include/tosa_generated.h +++ b/include/tosa_generated.h @@ -2120,16 +2120,16 @@ struct Version FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VT__DRAFT = 10 }; int32_t _major() const { - return GetField(VT__MAJOR, 0); + return GetField(VT__MAJOR, -1); } int32_t _minor() const { - return GetField(VT__MINOR, 70); + return GetField(VT__MINOR, -1); } int32_t _patch() const { - return GetField(VT__PATCH, 0); + return GetField(VT__PATCH, -1); } bool _draft() const { - return GetField(VT__DRAFT, 1) != 0; + return GetField(VT__DRAFT, 255) != 0; } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && @@ -2146,16 +2146,16 @@ struct VersionBuilder { flatbuffers::FlatBufferBuilder &fbb_; flatbuffers::uoffset_t start_; void add__major(int32_t _major) { - fbb_.AddElement(Version::VT__MAJOR, _major, 0); + fbb_.AddElement(Version::VT__MAJOR, _major, -1); } void add__minor(int32_t _minor) { - fbb_.AddElement(Version::VT__MINOR, _minor, 70); + fbb_.AddElement(Version::VT__MINOR, _minor, -1); } void add__patch(int32_t _patch) { - fbb_.AddElement(Version::VT__PATCH, _patch, 0); + fbb_.AddElement(Version::VT__PATCH, _patch, -1); } void add__draft(bool _draft) { - fbb_.AddElement(Version::VT__DRAFT, static_cast(_draft), 1); + fbb_.AddElement(Version::VT__DRAFT, static_cast(_draft), 255); } explicit VersionBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { @@ -2170,9 +2170,9 @@ struct VersionBuilder { inline flatbuffers::Offset CreateVersion( flatbuffers::FlatBufferBuilder &_fbb, - int32_t _major = 0, - int32_t _minor = 70, - int32_t _patch = 0, + int32_t _major = -1, + int32_t _minor = -1, + int32_t _patch = -1, bool _draft = true) { VersionBuilder builder_(_fbb); builder_.add__patch(_patch); @@ -2724,7 +2724,7 @@ struct TosaGraph FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && - VerifyOffset(verifier, VT_VERSION) && + VerifyOffsetRequired(verifier, VT_VERSION) && verifier.VerifyTable(version()) && VerifyOffset(verifier, VT_REGIONS) && verifier.VerifyVector(regions()) && @@ -2750,6 +2750,7 @@ struct TosaGraphBuilder { flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); + fbb_.Required(o, TosaGraph::VT_VERSION); return o; } }; diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h index 04dac52..1665bfa 100644 --- a/include/tosa_serialization_handler.h +++ b/include/tosa_serialization_handler.h @@ -408,7 +408,6 @@ protected: tosa_err_t Clear(); tosa_err_t Deserialize(const uint8_t* buf); tosa_err_t Serialize(); - TosaVersion ParseTosaSchemaVersion(std::string schema); private: TosaVersion _version; /* version struct */ diff --git a/python/tosa/Version.py b/python/tosa/Version.py index 692d76f..0abafaf 100644 --- a/python/tosa/Version.py +++ b/python/tosa/Version.py @@ -33,21 +33,21 @@ class Version(object): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) if o != 0: return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 + return -1 # Version def _minor(self): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) if o != 0: return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 70 + return -1 # Version def _patch(self): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) if o != 0: return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 + return -1 # Version def _draft(self): @@ -59,16 +59,16 @@ class Version(object): def VersionStart(builder): builder.StartObject(4) def Start(builder): return VersionStart(builder) -def VersionAdd_major(builder, Major): builder.PrependInt32Slot(0, Major, 0) +def VersionAdd_major(builder, Major): builder.PrependInt32Slot(0, Major, -1) def Add_major(builder, Major): return VersionAdd_major(builder, Major) -def VersionAdd_minor(builder, Minor): builder.PrependInt32Slot(1, Minor, 70) +def VersionAdd_minor(builder, Minor): builder.PrependInt32Slot(1, Minor, -1) def Add_minor(builder, Minor): return VersionAdd_minor(builder, Minor) -def VersionAdd_patch(builder, Patch): builder.PrependInt32Slot(2, Patch, 0) +def VersionAdd_patch(builder, Patch): builder.PrependInt32Slot(2, Patch, -1) def Add_patch(builder, Patch): return VersionAdd_patch(builder, Patch) -def VersionAdd_draft(builder, Draft): builder.PrependBoolSlot(3, Draft, 1) +def VersionAdd_draft(builder, Draft): builder.PrependBoolSlot(3, Draft, 255) def Add_draft(builder, Draft): return VersionAdd_draft(builder, Draft) def VersionEnd(builder): return builder.EndObject() diff --git a/schema/tosa.fbs b/schema/tosa.fbs index f7224fb..449c4ea 100644 --- a/schema/tosa.fbs +++ b/schema/tosa.fbs @@ -267,10 +267,10 @@ table FFTAttribute { } table Version { - _major: int32 = 0; - _minor: int32 = 70; - _patch: int32 = 0; - _draft: bool = true; + _major: int32 = -1; + _minor: int32 = -1; + _patch: int32 = -1; + _draft: bool = 255; } table TosaTensor { @@ -301,7 +301,7 @@ table TosaRegion { } table TosaGraph { - version:Version; + version:Version (required); regions:[TosaRegion]; // regions array } diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp index 25ac5df..bed79b2 100644 --- a/src/tosa_serialization_handler.cpp +++ b/src/tosa_serialization_handler.cpp @@ -194,56 +194,6 @@ TosaSerializationHandler::~TosaSerializationHandler() Clear(); // deallocate all basic blocks } -TosaVersion TosaSerializationHandler::ParseTosaSchemaVersion(std::string schema) -{ - // Parse all 4 version fields in schema file - static const char* keywords[4] = { "major: int32 = ", "minor: int32 = ", "patch: int32 = ", "draft: bool = " }; - string keyword_str[4]; - size_t search_pos = 0; - size_t keyword_pos; - size_t semicolon_pos; - // parse integer field first - for (int32_t i = 0; i < 4; i++) - { - keyword_pos = schema.find(keywords[i], search_pos); - if (keyword_pos == std::string::npos) - { - printf("ERROR: can't find keyword \"%s\" in schema\n", keywords[i]); - assert(0); - } - semicolon_pos = schema.find(';', keyword_pos); - if (keyword_pos == std::string::npos) - { - printf("ERROR: can't find ';' in schema\n"); - assert(0); - } - keyword_str[i] = - schema.substr(keyword_pos + strlen(keywords[i]), semicolon_pos - keyword_pos - strlen(keywords[i])); - search_pos = semicolon_pos; - } - - int32_t schema_major = 0; - int32_t schema_minor = 0; - int32_t schema_patch = 0; - bool schema_draft = false; - try - { - schema_major = stoi(keyword_str[0]); - schema_minor = stoi(keyword_str[1]); - schema_patch = stoi(keyword_str[2]); - schema_draft = (keyword_str[3] == "true") ? true : false; - } - catch (std::invalid_argument& e) - { - printf("ERROR: fail at stoi(): %s\n", e.what()); - assert(0); - } - - TosaVersion schema_version(schema_major, schema_minor, schema_patch, schema_draft); - - return schema_version; -} - tosa_err_t TosaSerializationHandler::LoadFileSchema(const char* schema_filename) { std::string schema; @@ -258,23 +208,6 @@ tosa_err_t TosaSerializationHandler::LoadFileSchema(const char* schema_filename) ok = _parser.Parse(schema.c_str()); - TosaVersion schema_version = ParseTosaSchemaVersion(schema); - - TosaVersion::compat_t is_compat = schema_version.is_compatible(GetVersion()); - switch (is_compat) - { - case TosaVersion::compat_t::COMPLETELY_COMPATIBLE: - break; - case TosaVersion::compat_t::PARTIALLY_COMPATIBLE: - printf("WARNING: Schema flatbuffer version %s is partially compatible with serializer version %s\n", - schema_version.to_string().c_str(), GetVersion().to_string().c_str()); - break; - case TosaVersion::compat_t::NOT_COMPATIBLE: - printf("ERROR: Schema flatbuffer version %s is not compatible with serializer version %s\n", - schema_version.to_string().c_str(), GetVersion().to_string().c_str()); - return TOSA_VERSION_MISMATCH; - } - if (!ok) { printf("Error parsing ISA schema file: %s\n", schema_filename); -- cgit v1.2.1