IVGCVSW-7159 Implement simple TOSA Reference Backend skeleton

 * Added files based on RefBackend
 * Added PreCompiled Workload skeleton
 * Increment ABI version of armnnTestUtils for CreateInput which had
   been left as pure virtual, added base implementation for it.
 * Add IsTosaLayerSupported() for Addition

Change-Id: I4c963adf3f50593d17ecdf21554502a64ad3bd76
diff --git a/src/backends/tosaReference/TosaRefMemoryManager.hpp b/src/backends/tosaReference/TosaRefMemoryManager.hpp
new file mode 100644
index 0000000..05a6ec0
--- /dev/null
+++ b/src/backends/tosaReference/TosaRefMemoryManager.hpp
@@ -0,0 +1,59 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/backends/IMemoryManager.hpp>
+
+#include <forward_list>
+#include <vector>
+
+namespace armnn
+{
+
+// An implementation of IMemoryManager to be used with RefTensorHandle
+class TosaRefMemoryManager : public IMemoryManager
+{
+public:
+    TosaRefMemoryManager();
+    virtual ~TosaRefMemoryManager();
+
+    class Pool;
+
+    Pool* Manage(unsigned int numBytes);
+
+    void Allocate(Pool *pool);
+
+    void* GetPointer(Pool *pool);
+
+    void Acquire() override;
+    void Release() override;
+
+    class Pool
+    {
+    public:
+        Pool(unsigned int numBytes);
+        ~Pool();
+
+        void Acquire();
+        void Release();
+
+        void* GetPointer();
+
+        void Reserve(unsigned int numBytes);
+
+    private:
+        unsigned int m_Size;
+        void* m_Pointer;
+    };
+    
+private:
+    TosaRefMemoryManager(const TosaRefMemoryManager&) = delete; // Noncopyable
+    TosaRefMemoryManager& operator=(const TosaRefMemoryManager&) = delete; // Noncopyable
+
+    std::forward_list<Pool> m_Pools;
+    std::vector<Pool*> m_FreePools;
+};
+
+}