IVGCVSW-4901 Add semantic versioning to Parsers and TfLite Delegate

 * Added Version.hpp to all Parsers
 * Added Version.hpp to TfLite Delegate
 * Updated CMakeLists to use new versions
 * Added GetVersion method to parsers and TfLite Delegate

Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: If29e1e6d9e615f9095ec1c01ad47acfff40b1dd5
diff --git a/delegate/CMakeLists.txt b/delegate/CMakeLists.txt
index eda5b93..777702e 100644
--- a/delegate/CMakeLists.txt
+++ b/delegate/CMakeLists.txt
@@ -14,6 +14,7 @@
 list(APPEND armnnDelegate_sources
         include/armnn_delegate.hpp
         include/DelegateOptions.hpp
+        include/Version.hpp
         src/armnn_delegate.cpp
         src/armnn_external_delegate.cpp
         src/DelegateOptions.cpp
@@ -103,6 +104,8 @@
 
 target_compile_options(thirdparty_headers INTERFACE -Wno-old-style-cast)
 
+set_target_properties(armnnDelegate PROPERTIES VERSION ${DELEGATE_LIB_VERSION} SOVERSION ${DELEGATE_LIB_SOVERSION})
+
 option(BUILD_UNIT_TESTS "Build unit tests" ON)
 if(BUILD_UNIT_TESTS)
     set(armnnDelegate_unittest_sources)
diff --git a/delegate/include/Version.hpp b/delegate/include/Version.hpp
new file mode 100644
index 0000000..f1ac1fe
--- /dev/null
+++ b/delegate/include/Version.hpp
@@ -0,0 +1,29 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+namespace armnnDelegate
+{
+
+/// Macro utils
+#define STRINGIFY_VALUE(s) STRINGIFY_MACRO(s)
+#define STRINGIFY_MACRO(s) #s
+
+// ArmNN Delegate version components
+#define DELEGATE_MAJOR_VERSION 23
+#define DELEGATE_MINOR_VERSION 0
+#define DELEGATE_PATCH_VERSION 0
+
+/// DELEGATE_VERSION: "X.Y.Z"
+/// where:
+///   X = Major version number
+///   Y = Minor version number
+///   Z = Patch version number
+#define DELEGATE_VERSION STRINGIFY_VALUE(DELEGATE_MAJOR_VERSION) "." \
+                         STRINGIFY_VALUE(DELEGATE_MINOR_VERSION) "." \
+                         STRINGIFY_VALUE(DELEGATE_PATCH_VERSION)
+
+} //namespace armnnDelegate
\ No newline at end of file
diff --git a/delegate/include/armnn_delegate.hpp b/delegate/include/armnn_delegate.hpp
index adf264a..b213211 100644
--- a/delegate/include/armnn_delegate.hpp
+++ b/delegate/include/armnn_delegate.hpp
@@ -47,6 +47,9 @@
 
     TfLiteDelegate* GetDelegate();
 
+    /// Retrieve version in X.Y.Z form
+    static const std::string GetVersion();
+
 private:
     TfLiteDelegate m_Delegate = {
         reinterpret_cast<void*>(this),  // .data_
diff --git a/delegate/src/armnn_delegate.cpp b/delegate/src/armnn_delegate.cpp
index 639e514..3ebc0cc 100644
--- a/delegate/src/armnn_delegate.cpp
+++ b/delegate/src/armnn_delegate.cpp
@@ -5,6 +5,8 @@
 
 #include <armnn_delegate.hpp>
 
+#include "Version.hpp"
+
 #include "Activation.hpp"
 #include "ArgMinMax.hpp"
 #include "BatchSpace.hpp"
@@ -35,6 +37,7 @@
 #include <tensorflow/lite/context_util.h>
 
 #include <algorithm>
+#include <iostream>
 #include <sstream>
 
 namespace armnnDelegate
@@ -217,6 +220,11 @@
     return &m_Delegate;
 }
 
+const std::string Delegate::GetVersion()
+{
+    return DELEGATE_VERSION;
+}
+
 TfLiteStatus ArmnnSubgraph::AddInputLayer(DelegateData& delegateData,
                                           TfLiteContext* tfLiteContext,
                                           const TfLiteIntArray* inputs,