IVGCVSW-1963: Add implementation classes for Cl, Neon and Ref backends

Change-Id: Ibb2efaf8b001a64a3f35eab2220990dc39889780
diff --git a/src/backends/cl/CMakeLists.txt b/src/backends/cl/CMakeLists.txt
index 80ca0ac..a7ce893 100644
--- a/src/backends/cl/CMakeLists.txt
+++ b/src/backends/cl/CMakeLists.txt
@@ -4,6 +4,8 @@
 #
 
 list(APPEND armnnClBackend_sources
+    ClBackend.cpp
+    ClBackend.hpp
     ClContextControl.cpp
     ClContextControl.hpp
     ClLayerSupport.cpp
diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp
new file mode 100644
index 0000000..5de9d31
--- /dev/null
+++ b/src/backends/cl/ClBackend.cpp
@@ -0,0 +1,29 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "ClBackend.hpp"
+
+namespace armnn
+{
+
+const std::string ClBackend::s_Id = "arm_compute_cl";
+
+const std::string& ClBackend::GetId() const
+{
+    return s_Id;
+}
+
+const ILayerSupport& ClBackend::GetLayerSupport() const
+{
+    return m_LayerSupport;
+}
+
+std::unique_ptr<IWorkloadFactory> ClBackend::CreateWorkloadFactory() const
+{
+    // TODO implement
+    return nullptr;
+}
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp
new file mode 100644
index 0000000..7e67f5e
--- /dev/null
+++ b/src/backends/cl/ClBackend.hpp
@@ -0,0 +1,33 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include "backends/IBackendInternal.hpp"
+
+#include "ClLayerSupport.hpp"
+
+namespace armnn
+{
+
+class ClBackend : public IBackendInternal
+{
+public:
+    ClBackend()  = default;
+    ~ClBackend() = default;
+
+    const std::string& GetId() const override;
+
+    const ILayerSupport& GetLayerSupport() const override;
+
+    std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const override;
+
+private:
+    static const std::string s_Id;
+
+    // TODO initialize
+    ClLayerSupport m_LayerSupport;
+};
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/cl/ClLayerSupport.hpp b/src/backends/cl/ClLayerSupport.hpp
index 700d718..80e8488 100644
--- a/src/backends/cl/ClLayerSupport.hpp
+++ b/src/backends/cl/ClLayerSupport.hpp
@@ -13,6 +13,12 @@
 
 namespace armnn
 {
+
+class ClLayerSupport : public ILayerSupport
+{
+    // TODO implement
+};
+
 bool IsClDirectConvolution2dSupported(const TensorInfo& weightInfo, const Convolution2dDescriptor& desc);
 bool IsClDepthwiseConvolution2dDescParamsSupported(std::string* reasonIfUnsupported,
                                                    const DepthwiseConvolution2dDescriptor& parameters,
diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk
index 057089e..81540cc 100644
--- a/src/backends/cl/backend.mk
+++ b/src/backends/cl/backend.mk
@@ -8,6 +8,7 @@
 # file in the root of ArmNN
 
 BACKEND_SOURCES := \
+        ClBackend.cpp \
         ClContextControl.cpp \
         ClLayerSupport.cpp \
         ClWorkloadFactory.cpp \
diff --git a/src/backends/neon/CMakeLists.txt b/src/backends/neon/CMakeLists.txt
index c748825..c6492bc 100644
--- a/src/backends/neon/CMakeLists.txt
+++ b/src/backends/neon/CMakeLists.txt
@@ -5,6 +5,8 @@
 
 if(ARMCOMPUTENEON)
     list(APPEND armnnNeonBackend_sources
+        NeonBackend.cpp
+        NeonBackend.hpp
         NeonLayerSupport.cpp
         NeonLayerSupport.hpp
         NeonWorkloadFactory.cpp
diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp
new file mode 100644
index 0000000..1137145
--- /dev/null
+++ b/src/backends/neon/NeonBackend.cpp
@@ -0,0 +1,29 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "NeonBackend.hpp"
+
+namespace armnn
+{
+
+const std::string NeonBackend::s_Id = "arm_compute_neon";
+
+const std::string& NeonBackend::GetId() const
+{
+    return s_Id;
+}
+
+const ILayerSupport& NeonBackend::GetLayerSupport() const
+{
+    return m_LayerSupport;
+}
+
+std::unique_ptr<IWorkloadFactory> NeonBackend::CreateWorkloadFactory() const
+{
+    // TODO implement
+    return nullptr;
+}
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/neon/NeonBackend.hpp b/src/backends/neon/NeonBackend.hpp
new file mode 100644
index 0000000..86fccf0
--- /dev/null
+++ b/src/backends/neon/NeonBackend.hpp
@@ -0,0 +1,33 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include "backends/IBackendInternal.hpp"
+
+#include "NeonLayerSupport.hpp"
+
+namespace armnn
+{
+
+class NeonBackend : public IBackendInternal
+{
+public:
+    NeonBackend()  = default;
+    ~NeonBackend() = default;
+
+    const std::string& GetId() const override;
+
+    const ILayerSupport& GetLayerSupport() const override;
+
+    std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const override;
+
+private:
+    static const std::string s_Id;
+
+    // TODO initialize
+    NeonLayerSupport m_LayerSupport;
+};
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/neon/NeonLayerSupport.hpp b/src/backends/neon/NeonLayerSupport.hpp
index 419c226..590f4d6 100644
--- a/src/backends/neon/NeonLayerSupport.hpp
+++ b/src/backends/neon/NeonLayerSupport.hpp
@@ -13,6 +13,11 @@
 namespace armnn
 {
 
+class NeonLayerSupport : public ILayerSupport
+{
+    // TODO implement
+};
+
 bool IsNeonDirectConvolutionPreferred(const TensorInfo& weightInfo, const Convolution2dDescriptor& desc);
 
 bool IsNeonNormalizationDescParamsSupported(std::string* reasonIfUnsupported,
diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk
index a59966f..b041bca 100644
--- a/src/backends/neon/backend.mk
+++ b/src/backends/neon/backend.mk
@@ -8,6 +8,7 @@
 # file in the root of ArmNN
 
 BACKEND_SOURCES := \
+        NeonBackend.cpp \
         NeonLayerSupport.cpp \
         NeonWorkloadFactory.cpp \
         workloads/NeonActivationFloatWorkload.cpp \
diff --git a/src/backends/reference/CMakeLists.txt b/src/backends/reference/CMakeLists.txt
index 526baaa..9810cf8 100644
--- a/src/backends/reference/CMakeLists.txt
+++ b/src/backends/reference/CMakeLists.txt
@@ -4,6 +4,8 @@
 #
 
 list(APPEND armnnRefBackend_sources
+    RefBackend.cpp
+    RefBackend.hpp
     RefLayerSupport.cpp
     RefLayerSupport.hpp
     RefWorkloadFactory.cpp
diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp
new file mode 100644
index 0000000..1799abf
--- /dev/null
+++ b/src/backends/reference/RefBackend.cpp
@@ -0,0 +1,29 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "RefBackend.hpp"
+
+namespace armnn
+{
+
+const std::string RefBackend::s_Id = "arm_reference";
+
+const std::string& RefBackend::GetId() const
+{
+    return s_Id;
+}
+
+const ILayerSupport& RefBackend::GetLayerSupport() const
+{
+    return m_LayerSupport;
+}
+
+std::unique_ptr<IWorkloadFactory> RefBackend::CreateWorkloadFactory() const
+{
+    // TODO implement
+    return nullptr;
+}
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp
new file mode 100644
index 0000000..c379715
--- /dev/null
+++ b/src/backends/reference/RefBackend.hpp
@@ -0,0 +1,33 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include "backends/IBackendInternal.hpp"
+
+#include "RefLayerSupport.hpp"
+
+namespace armnn
+{
+
+class RefBackend : public IBackendInternal
+{
+public:
+    RefBackend()  = default;
+    ~RefBackend() = default;
+
+    const std::string& GetId() const override;
+
+    const ILayerSupport& GetLayerSupport() const override;
+
+    std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const override;
+
+private:
+    static const std::string s_Id;
+
+    // TODO initialize
+    RefLayerSupport m_LayerSupport;
+};
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/reference/RefLayerSupport.hpp b/src/backends/reference/RefLayerSupport.hpp
index d29e956..e819b66 100644
--- a/src/backends/reference/RefLayerSupport.hpp
+++ b/src/backends/reference/RefLayerSupport.hpp
@@ -15,6 +15,11 @@
 namespace armnn
 {
 
+class RefLayerSupport : public ILayerSupport
+{
+    // TODO implement
+};
+
 bool IsActivationSupportedRef(const TensorInfo& input,
                               const TensorInfo& output,
                               const ActivationDescriptor& descriptor,
diff --git a/src/backends/reference/backend.mk b/src/backends/reference/backend.mk
index e5345c0..365faa6 100644
--- a/src/backends/reference/backend.mk
+++ b/src/backends/reference/backend.mk
@@ -8,6 +8,7 @@
 # file in the root of ArmNN
 
 BACKEND_SOURCES := \
+        RefBackend.cpp \
         RefLayerSupport.cpp \
         RefWorkloadFactory.cpp \
         workloads/Activation.cpp \