IVGCVSW-5504 'TfLiteDelegate: Introduce FP16 and BackendOptions'

* Added BackendOptions creations of armnn_delegate
* Included armnn/third-party the armnn_delegate unit tests
* Updated the CreateConstTensor function

Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: I8e2099a465766b905bff701413307e5850b68e42
diff --git a/delegate/include/DelegateOptions.hpp b/delegate/include/DelegateOptions.hpp
index 0c8173d..daf2015 100644
--- a/delegate/include/DelegateOptions.hpp
+++ b/delegate/include/DelegateOptions.hpp
@@ -17,19 +17,41 @@
 class DelegateOptions
 {
 public:
-    DelegateOptions(armnn::Compute computeDevice);
+    DelegateOptions(armnn::Compute computeDevice, const std::vector<armnn::BackendOptions>& backendOptions = {});
 
-    DelegateOptions(const std::vector<armnn::BackendId>& backends);
+    DelegateOptions(const std::vector<armnn::BackendId>& backends,
+                    const std::vector<armnn::BackendOptions>& backendOptions = {});
 
     const std::vector<armnn::BackendId>& GetBackends() const { return m_Backends; }
 
     void SetBackends(const std::vector<armnn::BackendId>& backends) { m_Backends = backends; }
 
+    const std::vector<armnn::BackendOptions>& GetBackendOptions() const { return m_BackendOptions; }
+
 private:
     /// Which backend to run Delegate on.
     /// Examples of possible values are: CpuRef, CpuAcc, GpuAcc.
     /// CpuRef as default.
     std::vector<armnn::BackendId> m_Backends = { armnn::Compute::CpuRef };
+
+    /// Pass backend specific options to Delegate
+    ///
+    /// For example, tuning can be enabled on GpuAcc like below
+    /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    /// m_BackendOptions.emplace_back(
+    ///     BackendOptions{"GpuAcc",
+    ///       {
+    ///         {"TuningLevel", 2},
+    ///         {"TuningFile", filename}
+    ///       }
+    ///     });
+    /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    /// The following backend options are available:
+    /// GpuAcc:
+    ///   "TuningLevel" : int [0..3] (0=UseOnly(default) | 1=RapidTuning | 2=NormalTuning | 3=ExhaustiveTuning)
+    ///   "TuningFile" : string [filenameString]
+    ///   "KernelProfilingEnabled" : bool [true | false]
+    std::vector<armnn::BackendOptions> m_BackendOptions;
 };
 
 } // namespace armnnDelegate