aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Kunze <eric.kunze@arm.com>2023-05-18 01:13:41 +0000
committerEric Kunze <eric.kunze@arm.com>2023-05-18 01:14:53 +0000
commitf08956b10af531e382e1adf726f2196157f4caab (patch)
treecdb9716676cc6185b37a655221d20556deb02b96
parentab8d234bdc64896297ceceb7b97ce74a783ac7ae (diff)
downloadserialization_lib-f08956b10af531e382e1adf726f2196157f4caab.tar.gz
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 <eric.kunze@arm.com> Change-Id: Ibdf13d3ce672d3e8f062a7853d65a966ab5b0877
-rw-r--r--include/tosa_generated.h25
-rw-r--r--include/tosa_serialization_handler.h1
-rw-r--r--python/tosa/Version.py14
-rw-r--r--schema/tosa.fbs10
-rw-r--r--src/tosa_serialization_handler.cpp67
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<int32_t>(VT__MAJOR, 0);
+ return GetField<int32_t>(VT__MAJOR, -1);
}
int32_t _minor() const {
- return GetField<int32_t>(VT__MINOR, 70);
+ return GetField<int32_t>(VT__MINOR, -1);
}
int32_t _patch() const {
- return GetField<int32_t>(VT__PATCH, 0);
+ return GetField<int32_t>(VT__PATCH, -1);
}
bool _draft() const {
- return GetField<uint8_t>(VT__DRAFT, 1) != 0;
+ return GetField<uint8_t>(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<int32_t>(Version::VT__MAJOR, _major, 0);
+ fbb_.AddElement<int32_t>(Version::VT__MAJOR, _major, -1);
}
void add__minor(int32_t _minor) {
- fbb_.AddElement<int32_t>(Version::VT__MINOR, _minor, 70);
+ fbb_.AddElement<int32_t>(Version::VT__MINOR, _minor, -1);
}
void add__patch(int32_t _patch) {
- fbb_.AddElement<int32_t>(Version::VT__PATCH, _patch, 0);
+ fbb_.AddElement<int32_t>(Version::VT__PATCH, _patch, -1);
}
void add__draft(bool _draft) {
- fbb_.AddElement<uint8_t>(Version::VT__DRAFT, static_cast<uint8_t>(_draft), 1);
+ fbb_.AddElement<uint8_t>(Version::VT__DRAFT, static_cast<uint8_t>(_draft), 255);
}
explicit VersionBuilder(flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
@@ -2170,9 +2170,9 @@ struct VersionBuilder {
inline flatbuffers::Offset<Version> 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<TosaGraph> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = flatbuffers::Offset<TosaGraph>(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);