IVGCVSW-5736 and IVGCVSW-5743 'NonConstWeights: Update front-end and TfLiteDelegate support for FullyConnected Operator'

* Added front-end support for non-const weights for FULLY_CONNECTED operator
* Added FULLY_CONNECTED end-to-end test
* Updated FULLY_CONNECTED operator support in TfLite Arm NN Delegate for non-const weights
* Updated the version numbers

Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: Iffa5b9aa9297aca4c02d923cce4636c88ac21faa
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 0586700..ae9ddf2 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -1118,12 +1118,8 @@
 void SerializerStrategy::SerializeFullyConnectedLayer(const armnn::IConnectableLayer* layer,
                                                       const armnn::FullyConnectedDescriptor& fullyConnectedDescriptor,
                                                       const std::vector<armnn::ConstTensor>& constants,
-                                                      const char* name)
+                                                      const char*)
 {
-    IgnoreUnused(name);
-
-    const armnn::ConstTensor& weights = constants.at(0);
-
     // Create FlatBuffer BaseLayer
     auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_FullyConnected);
 
@@ -1131,17 +1127,23 @@
     auto flatBufferDescriptor =
         serializer::CreateFullyConnectedDescriptor(m_flatBufferBuilder,
                                                    fullyConnectedDescriptor.m_BiasEnabled,
-                                                   fullyConnectedDescriptor.m_TransposeWeightMatrix);
+                                                   fullyConnectedDescriptor.m_TransposeWeightMatrix,
+                                                   fullyConnectedDescriptor.m_ConstantWeights);
 
     // Create FlatBuffer weights data
-    auto flatBufferWeights = CreateConstTensorInfo(weights);
-
+    flatbuffers::Offset<serializer::ConstTensor> flatBufferWeights;
     // Create FlatBuffer bias data
     flatbuffers::Offset<serializer::ConstTensor> flatBufferBiases;
-    if (fullyConnectedDescriptor.m_BiasEnabled)
+    if (fullyConnectedDescriptor.m_ConstantWeights && !constants.empty())
     {
-        armnn::ConstTensor biases = constants.at(1);
-        flatBufferBiases = CreateConstTensorInfo(biases);
+        armnn::ConstTensor weights = constants.at(0);
+        flatBufferWeights = CreateConstTensorInfo(weights);
+
+        if (fullyConnectedDescriptor.m_BiasEnabled)
+        {
+            armnn::ConstTensor biases = constants.at(1);
+            flatBufferBiases = CreateConstTensorInfo(biases);
+        }
     }
 
     // Create FlatBuffer FullyConnectedLayer