IVGCVSW-1897 : build infrastructure for the src/backends folder

Change-Id: I7ebafb675ccc77ad54d1deb01412a8379a5356bb
diff --git a/Android.mk b/Android.mk
index ad02db9..cc1076f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -10,6 +10,7 @@
 OPENCL_HEADER_PATH := $(LOCAL_PATH)/../clframework/include
 NN_HEADER_PATH := $(LOCAL_PATH)/../../../../frameworks/ml/nn/runtime/include
 ARMNN_HEADER_PATH := $(LOCAL_PATH)/include
+ARMNN_MAIN_HEADER_PATH := $(LOCAL_PATH)/src
 ARMNN_SOURCE_HEADER_PATH := $(LOCAL_PATH)/src/armnn
 ARMNN_SOURCE_UTILS_HEADER_PATH := $(LOCAL_PATH)/src/armnnUtils
 
@@ -27,6 +28,7 @@
 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
 
 LOCAL_EXPORT_C_INCLUDES := \
+        $(ARMNN_MAIN_HEADER_PATH) \
         $(ARMNN_SOURCE_HEADER_PATH) \
         $(ARMNN_SOURCE_UTILS_HEADER_PATH)
 
@@ -34,6 +36,7 @@
 	$(OPENCL_HEADER_PATH) \
 	$(NN_HEADER_PATH) \
 	$(ARMNN_HEADER_PATH) \
+	$(ARMNN_MAIN_HEADER_PATH) \
 	$(ARMNN_SOURCE_HEADER_PATH) \
 	$(ARMNN_SOURCE_UTILS_HEADER_PATH)
 
@@ -42,127 +45,127 @@
         src/armnnUtils/FloatingPointConverter.cpp \
         src/armnnUtils/Logging.cpp \
         src/armnnUtils/Permute.cpp \
-        src/armnn/backends/ArmComputeTensorUtils.cpp \
-        src/armnn/backends/ClWorkloads/ClActivationFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClActivationUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClAdditionWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClSubtractionWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClBaseConstantWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClConstantFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClConstantUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClConvertFp16ToFp32Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClConvertFp32ToFp16Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClConvolution2dBaseWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClConvolution2dFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClConvolution2dUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClDivisionFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClFloorFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClFullyConnectedWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClL2NormalizationFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClLstmFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClMergerFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClMergerUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClMultiplicationFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClPermuteWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClPooling2dBaseWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClPooling2dFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClPooling2dUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClReshapeFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClReshapeUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClResizeBilinearFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClSoftmaxBaseWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClSoftmaxFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClSoftmaxUint8Workload.cpp \
-        src/armnn/backends/ClWorkloads/ClSplitterFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloads/ClSplitterUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonActivationFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonActivationUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonAdditionFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonConstantFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonConstantUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonFloorFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonLstmFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonMergerFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonMergerUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonNormalizationFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonPermuteWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonPooling2dBaseWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonPooling2dFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonPooling2dUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonReshapeFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonReshapeUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonSplitterFloatWorkload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonSplitterUint8Workload.cpp \
-        src/armnn/backends/NeonWorkloads/NeonSubtractionFloatWorkload.cpp \
-        src/armnn/backends/ClWorkloadFactory.cpp \
-        src/armnn/backends/ClContextControl.cpp \
-        src/armnn/backends/CpuTensorHandle.cpp \
-        src/armnn/backends/RefWorkloadFactory.cpp \
-        src/armnn/backends/RefWorkloads/RefMergerUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefResizeBilinearUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/FullyConnected.cpp \
-        src/armnn/backends/RefWorkloads/RefFullyConnectedFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefSoftmaxFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefActivationFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefBatchNormalizationUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefBaseConstantWorkload.cpp \
-        src/armnn/backends/RefWorkloads/RefResizeBilinearFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/Broadcast.cpp \
-        src/armnn/backends/RefWorkloads/ArithmeticFunction.cpp \
-        src/armnn/backends/RefWorkloads/RefArithmeticWorkload.cpp \
-        src/armnn/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/ResizeBilinear.cpp \
-        src/armnn/backends/RefWorkloads/RefSoftmaxUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefPooling2dUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefFloorFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/ConvImpl.cpp \
-        src/armnn/backends/RefWorkloads/Activation.cpp \
-        src/armnn/backends/RefWorkloads/RefReshapeUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefL2NormalizationFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefLstmFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefConvolution2dFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefConvolution2dUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefSplitterFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefActivationUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefSplitterUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefPooling2dFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefReshapeFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefNormalizationFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/Softmax.cpp \
-        src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefConstantUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefConstantFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/Pooling2d.cpp \
-        src/armnn/backends/RefWorkloads/RefMergerFloat32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefFullyConnectedUint8Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefPermuteWorkload.cpp \
-        src/armnn/backends/RefWorkloads/RefConvertFp16ToFp32Workload.cpp \
-        src/armnn/backends/RefWorkloads/RefConvertFp32ToFp16Workload.cpp \
-        src/armnn/backends/MemCopyWorkload.cpp \
-        src/armnn/backends/WorkloadData.cpp \
-        src/armnn/backends/WorkloadFactory.cpp \
+        src/backends/ArmComputeTensorUtils.cpp \
+        src/backends/ClWorkloads/ClActivationFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClActivationUint8Workload.cpp \
+        src/backends/ClWorkloads/ClAdditionWorkload.cpp \
+        src/backends/ClWorkloads/ClSubtractionWorkload.cpp \
+        src/backends/ClWorkloads/ClBaseConstantWorkload.cpp \
+        src/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClConstantFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClConstantUint8Workload.cpp \
+        src/backends/ClWorkloads/ClConvertFp16ToFp32Workload.cpp \
+        src/backends/ClWorkloads/ClConvertFp32ToFp16Workload.cpp \
+        src/backends/ClWorkloads/ClConvolution2dBaseWorkload.cpp \
+        src/backends/ClWorkloads/ClConvolution2dFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClConvolution2dUint8Workload.cpp \
+        src/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.cpp \
+        src/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.cpp \
+        src/backends/ClWorkloads/ClDivisionFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClFloorFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClFullyConnectedWorkload.cpp \
+        src/backends/ClWorkloads/ClL2NormalizationFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClLstmFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClMergerFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClMergerUint8Workload.cpp \
+        src/backends/ClWorkloads/ClMultiplicationFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClPermuteWorkload.cpp \
+        src/backends/ClWorkloads/ClPooling2dBaseWorkload.cpp \
+        src/backends/ClWorkloads/ClPooling2dFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClPooling2dUint8Workload.cpp \
+        src/backends/ClWorkloads/ClReshapeFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClReshapeUint8Workload.cpp \
+        src/backends/ClWorkloads/ClResizeBilinearFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClSoftmaxBaseWorkload.cpp \
+        src/backends/ClWorkloads/ClSoftmaxFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClSoftmaxUint8Workload.cpp \
+        src/backends/ClWorkloads/ClSplitterFloatWorkload.cpp \
+        src/backends/ClWorkloads/ClSplitterUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonActivationFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonActivationUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonAdditionFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonConstantFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonConstantUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.cpp \
+        src/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.cpp \
+        src/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.cpp \
+        src/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonConvolution2dUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.cpp \
+        src/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonFloorFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonLstmFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonMergerFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonMergerUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonNormalizationFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonPermuteWorkload.cpp \
+        src/backends/NeonWorkloads/NeonPooling2dBaseWorkload.cpp \
+        src/backends/NeonWorkloads/NeonPooling2dFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonPooling2dUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonReshapeFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonReshapeUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.cpp \
+        src/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonSoftmaxUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonSplitterFloatWorkload.cpp \
+        src/backends/NeonWorkloads/NeonSplitterUint8Workload.cpp \
+        src/backends/NeonWorkloads/NeonSubtractionFloatWorkload.cpp \
+        src/backends/ClWorkloadFactory.cpp \
+        src/backends/ClContextControl.cpp \
+        src/backends/CpuTensorHandle.cpp \
+        src/backends/RefWorkloadFactory.cpp \
+        src/backends/RefWorkloads/RefMergerUint8Workload.cpp \
+        src/backends/RefWorkloads/RefResizeBilinearUint8Workload.cpp \
+        src/backends/RefWorkloads/FullyConnected.cpp \
+        src/backends/RefWorkloads/RefFullyConnectedFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefSoftmaxFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefActivationFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefBatchNormalizationUint8Workload.cpp \
+        src/backends/RefWorkloads/RefBaseConstantWorkload.cpp \
+        src/backends/RefWorkloads/RefResizeBilinearFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.cpp \
+        src/backends/RefWorkloads/Broadcast.cpp \
+        src/backends/RefWorkloads/ArithmeticFunction.cpp \
+        src/backends/RefWorkloads/RefArithmeticWorkload.cpp \
+        src/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.cpp \
+        src/backends/RefWorkloads/ResizeBilinear.cpp \
+        src/backends/RefWorkloads/RefSoftmaxUint8Workload.cpp \
+        src/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefPooling2dUint8Workload.cpp \
+        src/backends/RefWorkloads/RefFloorFloat32Workload.cpp \
+        src/backends/RefWorkloads/ConvImpl.cpp \
+        src/backends/RefWorkloads/Activation.cpp \
+        src/backends/RefWorkloads/RefReshapeUint8Workload.cpp \
+        src/backends/RefWorkloads/RefL2NormalizationFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefLstmFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefConvolution2dFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefConvolution2dUint8Workload.cpp \
+        src/backends/RefWorkloads/RefSplitterFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefActivationUint8Workload.cpp \
+        src/backends/RefWorkloads/RefSplitterUint8Workload.cpp \
+        src/backends/RefWorkloads/RefPooling2dFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefReshapeFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefNormalizationFloat32Workload.cpp \
+        src/backends/RefWorkloads/Softmax.cpp \
+        src/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.cpp \
+        src/backends/RefWorkloads/RefConstantUint8Workload.cpp \
+        src/backends/RefWorkloads/RefConstantFloat32Workload.cpp \
+        src/backends/RefWorkloads/Pooling2d.cpp \
+        src/backends/RefWorkloads/RefMergerFloat32Workload.cpp \
+        src/backends/RefWorkloads/RefFullyConnectedUint8Workload.cpp \
+        src/backends/RefWorkloads/RefPermuteWorkload.cpp \
+        src/backends/RefWorkloads/RefConvertFp16ToFp32Workload.cpp \
+        src/backends/RefWorkloads/RefConvertFp32ToFp16Workload.cpp \
+        src/backends/MemCopyWorkload.cpp \
+        src/backends/WorkloadData.cpp \
+        src/backends/WorkloadFactory.cpp \
         src/armnn/layers/ActivationLayer.cpp \
         src/armnn/layers/AdditionLayer.cpp \
         src/armnn/layers/ArithmeticBaseLayer.cpp \
@@ -204,7 +207,7 @@
         src/armnn/NeonInterceptorScheduler.cpp \
         src/armnn/NeonTimer.cpp \
         src/armnn/Network.cpp \
-        src/armnn/backends/OutputHandler.cpp \
+        src/backends/OutputHandler.cpp \
         src/armnn/OpenClTimer.cpp \
         src/armnn/WallClockTimer.cpp \
         src/armnn/ProfilingEvent.cpp \
@@ -214,12 +217,12 @@
         src/armnn/Utils.cpp \
         src/armnn/LayerSupport.cpp \
         src/armnn/Observable.cpp \
-        src/armnn/backends/StringMapping.cpp \
-        src/armnn/backends/RefLayerSupport.cpp \
-        src/armnn/backends/ClLayerSupport.cpp \
-        src/armnn/backends/NeonLayerSupport.cpp \
-        src/armnn/backends/NeonWorkloadUtils.cpp \
-        src/armnn/backends/NeonWorkloadFactory.cpp \
+        src/backends/StringMapping.cpp \
+        src/backends/RefLayerSupport.cpp \
+        src/backends/ClLayerSupport.cpp \
+        src/backends/NeonLayerSupport.cpp \
+        src/backends/NeonWorkloadUtils.cpp \
+        src/backends/NeonWorkloadFactory.cpp \
         src/armnn/memory/BaseMemoryManager.cpp \
         src/armnn/memory/BlobLifetimeManager.cpp \
         src/armnn/memory/BlobMemoryPool.cpp \
@@ -263,6 +266,7 @@
 	$(OPENCL_HEADER_PATH) \
 	$(NN_HEADER_PATH) \
 	$(ARMNN_HEADER_PATH) \
+	$(ARMNN_MAIN_HEADER_PATH) \
 	$(ARMNN_SOURCE_HEADER_PATH) \
 	$(ARMNN_SOURCE_UTILS_HEADER_PATH)
 
@@ -287,17 +291,17 @@
 	src/armnn/test/OpenClTimerTest.cpp \
 	src/armnn/test/ProfilingEventTest.cpp \
 	src/armnn/test/ObservableTest.cpp \
-	src/armnn/backends/test/IsLayerSupportedTest.cpp \
-	src/armnn/backends/test/Reference.cpp \
-	src/armnn/backends/test/WorkloadDataValidation.cpp \
-	src/armnn/backends/test/TensorCopyUtils.cpp \
-	src/armnn/backends/test/LayerTests.cpp \
-	src/armnn/backends/test/CreateWorkloadRef.cpp \
-	src/armnn/backends/test/ArmComputeCl.cpp \
-	src/armnn/backends/test/ArmComputeNeon.cpp \
-	src/armnn/backends/test/CreateWorkloadCl.cpp \
-	src/armnn/backends/test/CreateWorkloadNeon.cpp \
-	src/armnn/backends/test/MemCopyTests.cpp
+	src/backends/test/IsLayerSupportedTest.cpp \
+	src/backends/test/Reference.cpp \
+	src/backends/test/WorkloadDataValidation.cpp \
+	src/backends/test/TensorCopyUtils.cpp \
+	src/backends/test/LayerTests.cpp \
+	src/backends/test/CreateWorkloadRef.cpp \
+	src/backends/test/ArmComputeCl.cpp \
+	src/backends/test/ArmComputeNeon.cpp \
+	src/backends/test/CreateWorkloadCl.cpp \
+	src/backends/test/CreateWorkloadNeon.cpp \
+	src/backends/test/MemCopyTests.cpp
 
 LOCAL_STATIC_LIBRARIES := \
 	libneuralnetworks_common \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a65567d..8ddad99 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,7 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
 cmake_minimum_required (VERSION 3.0.2) # 3.0.2 required for return() statement used in AddDllCopyCommands.cmake.
 project(armnn)
 
@@ -138,9 +142,6 @@
      target_link_libraries(armnnTfLiteParser armnn ${FLATBUFFERS_LIBRARY})
 endif()
 
-# ArmNN source files required for all build options
-include_directories(SYSTEM third-party)
-
 list(APPEND armnn_sources
     include/armnn/ArmNN.hpp
     include/armnn/Descriptors.hpp
@@ -154,125 +155,6 @@
     include/armnn/Utils.hpp
     include/armnn/LayerSupport.hpp
     include/armnn/Version.hpp
-    src/armnn/backends/ClWorkloadFactory.hpp
-    src/armnn/backends/ClWorkloadFactory.cpp
-    src/armnn/backends/ClContextControl.hpp
-    src/armnn/backends/ClContextControl.cpp
-    src/armnn/backends/ClLayerSupport.cpp
-    src/armnn/backends/ClLayerSupport.hpp
-    src/armnn/backends/CpuTensorHandleFwd.hpp
-    src/armnn/backends/CpuTensorHandle.hpp
-    src/armnn/backends/CpuTensorHandle.cpp
-    src/armnn/backends/RefWorkloadFactory.cpp
-    src/armnn/backends/RefWorkloadFactory.hpp
-    src/armnn/backends/RefLayerSupport.cpp
-    src/armnn/backends/RefLayerSupport.hpp
-    src/armnn/backends/MakeWorkloadHelper.hpp
-    src/armnn/backends/NeonWorkloadFactory.cpp
-    src/armnn/backends/NeonWorkloadFactory.hpp
-    src/armnn/backends/NeonLayerSupport.cpp
-    src/armnn/backends/NeonLayerSupport.hpp
-    src/armnn/backends/Workload.hpp
-    src/armnn/backends/WorkloadDataFwd.hpp
-    src/armnn/backends/WorkloadData.hpp
-    src/armnn/backends/WorkloadData.cpp
-    src/armnn/backends/WorkloadFactory.hpp
-    src/armnn/backends/WorkloadFactory.cpp
-    src/armnn/backends/WorkloadInfo.hpp
-    src/armnn/backends/WorkloadUtils.hpp
-    src/armnn/backends/MemCopyWorkload.cpp
-    src/armnn/backends/MemCopyWorkload.hpp
-    src/armnn/backends/StringMapping.cpp
-    src/armnn/backends/StringMapping.hpp
-    src/armnn/backends/RefWorkloads/Broadcast.hpp
-    src/armnn/backends/RefWorkloads/Broadcast.cpp
-    src/armnn/backends/RefWorkloads/RefMergerUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefConstantUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/ArithmeticFunction.cpp
-    src/armnn/backends/RefWorkloads/ArithmeticFunction.hpp
-    src/armnn/backends/RefWorkloads/RefArithmeticWorkload.cpp
-    src/armnn/backends/RefWorkloads/RefArithmeticWorkload.hpp
-    src/armnn/backends/RefWorkloads/ConvImpl.hpp
-    src/armnn/backends/RefWorkloads/RefResizeBilinearUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/FullyConnected.cpp
-    src/armnn/backends/RefWorkloads/RefFullyConnectedFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefSoftmaxFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefBaseConstantWorkload.hpp
-    src/armnn/backends/RefWorkloads/RefConvolution2dUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefSplitterUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefActivationFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefBatchNormalizationUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefResizeBilinearUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefL2NormalizationFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefActivationUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefBaseConstantWorkload.cpp
-    src/armnn/backends/RefWorkloads/RefResizeBilinearFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefPooling2dFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefWorkloadUtils.hpp
-    src/armnn/backends/RefWorkloads/RefMergerUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefFullyConnectedFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/Softmax.hpp
-    src/armnn/backends/RefWorkloads/RefMergerFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/TensorBufferArrayView.hpp
-    src/armnn/backends/RefWorkloads/ResizeBilinear.cpp
-    src/armnn/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/Splitter.hpp
-    src/armnn/backends/RefWorkloads/RefFullyConnectedUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefSoftmaxUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefReshapeFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/FullyConnected.hpp
-    src/armnn/backends/RefWorkloads/RefFloorFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefPooling2dUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefFloorFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/ConvImpl.cpp
-    src/armnn/backends/RefWorkloads/RefSoftmaxFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefSoftmaxUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefReshapeUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/Activation.cpp
-    src/armnn/backends/RefWorkloads/RefResizeBilinearFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefReshapeUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefL2NormalizationFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefConvolution2dFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefBatchNormalizationUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/RefConvolution2dUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/ResizeBilinear.hpp
-    src/armnn/backends/RefWorkloads/RefNormalizationFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefSplitterFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefActivationUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefPooling2dUint8Workload.hpp
-    src/armnn/backends/RefWorkloads/BatchNormImpl.hpp
-    src/armnn/backends/RefWorkloads/RefSplitterUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/Activation.hpp
-    src/armnn/backends/RefWorkloads/RefPooling2dFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/Merger.hpp
-    src/armnn/backends/RefWorkloads/RefSplitterFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefConstantFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefActivationFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefReshapeFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefNormalizationFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/Softmax.cpp
-    src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefConstantUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefConstantFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/Pooling2d.cpp
-    src/armnn/backends/RefWorkloads/RefConvolution2dFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefMergerFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/Pooling2d.hpp
-    src/armnn/backends/RefWorkloads/RefFullyConnectedUint8Workload.cpp
-    src/armnn/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefPermuteWorkload.hpp
-    src/armnn/backends/RefWorkloads/RefPermuteWorkload.cpp
-    src/armnn/backends/RefWorkloads/RefLstmFloat32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefLstmFloat32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefConvertFp16ToFp32Workload.cpp
-    src/armnn/backends/RefWorkloads/RefConvertFp16ToFp32Workload.hpp
-    src/armnn/backends/RefWorkloads/RefConvertFp32ToFp16Workload.cpp
-    src/armnn/backends/RefWorkloads/RefConvertFp32ToFp16Workload.hpp
     src/armnn/layers/LayerCloneBase.hpp
     src/armnn/layers/LayerWithParameters.hpp
     src/armnn/layers/ActivationLayer.hpp
@@ -356,8 +238,6 @@
     src/armnn/Network.hpp
     src/armnn/Network.cpp
     src/armnn/NetworkUtils.hpp
-    src/armnn/backends/OutputHandler.hpp
-    src/armnn/backends/OutputHandler.cpp
     src/armnn/ProfilingEvent.cpp
     src/armnn/ProfilingEvent.hpp
     src/armnn/Profiling.cpp
@@ -389,80 +269,6 @@
 if(ARMCOMPUTENEON)
     # Additionally include source files for ARM Compute NEON backend
     list(APPEND armnn_sources
-        src/armnn/backends/NeonWorkloads/NeonActivationFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonActivationFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonActivationUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonActivationUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonAdditionFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonAdditionFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonBaseConstantWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonBaseMergerWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonBaseSplitterWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonConstantFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonConstantFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonConstantUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonConstantUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonConvolution2dUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonFloorFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonFloorFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonLstmFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonLstmFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonMergerFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonMergerFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonMergerUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonMergerUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonNormalizationFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonNormalizationFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonPermuteWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonPermuteWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonPooling2dBaseWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonPooling2dBaseWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonPooling2dFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonPooling2dFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonPooling2dUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonPooling2dUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonReshapeFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonReshapeFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonReshapeUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonReshapeUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonSoftmaxUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonSplitterFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonSplitterFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloads/NeonSplitterUint8Workload.cpp
-        src/armnn/backends/NeonWorkloads/NeonSplitterUint8Workload.hpp
-        src/armnn/backends/NeonWorkloads/NeonSubtractionFloatWorkload.cpp
-        src/armnn/backends/NeonWorkloads/NeonSubtractionFloatWorkload.hpp
-        src/armnn/backends/NeonWorkloadUtils.cpp
-        src/armnn/backends/NeonWorkloadUtils.hpp
-        src/armnn/backends/NeonTensorHandle.hpp
         src/armnn/NeonInterceptorScheduler.hpp
         src/armnn/NeonInterceptorScheduler.cpp
         src/armnn/NeonTimer.hpp
@@ -471,92 +277,12 @@
 if(ARMCOMPUTECL)
     # Additionally include source files for ARM Compute OpenCL backend
     list(APPEND armnn_sources
-        src/armnn/backends/ClWorkloads/ClActivationFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClActivationFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClActivationUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClActivationUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClAdditionWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClAdditionWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClSubtractionWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClSubtractionWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClConvertFp16ToFp32Workload.cpp
-        src/armnn/backends/ClWorkloads/ClConvertFp16ToFp32Workload.hpp
-        src/armnn/backends/ClWorkloads/ClConvertFp32ToFp16Workload.cpp
-        src/armnn/backends/ClWorkloads/ClConvertFp32ToFp16Workload.hpp
-        src/armnn/backends/ClWorkloads/ClBaseConstantWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClBaseConstantWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClBaseMergerWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClConstantFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClConstantFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClConstantUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClConstantUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClConvolution2dBaseWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClConvolution2dBaseWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClConvolution2dFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClConvolution2dFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClConvolution2dUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClConvolution2dUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClFloorFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClFloorFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClFullyConnectedWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClFullyConnectedWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClL2NormalizationFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClL2NormalizationFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClLstmFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClLstmFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClMergerFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClMergerFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClMergerUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClMergerUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClMultiplicationFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClMultiplicationFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClNormalizationFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClPermuteWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClPermuteWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClPooling2dBaseWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClPooling2dBaseWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClPooling2dFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClPooling2dFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClPooling2dUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClPooling2dUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClReshapeFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClDivisionFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClDivisionFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClReshapeFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClReshapeUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClReshapeUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClResizeBilinearFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClResizeBilinearFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClSoftmaxBaseWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClSoftmaxBaseWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClSoftmaxFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClSoftmaxFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClSoftmaxUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClSoftmaxUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClSplitterFloatWorkload.cpp
-        src/armnn/backends/ClWorkloads/ClSplitterFloatWorkload.hpp
-        src/armnn/backends/ClWorkloads/ClSplitterUint8Workload.cpp
-        src/armnn/backends/ClWorkloads/ClSplitterUint8Workload.hpp
-        src/armnn/backends/ClWorkloads/ClWorkloadUtils.hpp
-        src/armnn/backends/ClTensorHandle.hpp
         src/armnn/OpenClTimer.cpp
         src/armnn/OpenClTimer.hpp)
 endif()
 # Files shared by all ARM Compute backends
 if(ARMCOMPUTENEON OR ARMCOMPUTECL)
     list(APPEND armnn_sources
-        src/armnn/backends/ArmComputeTensorUtils.hpp
-        src/armnn/backends/ArmComputeTensorUtils.cpp
-        src/armnn/backends/ArmComputeUtils.hpp
         src/armnn/memory/IMemoryPool.hpp
         src/armnn/memory/BlobMemoryPool.cpp
         src/armnn/memory/BlobMemoryPool.hpp
@@ -580,12 +306,21 @@
 endif()
 
 add_library_ex(armnn SHARED ${armnn_sources})
+
+# the backends under src/backends extend the list of
+# static libs armnn to link against
+list(APPEND armnnLibraries armnnUtils)
+include(src/backends/backends.cmake)
+
+target_include_directories(armnn PRIVATE src)
 target_include_directories(armnn PRIVATE src/armnn)
 target_include_directories(armnn PRIVATE src/armnnUtils)
-target_link_libraries(armnn armnnUtils)
+foreach(lib ${armnnLibraries})
+    target_link_libraries(armnn ${lib})
+    message("Adding library dependency to armnn: ${lib}")
+endforeach()
 target_link_libraries(armnn ${CMAKE_DL_LIBS})
 
-
 install(TARGETS armnn DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
 if(BUILD_CAFFE_PARSER)
     install(TARGETS armnnCaffeParser DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
@@ -636,42 +371,42 @@
         src/armnn/test/GraphUtils.hpp
         src/armnn/test/InstrumentTests.cpp
         src/armnn/test/ObservableTest.cpp
-        src/armnn/backends/test/IsLayerSupportedTest.cpp
-        src/armnn/backends/test/IsLayerSupportedTestImpl.hpp
-        src/armnn/backends/test/Reference.cpp
-        src/armnn/backends/test/WorkloadDataValidation.cpp
-        src/armnn/backends/test/TensorCopyUtils.hpp
-        src/armnn/backends/test/TensorCopyUtils.cpp
-        src/armnn/backends/test/LayerTests.hpp
-        src/armnn/backends/test/LayerTests.cpp
-        src/armnn/backends/test/LayerReleaseConstantDataTest.cpp
-        src/armnn/backends/test/Conv2dTestImpl.hpp
-        src/armnn/backends/test/ActivationTestImpl.hpp
-        src/armnn/backends/test/ActivationFixture.hpp
-        src/armnn/backends/test/Pooling2dTestImpl.hpp
-        src/armnn/backends/test/ReshapeTestImpl.hpp
-        src/armnn/backends/test/PermuteTestImpl.hpp
-        src/armnn/backends/test/FullyConnectedTestImpl.hpp
-        src/armnn/backends/test/SplitterTestImpl.hpp
-        src/armnn/backends/test/NormTestImpl.hpp
-        src/armnn/backends/test/BatchNormTestImpl.hpp
-        src/armnn/backends/test/WorkloadTestUtils.hpp
-        src/armnn/backends/test/CreateWorkloadRef.cpp
-        src/armnn/backends/test/QuantizeHelper.hpp)
+        src/backends/test/IsLayerSupportedTest.cpp
+        src/backends/test/IsLayerSupportedTestImpl.hpp
+        src/backends/test/Reference.cpp
+        src/backends/test/WorkloadDataValidation.cpp
+        src/backends/test/TensorCopyUtils.hpp
+        src/backends/test/TensorCopyUtils.cpp
+        src/backends/test/LayerTests.hpp
+        src/backends/test/LayerTests.cpp
+        src/backends/test/LayerReleaseConstantDataTest.cpp
+        src/backends/test/Conv2dTestImpl.hpp
+        src/backends/test/ActivationTestImpl.hpp
+        src/backends/test/ActivationFixture.hpp
+        src/backends/test/Pooling2dTestImpl.hpp
+        src/backends/test/ReshapeTestImpl.hpp
+        src/backends/test/PermuteTestImpl.hpp
+        src/backends/test/FullyConnectedTestImpl.hpp
+        src/backends/test/SplitterTestImpl.hpp
+        src/backends/test/NormTestImpl.hpp
+        src/backends/test/BatchNormTestImpl.hpp
+        src/backends/test/WorkloadTestUtils.hpp
+        src/backends/test/CreateWorkloadRef.cpp
+        src/backends/test/QuantizeHelper.hpp)
 
     if(ARMCOMPUTENEON)
         list(APPEND unittest_sources
-            src/armnn/backends/test/ArmComputeNeon.cpp
-            src/armnn/backends/test/CreateWorkloadNeon.cpp
+            src/backends/test/ArmComputeNeon.cpp
+            src/backends/test/CreateWorkloadNeon.cpp
             src/armnn/test/CreateWorkloadClNeon.hpp
             src/armnn/test/NeonTimerTest.cpp)
     endif()
 
     if(ARMCOMPUTECL)
         list(APPEND unittest_sources
-            src/armnn/backends/test/ArmComputeCl.cpp
-            src/armnn/backends/test/ClContextControlFixture.hpp
-            src/armnn/backends/test/CreateWorkloadCl.cpp
+            src/backends/test/ArmComputeCl.cpp
+            src/backends/test/ClContextControlFixture.hpp
+            src/backends/test/CreateWorkloadCl.cpp
             src/armnn/test/CreateWorkloadClNeon.hpp
             src/armnn/test/OpenClTimerTest.cpp
             src/armnn/test/FP16SupportTest.cpp)
@@ -679,7 +414,7 @@
 
     if(ARMCOMPUTENEON OR ARMCOMPUTECL)
         list(APPEND unittest_sources
-            src/armnn/backends/test/MemCopyTests.cpp)
+            src/backends/test/MemCopyTests.cpp)
     endif()
 
     if(BUILD_TF_PARSER)
@@ -766,6 +501,7 @@
     endif()
 
     add_executable_ex(UnitTests ${unittest_sources})
+    target_include_directories(UnitTests PRIVATE src)
     target_include_directories(UnitTests PRIVATE src/armnn)
     target_include_directories(UnitTests PRIVATE src/armnnUtils)
 
diff --git a/cmake/GlobalConfig.cmake b/cmake/GlobalConfig.cmake
index 47bdd5c..61ce4cd 100644
--- a/cmake/GlobalConfig.cmake
+++ b/cmake/GlobalConfig.cmake
@@ -348,3 +348,6 @@
 if(NOT BUILD_TF_LITE_PARSER)
     message(STATUS "Tensorflow Lite parser support is disabled")
 endif()
+
+# ArmNN source files required for all build options
+include_directories(SYSTEM third-party)
diff --git a/src/armnn/backends/ArmComputeTensorUtils.cpp b/src/backends/ArmComputeTensorUtils.cpp
similarity index 100%
rename from src/armnn/backends/ArmComputeTensorUtils.cpp
rename to src/backends/ArmComputeTensorUtils.cpp
diff --git a/src/armnn/backends/ArmComputeTensorUtils.hpp b/src/backends/ArmComputeTensorUtils.hpp
similarity index 100%
rename from src/armnn/backends/ArmComputeTensorUtils.hpp
rename to src/backends/ArmComputeTensorUtils.hpp
diff --git a/src/armnn/backends/ArmComputeUtils.hpp b/src/backends/ArmComputeUtils.hpp
similarity index 100%
rename from src/armnn/backends/ArmComputeUtils.hpp
rename to src/backends/ArmComputeUtils.hpp
diff --git a/src/backends/CMakeLists.txt b/src/backends/CMakeLists.txt
new file mode 100644
index 0000000..4a949c0
--- /dev/null
+++ b/src/backends/CMakeLists.txt
@@ -0,0 +1,74 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+list(APPEND armnnBackendsCommon_sources
+    ClContextControl.cpp
+    ClContextControl.hpp
+    ClLayerSupport.cpp
+    ClLayerSupport.hpp
+    ClWorkloadFactory.cpp
+    ClWorkloadFactory.hpp
+    ClWorkloads.hpp
+    CpuTensorHandle.cpp
+    CpuTensorHandleFwd.hpp
+    CpuTensorHandle.hpp
+    ITensorHandle.hpp
+    MakeWorkloadHelper.hpp
+    MemCopyWorkload.cpp
+    MemCopyWorkload.hpp
+    NeonLayerSupport.cpp
+    NeonLayerSupport.hpp
+    NeonWorkloadFactory.cpp
+    NeonWorkloadFactory.hpp
+    NeonWorkloads.hpp
+    OutputHandler.cpp
+    OutputHandler.hpp
+    RefLayerSupport.cpp
+    RefLayerSupport.hpp
+    RefWorkloadFactory.cpp
+    RefWorkloadFactory.hpp
+    RefWorkloads.hpp
+    StringMapping.cpp
+    StringMapping.hpp
+    WorkloadDataCollector.hpp
+    WorkloadData.cpp
+    WorkloadDataFwd.hpp
+    WorkloadData.hpp
+    WorkloadFactory.cpp
+    WorkloadFactory.hpp
+    Workload.hpp
+    WorkloadInfo.hpp
+    WorkloadUtils.hpp
+)
+
+if(ARMCOMPUTENEON OR ARMCOMPUTECL)
+    # Files shared by all ARM Compute backends
+    list(APPEND armnnBackendsCommon_sources
+        ArmComputeTensorUtils.hpp
+        ArmComputeTensorUtils.cpp
+        ArmComputeUtils.hpp
+    )
+endif()
+
+if(ARMCOMPUTENEON)
+    # Additionally include source files for ARM Compute NEON backend
+    list(APPEND armnnBackendsCommon_sources
+        NeonWorkloadUtils.cpp
+        NeonWorkloadUtils.hpp
+        NeonTensorHandle.hpp
+    )
+endif()
+
+if(ARMCOMPUTECL)
+    # Additionally include source files for ARM Compute OpenCL backend
+    list(APPEND armnnBackendsCommon_sources
+        ClTensorHandle.hpp
+    )
+endif()
+
+add_library(armnnBackendsCommon STATIC ${armnnBackendsCommon_sources})
+target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/src)
+target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
diff --git a/src/armnn/backends/ClContextControl.cpp b/src/backends/ClContextControl.cpp
similarity index 100%
rename from src/armnn/backends/ClContextControl.cpp
rename to src/backends/ClContextControl.cpp
diff --git a/src/armnn/backends/ClContextControl.hpp b/src/backends/ClContextControl.hpp
similarity index 100%
rename from src/armnn/backends/ClContextControl.hpp
rename to src/backends/ClContextControl.hpp
diff --git a/src/armnn/backends/ClLayerSupport.cpp b/src/backends/ClLayerSupport.cpp
similarity index 100%
rename from src/armnn/backends/ClLayerSupport.cpp
rename to src/backends/ClLayerSupport.cpp
diff --git a/src/armnn/backends/ClLayerSupport.hpp b/src/backends/ClLayerSupport.hpp
similarity index 100%
rename from src/armnn/backends/ClLayerSupport.hpp
rename to src/backends/ClLayerSupport.hpp
diff --git a/src/armnn/backends/ClTensorHandle.hpp b/src/backends/ClTensorHandle.hpp
similarity index 100%
rename from src/armnn/backends/ClTensorHandle.hpp
rename to src/backends/ClTensorHandle.hpp
diff --git a/src/armnn/backends/ClWorkloadFactory.cpp b/src/backends/ClWorkloadFactory.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloadFactory.cpp
rename to src/backends/ClWorkloadFactory.cpp
diff --git a/src/armnn/backends/ClWorkloadFactory.hpp b/src/backends/ClWorkloadFactory.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloadFactory.hpp
rename to src/backends/ClWorkloadFactory.hpp
diff --git a/src/armnn/backends/ClWorkloads.hpp b/src/backends/ClWorkloads.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads.hpp
rename to src/backends/ClWorkloads.hpp
diff --git a/src/backends/ClWorkloads/CMakeLists.txt b/src/backends/ClWorkloads/CMakeLists.txt
new file mode 100644
index 0000000..ac935b5
--- /dev/null
+++ b/src/backends/ClWorkloads/CMakeLists.txt
@@ -0,0 +1,89 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+list(APPEND armnnClBackend_sources
+    ClActivationFloatWorkload.cpp
+    ClActivationFloatWorkload.hpp
+    ClActivationUint8Workload.cpp
+    ClActivationUint8Workload.hpp
+    ClAdditionWorkload.cpp
+    ClAdditionWorkload.hpp
+    ClBaseConstantWorkload.cpp
+    ClBaseConstantWorkload.hpp
+    ClBaseMergerWorkload.hpp
+    ClBaseSplitterWorkload.hpp
+    ClBatchNormalizationFloatWorkload.cpp
+    ClBatchNormalizationFloatWorkload.hpp
+    ClConstantFloatWorkload.cpp
+    ClConstantFloatWorkload.hpp
+    ClConstantUint8Workload.cpp
+    ClConstantUint8Workload.hpp
+    ClConvertFp16ToFp32Workload.cpp
+    ClConvertFp16ToFp32Workload.hpp
+    ClConvertFp32ToFp16Workload.cpp
+    ClConvertFp32ToFp16Workload.hpp
+    ClConvolution2dBaseWorkload.cpp
+    ClConvolution2dBaseWorkload.hpp
+    ClConvolution2dFloatWorkload.cpp
+    ClConvolution2dFloatWorkload.hpp
+    ClConvolution2dUint8Workload.cpp
+    ClConvolution2dUint8Workload.hpp
+    ClDepthwiseConvolutionBaseWorkload.cpp
+    ClDepthwiseConvolutionBaseWorkload.hpp
+    ClDepthwiseConvolutionFloatWorkload.cpp
+    ClDepthwiseConvolutionFloatWorkload.hpp
+    ClDepthwiseConvolutionUint8Workload.cpp
+    ClDepthwiseConvolutionUint8Workload.hpp
+    ClDivisionFloatWorkload.cpp
+    ClDivisionFloatWorkload.hpp
+    ClFloorFloatWorkload.cpp
+    ClFloorFloatWorkload.hpp
+    ClFullyConnectedWorkload.cpp
+    ClFullyConnectedWorkload.hpp
+    ClL2NormalizationFloatWorkload.cpp
+    ClL2NormalizationFloatWorkload.hpp
+    ClLstmFloatWorkload.cpp
+    ClLstmFloatWorkload.hpp
+    ClMergerFloatWorkload.cpp
+    ClMergerFloatWorkload.hpp
+    ClMergerUint8Workload.cpp
+    ClMergerUint8Workload.hpp
+    ClMultiplicationFloatWorkload.cpp
+    ClMultiplicationFloatWorkload.hpp
+    ClNormalizationFloatWorkload.cpp
+    ClNormalizationFloatWorkload.hpp
+    ClPermuteWorkload.cpp
+    ClPermuteWorkload.hpp
+    ClPooling2dBaseWorkload.cpp
+    ClPooling2dBaseWorkload.hpp
+    ClPooling2dFloatWorkload.cpp
+    ClPooling2dFloatWorkload.hpp
+    ClPooling2dUint8Workload.cpp
+    ClPooling2dUint8Workload.hpp
+    ClReshapeFloatWorkload.cpp
+    ClReshapeFloatWorkload.hpp
+    ClReshapeUint8Workload.cpp
+    ClReshapeUint8Workload.hpp
+    ClResizeBilinearFloatWorkload.cpp
+    ClResizeBilinearFloatWorkload.hpp
+    ClSoftmaxBaseWorkload.cpp
+    ClSoftmaxBaseWorkload.hpp
+    ClSoftmaxFloatWorkload.cpp
+    ClSoftmaxFloatWorkload.hpp
+    ClSoftmaxUint8Workload.cpp
+    ClSoftmaxUint8Workload.hpp
+    ClSplitterFloatWorkload.cpp
+    ClSplitterFloatWorkload.hpp
+    ClSplitterUint8Workload.cpp
+    ClSplitterUint8Workload.hpp
+    ClSubtractionWorkload.cpp
+    ClSubtractionWorkload.hpp
+    ClWorkloadUtils.hpp
+)
+
+add_library(armnnClBackend STATIC ${armnnClBackend_sources})
+target_include_directories(armnnClBackend PRIVATE ${PROJECT_SOURCE_DIR}/src)
+target_include_directories(armnnClBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(armnnClBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
diff --git a/src/armnn/backends/ClWorkloads/ClActivationFloatWorkload.cpp b/src/backends/ClWorkloads/ClActivationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClActivationFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClActivationFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClActivationFloatWorkload.hpp b/src/backends/ClWorkloads/ClActivationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClActivationFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClActivationFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClActivationUint8Workload.cpp b/src/backends/ClWorkloads/ClActivationUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClActivationUint8Workload.cpp
rename to src/backends/ClWorkloads/ClActivationUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClActivationUint8Workload.hpp b/src/backends/ClWorkloads/ClActivationUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClActivationUint8Workload.hpp
rename to src/backends/ClWorkloads/ClActivationUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClAdditionWorkload.cpp b/src/backends/ClWorkloads/ClAdditionWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClAdditionWorkload.cpp
rename to src/backends/ClWorkloads/ClAdditionWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClAdditionWorkload.hpp b/src/backends/ClWorkloads/ClAdditionWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClAdditionWorkload.hpp
rename to src/backends/ClWorkloads/ClAdditionWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClBaseConstantWorkload.cpp b/src/backends/ClWorkloads/ClBaseConstantWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClBaseConstantWorkload.cpp
rename to src/backends/ClWorkloads/ClBaseConstantWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClBaseConstantWorkload.hpp b/src/backends/ClWorkloads/ClBaseConstantWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClBaseConstantWorkload.hpp
rename to src/backends/ClWorkloads/ClBaseConstantWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClBaseMergerWorkload.hpp b/src/backends/ClWorkloads/ClBaseMergerWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClBaseMergerWorkload.hpp
rename to src/backends/ClWorkloads/ClBaseMergerWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClBaseSplitterWorkload.hpp b/src/backends/ClWorkloads/ClBaseSplitterWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClBaseSplitterWorkload.hpp
rename to src/backends/ClWorkloads/ClBaseSplitterWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.cpp b/src/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.hpp b/src/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClBatchNormalizationFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClConstantFloatWorkload.cpp b/src/backends/ClWorkloads/ClConstantFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConstantFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClConstantFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClConstantFloatWorkload.hpp b/src/backends/ClWorkloads/ClConstantFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConstantFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClConstantFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClConstantUint8Workload.cpp b/src/backends/ClWorkloads/ClConstantUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConstantUint8Workload.cpp
rename to src/backends/ClWorkloads/ClConstantUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClConstantUint8Workload.hpp b/src/backends/ClWorkloads/ClConstantUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConstantUint8Workload.hpp
rename to src/backends/ClWorkloads/ClConstantUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvertFp16ToFp32Workload.cpp b/src/backends/ClWorkloads/ClConvertFp16ToFp32Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvertFp16ToFp32Workload.cpp
rename to src/backends/ClWorkloads/ClConvertFp16ToFp32Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvertFp16ToFp32Workload.hpp b/src/backends/ClWorkloads/ClConvertFp16ToFp32Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvertFp16ToFp32Workload.hpp
rename to src/backends/ClWorkloads/ClConvertFp16ToFp32Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvertFp32ToFp16Workload.cpp b/src/backends/ClWorkloads/ClConvertFp32ToFp16Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvertFp32ToFp16Workload.cpp
rename to src/backends/ClWorkloads/ClConvertFp32ToFp16Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvertFp32ToFp16Workload.hpp b/src/backends/ClWorkloads/ClConvertFp32ToFp16Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvertFp32ToFp16Workload.hpp
rename to src/backends/ClWorkloads/ClConvertFp32ToFp16Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvolution2dBaseWorkload.cpp b/src/backends/ClWorkloads/ClConvolution2dBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvolution2dBaseWorkload.cpp
rename to src/backends/ClWorkloads/ClConvolution2dBaseWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvolution2dBaseWorkload.hpp b/src/backends/ClWorkloads/ClConvolution2dBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvolution2dBaseWorkload.hpp
rename to src/backends/ClWorkloads/ClConvolution2dBaseWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvolution2dFloatWorkload.cpp b/src/backends/ClWorkloads/ClConvolution2dFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvolution2dFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClConvolution2dFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvolution2dFloatWorkload.hpp b/src/backends/ClWorkloads/ClConvolution2dFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvolution2dFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClConvolution2dFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvolution2dUint8Workload.cpp b/src/backends/ClWorkloads/ClConvolution2dUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvolution2dUint8Workload.cpp
rename to src/backends/ClWorkloads/ClConvolution2dUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClConvolution2dUint8Workload.hpp b/src/backends/ClWorkloads/ClConvolution2dUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClConvolution2dUint8Workload.hpp
rename to src/backends/ClWorkloads/ClConvolution2dUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.cpp b/src/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.cpp
rename to src/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.hpp b/src/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.hpp
rename to src/backends/ClWorkloads/ClDepthwiseConvolutionBaseWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.cpp b/src/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.hpp b/src/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClDepthwiseConvolutionFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.cpp b/src/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.cpp
rename to src/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.hpp b/src/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.hpp
rename to src/backends/ClWorkloads/ClDepthwiseConvolutionUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClDivisionFloatWorkload.cpp b/src/backends/ClWorkloads/ClDivisionFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDivisionFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClDivisionFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClDivisionFloatWorkload.hpp b/src/backends/ClWorkloads/ClDivisionFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClDivisionFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClDivisionFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClFloorFloatWorkload.cpp b/src/backends/ClWorkloads/ClFloorFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClFloorFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClFloorFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClFloorFloatWorkload.hpp b/src/backends/ClWorkloads/ClFloorFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClFloorFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClFloorFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClFullyConnectedWorkload.cpp b/src/backends/ClWorkloads/ClFullyConnectedWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClFullyConnectedWorkload.cpp
rename to src/backends/ClWorkloads/ClFullyConnectedWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClFullyConnectedWorkload.hpp b/src/backends/ClWorkloads/ClFullyConnectedWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClFullyConnectedWorkload.hpp
rename to src/backends/ClWorkloads/ClFullyConnectedWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClL2NormalizationFloatWorkload.cpp b/src/backends/ClWorkloads/ClL2NormalizationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClL2NormalizationFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClL2NormalizationFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClL2NormalizationFloatWorkload.hpp b/src/backends/ClWorkloads/ClL2NormalizationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClL2NormalizationFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClL2NormalizationFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClLstmFloatWorkload.cpp b/src/backends/ClWorkloads/ClLstmFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClLstmFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClLstmFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClLstmFloatWorkload.hpp b/src/backends/ClWorkloads/ClLstmFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClLstmFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClLstmFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClMergerFloatWorkload.cpp b/src/backends/ClWorkloads/ClMergerFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClMergerFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClMergerFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClMergerFloatWorkload.hpp b/src/backends/ClWorkloads/ClMergerFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClMergerFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClMergerFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClMergerUint8Workload.cpp b/src/backends/ClWorkloads/ClMergerUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClMergerUint8Workload.cpp
rename to src/backends/ClWorkloads/ClMergerUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClMergerUint8Workload.hpp b/src/backends/ClWorkloads/ClMergerUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClMergerUint8Workload.hpp
rename to src/backends/ClWorkloads/ClMergerUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClMultiplicationFloatWorkload.cpp b/src/backends/ClWorkloads/ClMultiplicationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClMultiplicationFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClMultiplicationFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClMultiplicationFloatWorkload.hpp b/src/backends/ClWorkloads/ClMultiplicationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClMultiplicationFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClMultiplicationFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp b/src/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClNormalizationFloatWorkload.hpp b/src/backends/ClWorkloads/ClNormalizationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClNormalizationFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClNormalizationFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClPermuteWorkload.cpp b/src/backends/ClWorkloads/ClPermuteWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPermuteWorkload.cpp
rename to src/backends/ClWorkloads/ClPermuteWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClPermuteWorkload.hpp b/src/backends/ClWorkloads/ClPermuteWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPermuteWorkload.hpp
rename to src/backends/ClWorkloads/ClPermuteWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClPooling2dBaseWorkload.cpp b/src/backends/ClWorkloads/ClPooling2dBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPooling2dBaseWorkload.cpp
rename to src/backends/ClWorkloads/ClPooling2dBaseWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClPooling2dBaseWorkload.hpp b/src/backends/ClWorkloads/ClPooling2dBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPooling2dBaseWorkload.hpp
rename to src/backends/ClWorkloads/ClPooling2dBaseWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClPooling2dFloatWorkload.cpp b/src/backends/ClWorkloads/ClPooling2dFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPooling2dFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClPooling2dFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClPooling2dFloatWorkload.hpp b/src/backends/ClWorkloads/ClPooling2dFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPooling2dFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClPooling2dFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClPooling2dUint8Workload.cpp b/src/backends/ClWorkloads/ClPooling2dUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPooling2dUint8Workload.cpp
rename to src/backends/ClWorkloads/ClPooling2dUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClPooling2dUint8Workload.hpp b/src/backends/ClWorkloads/ClPooling2dUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClPooling2dUint8Workload.hpp
rename to src/backends/ClWorkloads/ClPooling2dUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClReshapeFloatWorkload.cpp b/src/backends/ClWorkloads/ClReshapeFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClReshapeFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClReshapeFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClReshapeFloatWorkload.hpp b/src/backends/ClWorkloads/ClReshapeFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClReshapeFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClReshapeFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClReshapeUint8Workload.cpp b/src/backends/ClWorkloads/ClReshapeUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClReshapeUint8Workload.cpp
rename to src/backends/ClWorkloads/ClReshapeUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClReshapeUint8Workload.hpp b/src/backends/ClWorkloads/ClReshapeUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClReshapeUint8Workload.hpp
rename to src/backends/ClWorkloads/ClReshapeUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClResizeBilinearFloatWorkload.cpp b/src/backends/ClWorkloads/ClResizeBilinearFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClResizeBilinearFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClResizeBilinearFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClResizeBilinearFloatWorkload.hpp b/src/backends/ClWorkloads/ClResizeBilinearFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClResizeBilinearFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClResizeBilinearFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClSoftmaxBaseWorkload.cpp b/src/backends/ClWorkloads/ClSoftmaxBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSoftmaxBaseWorkload.cpp
rename to src/backends/ClWorkloads/ClSoftmaxBaseWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClSoftmaxBaseWorkload.hpp b/src/backends/ClWorkloads/ClSoftmaxBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSoftmaxBaseWorkload.hpp
rename to src/backends/ClWorkloads/ClSoftmaxBaseWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClSoftmaxFloatWorkload.cpp b/src/backends/ClWorkloads/ClSoftmaxFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSoftmaxFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClSoftmaxFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClSoftmaxFloatWorkload.hpp b/src/backends/ClWorkloads/ClSoftmaxFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSoftmaxFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClSoftmaxFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClSoftmaxUint8Workload.cpp b/src/backends/ClWorkloads/ClSoftmaxUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSoftmaxUint8Workload.cpp
rename to src/backends/ClWorkloads/ClSoftmaxUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClSoftmaxUint8Workload.hpp b/src/backends/ClWorkloads/ClSoftmaxUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSoftmaxUint8Workload.hpp
rename to src/backends/ClWorkloads/ClSoftmaxUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClSplitterFloatWorkload.cpp b/src/backends/ClWorkloads/ClSplitterFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSplitterFloatWorkload.cpp
rename to src/backends/ClWorkloads/ClSplitterFloatWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClSplitterFloatWorkload.hpp b/src/backends/ClWorkloads/ClSplitterFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSplitterFloatWorkload.hpp
rename to src/backends/ClWorkloads/ClSplitterFloatWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClSplitterUint8Workload.cpp b/src/backends/ClWorkloads/ClSplitterUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSplitterUint8Workload.cpp
rename to src/backends/ClWorkloads/ClSplitterUint8Workload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClSplitterUint8Workload.hpp b/src/backends/ClWorkloads/ClSplitterUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSplitterUint8Workload.hpp
rename to src/backends/ClWorkloads/ClSplitterUint8Workload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClSubtractionWorkload.cpp b/src/backends/ClWorkloads/ClSubtractionWorkload.cpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSubtractionWorkload.cpp
rename to src/backends/ClWorkloads/ClSubtractionWorkload.cpp
diff --git a/src/armnn/backends/ClWorkloads/ClSubtractionWorkload.hpp b/src/backends/ClWorkloads/ClSubtractionWorkload.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClSubtractionWorkload.hpp
rename to src/backends/ClWorkloads/ClSubtractionWorkload.hpp
diff --git a/src/armnn/backends/ClWorkloads/ClWorkloadUtils.hpp b/src/backends/ClWorkloads/ClWorkloadUtils.hpp
similarity index 100%
rename from src/armnn/backends/ClWorkloads/ClWorkloadUtils.hpp
rename to src/backends/ClWorkloads/ClWorkloadUtils.hpp
diff --git a/src/backends/ClWorkloads/backend.cmake b/src/backends/ClWorkloads/backend.cmake
new file mode 100644
index 0000000..6f8eda1
--- /dev/null
+++ b/src/backends/ClWorkloads/backend.cmake
@@ -0,0 +1,9 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+if(ARMCOMPUTECL)
+    add_subdirectory(${PROJECT_SOURCE_DIR}/src/backends/ClWorkloads)
+    list(APPEND armnnLibraries armnnClBackend)
+endif()
diff --git a/src/armnn/backends/CpuTensorHandle.cpp b/src/backends/CpuTensorHandle.cpp
similarity index 100%
rename from src/armnn/backends/CpuTensorHandle.cpp
rename to src/backends/CpuTensorHandle.cpp
diff --git a/src/armnn/backends/CpuTensorHandle.hpp b/src/backends/CpuTensorHandle.hpp
similarity index 100%
rename from src/armnn/backends/CpuTensorHandle.hpp
rename to src/backends/CpuTensorHandle.hpp
diff --git a/src/armnn/backends/CpuTensorHandleFwd.hpp b/src/backends/CpuTensorHandleFwd.hpp
similarity index 100%
rename from src/armnn/backends/CpuTensorHandleFwd.hpp
rename to src/backends/CpuTensorHandleFwd.hpp
diff --git a/src/armnn/backends/ITensorHandle.hpp b/src/backends/ITensorHandle.hpp
similarity index 100%
rename from src/armnn/backends/ITensorHandle.hpp
rename to src/backends/ITensorHandle.hpp
diff --git a/src/armnn/backends/MakeWorkloadHelper.hpp b/src/backends/MakeWorkloadHelper.hpp
similarity index 100%
rename from src/armnn/backends/MakeWorkloadHelper.hpp
rename to src/backends/MakeWorkloadHelper.hpp
diff --git a/src/armnn/backends/MemCopyWorkload.cpp b/src/backends/MemCopyWorkload.cpp
similarity index 100%
rename from src/armnn/backends/MemCopyWorkload.cpp
rename to src/backends/MemCopyWorkload.cpp
diff --git a/src/armnn/backends/MemCopyWorkload.hpp b/src/backends/MemCopyWorkload.hpp
similarity index 100%
rename from src/armnn/backends/MemCopyWorkload.hpp
rename to src/backends/MemCopyWorkload.hpp
diff --git a/src/armnn/backends/NeonLayerSupport.cpp b/src/backends/NeonLayerSupport.cpp
similarity index 100%
rename from src/armnn/backends/NeonLayerSupport.cpp
rename to src/backends/NeonLayerSupport.cpp
diff --git a/src/armnn/backends/NeonLayerSupport.hpp b/src/backends/NeonLayerSupport.hpp
similarity index 100%
rename from src/armnn/backends/NeonLayerSupport.hpp
rename to src/backends/NeonLayerSupport.hpp
diff --git a/src/armnn/backends/NeonTensorHandle.hpp b/src/backends/NeonTensorHandle.hpp
similarity index 100%
rename from src/armnn/backends/NeonTensorHandle.hpp
rename to src/backends/NeonTensorHandle.hpp
diff --git a/src/armnn/backends/NeonWorkloadFactory.cpp b/src/backends/NeonWorkloadFactory.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloadFactory.cpp
rename to src/backends/NeonWorkloadFactory.cpp
diff --git a/src/armnn/backends/NeonWorkloadFactory.hpp b/src/backends/NeonWorkloadFactory.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloadFactory.hpp
rename to src/backends/NeonWorkloadFactory.hpp
diff --git a/src/armnn/backends/NeonWorkloadUtils.cpp b/src/backends/NeonWorkloadUtils.cpp
similarity index 97%
rename from src/armnn/backends/NeonWorkloadUtils.cpp
rename to src/backends/NeonWorkloadUtils.cpp
index 010299f..8782801 100644
--- a/src/armnn/backends/NeonWorkloadUtils.cpp
+++ b/src/backends/NeonWorkloadUtils.cpp
@@ -19,7 +19,7 @@
 #include "Profiling.hpp"
 
 #include "NeonLayerSupport.hpp"
-#include "../../../include/armnn/Types.hpp"
+#include "armnn/Types.hpp"
 #include "Half.hpp"
 
 using namespace armnn::armcomputetensorutils;
diff --git a/src/armnn/backends/NeonWorkloadUtils.hpp b/src/backends/NeonWorkloadUtils.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloadUtils.hpp
rename to src/backends/NeonWorkloadUtils.hpp
diff --git a/src/armnn/backends/NeonWorkloads.hpp b/src/backends/NeonWorkloads.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads.hpp
rename to src/backends/NeonWorkloads.hpp
diff --git a/src/backends/NeonWorkloads/CMakeLists.txt b/src/backends/NeonWorkloads/CMakeLists.txt
new file mode 100644
index 0000000..02cb53d
--- /dev/null
+++ b/src/backends/NeonWorkloads/CMakeLists.txt
@@ -0,0 +1,83 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+list(APPEND armnnNeonBackend_sources
+    NeonActivationFloatWorkload.cpp
+    NeonActivationFloatWorkload.hpp
+    NeonActivationUint8Workload.cpp
+    NeonActivationUint8Workload.hpp
+    NeonAdditionFloatWorkload.cpp
+    NeonAdditionFloatWorkload.hpp
+    NeonBaseConstantWorkload.hpp
+    NeonBaseMergerWorkload.hpp
+    NeonBaseSplitterWorkload.hpp
+    NeonBatchNormalizationFloatWorkload.cpp
+    NeonBatchNormalizationFloatWorkload.hpp
+    NeonConstantFloatWorkload.cpp
+    NeonConstantFloatWorkload.hpp
+    NeonConstantUint8Workload.cpp
+    NeonConstantUint8Workload.hpp
+    NeonConvertFp16ToFp32Workload.cpp
+    NeonConvertFp16ToFp32Workload.hpp
+    NeonConvertFp32ToFp16Workload.cpp
+    NeonConvertFp32ToFp16Workload.hpp
+    NeonConvolution2dBaseWorkload.cpp
+    NeonConvolution2dBaseWorkload.hpp
+    NeonConvolution2dFloatWorkload.cpp
+    NeonConvolution2dFloatWorkload.hpp
+    NeonConvolution2dUint8Workload.cpp
+    NeonConvolution2dUint8Workload.hpp
+    NeonDepthwiseConvolutionBaseWorkload.cpp
+    NeonDepthwiseConvolutionBaseWorkload.hpp
+    NeonDepthwiseConvolutionFloatWorkload.cpp
+    NeonDepthwiseConvolutionFloatWorkload.hpp
+    NeonDepthwiseConvolutionUint8Workload.cpp
+    NeonDepthwiseConvolutionUint8Workload.hpp
+    NeonFloorFloatWorkload.cpp
+    NeonFloorFloatWorkload.hpp
+    NeonFullyConnectedFloatWorkload.cpp
+    NeonFullyConnectedFloatWorkload.hpp
+    NeonL2NormalizationFloatWorkload.cpp
+    NeonL2NormalizationFloatWorkload.hpp
+    NeonLstmFloatWorkload.cpp
+    NeonLstmFloatWorkload.hpp
+    NeonMergerFloatWorkload.cpp
+    NeonMergerFloatWorkload.hpp
+    NeonMergerUint8Workload.cpp
+    NeonMergerUint8Workload.hpp
+    NeonMultiplicationFloatWorkload.cpp
+    NeonMultiplicationFloatWorkload.hpp
+    NeonNormalizationFloatWorkload.cpp
+    NeonNormalizationFloatWorkload.hpp
+    NeonPermuteWorkload.cpp
+    NeonPermuteWorkload.hpp
+    NeonPooling2dBaseWorkload.cpp
+    NeonPooling2dBaseWorkload.hpp
+    NeonPooling2dFloatWorkload.cpp
+    NeonPooling2dFloatWorkload.hpp
+    NeonPooling2dUint8Workload.cpp
+    NeonPooling2dUint8Workload.hpp
+    NeonReshapeFloatWorkload.cpp
+    NeonReshapeFloatWorkload.hpp
+    NeonReshapeUint8Workload.cpp
+    NeonReshapeUint8Workload.hpp
+    NeonSoftmaxBaseWorkload.cpp
+    NeonSoftmaxBaseWorkload.hpp
+    NeonSoftmaxFloatWorkload.cpp
+    NeonSoftmaxFloatWorkload.hpp
+    NeonSoftmaxUint8Workload.cpp
+    NeonSoftmaxUint8Workload.hpp
+    NeonSplitterFloatWorkload.cpp
+    NeonSplitterFloatWorkload.hpp
+    NeonSplitterUint8Workload.cpp
+    NeonSplitterUint8Workload.hpp
+    NeonSubtractionFloatWorkload.cpp
+    NeonSubtractionFloatWorkload.hpp
+)
+
+add_library(armnnNeonBackend STATIC ${armnnNeonBackend_sources})
+target_include_directories(armnnNeonBackend PRIVATE ${PROJECT_SOURCE_DIR}/src)
+target_include_directories(armnnNeonBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(armnnNeonBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
diff --git a/src/armnn/backends/NeonWorkloads/NeonActivationFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonActivationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonActivationFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonActivationFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonActivationFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonActivationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonActivationFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonActivationFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonActivationUint8Workload.cpp b/src/backends/NeonWorkloads/NeonActivationUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonActivationUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonActivationUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonActivationUint8Workload.hpp b/src/backends/NeonWorkloads/NeonActivationUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonActivationUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonActivationUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonAdditionFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonAdditionFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonAdditionFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonAdditionFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonAdditionFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonAdditionFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonAdditionFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonAdditionFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonBaseConstantWorkload.hpp b/src/backends/NeonWorkloads/NeonBaseConstantWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonBaseConstantWorkload.hpp
rename to src/backends/NeonWorkloads/NeonBaseConstantWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonBaseMergerWorkload.hpp b/src/backends/NeonWorkloads/NeonBaseMergerWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonBaseMergerWorkload.hpp
rename to src/backends/NeonWorkloads/NeonBaseMergerWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonBaseSplitterWorkload.hpp b/src/backends/NeonWorkloads/NeonBaseSplitterWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonBaseSplitterWorkload.hpp
rename to src/backends/NeonWorkloads/NeonBaseSplitterWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp
similarity index 98%
rename from src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp
index f47dc04..6f5c948 100644
--- a/src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp
+++ b/src/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.cpp
@@ -6,7 +6,7 @@
 #include "NeonBatchNormalizationFloatWorkload.hpp"
 #include "backends/CpuTensorHandle.hpp"
 #include "backends/ArmComputeTensorUtils.hpp"
-#include "../../../../include/armnn/ArmNN.hpp"
+#include "armnn/ArmNN.hpp"
 
 namespace armnn
 {
diff --git a/src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonBatchNormalizationFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConstantFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonConstantFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConstantFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonConstantFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConstantFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonConstantFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConstantFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonConstantFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConstantUint8Workload.cpp b/src/backends/NeonWorkloads/NeonConstantUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConstantUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonConstantUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConstantUint8Workload.hpp b/src/backends/NeonWorkloads/NeonConstantUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConstantUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonConstantUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.cpp b/src/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.cpp
rename to src/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.hpp b/src/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.hpp
rename to src/backends/NeonWorkloads/NeonConvertFp16ToFp32Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.cpp b/src/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.cpp
rename to src/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.hpp b/src/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.hpp
rename to src/backends/NeonWorkloads/NeonConvertFp32ToFp16Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.cpp b/src/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.cpp
rename to src/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.hpp b/src/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.hpp
rename to src/backends/NeonWorkloads/NeonConvolution2dBaseWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonConvolution2dFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvolution2dUint8Workload.cpp b/src/backends/NeonWorkloads/NeonConvolution2dUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvolution2dUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonConvolution2dUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonConvolution2dUint8Workload.hpp b/src/backends/NeonWorkloads/NeonConvolution2dUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonConvolution2dUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonConvolution2dUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.cpp b/src/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.cpp
rename to src/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.hpp b/src/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.hpp
rename to src/backends/NeonWorkloads/NeonDepthwiseConvolutionBaseWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonDepthwiseConvolutionFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.cpp b/src/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.hpp b/src/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonDepthwiseConvolutionUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonFloorFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonFloorFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonFloorFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonFloorFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonFloorFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonFloorFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonFloorFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonFloorFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonFullyConnectedFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonL2NormalizationFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonLstmFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonLstmFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonLstmFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonLstmFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonLstmFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonLstmFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonLstmFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonLstmFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonMergerFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonMergerFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonMergerFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonMergerFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonMergerFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonMergerFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonMergerFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonMergerFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonMergerUint8Workload.cpp b/src/backends/NeonWorkloads/NeonMergerUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonMergerUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonMergerUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonMergerUint8Workload.hpp b/src/backends/NeonWorkloads/NeonMergerUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonMergerUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonMergerUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonMultiplicationFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonNormalizationFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonNormalizationFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonNormalizationFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonNormalizationFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonNormalizationFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonNormalizationFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonNormalizationFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonNormalizationFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPermuteWorkload.cpp b/src/backends/NeonWorkloads/NeonPermuteWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPermuteWorkload.cpp
rename to src/backends/NeonWorkloads/NeonPermuteWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPermuteWorkload.hpp b/src/backends/NeonWorkloads/NeonPermuteWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPermuteWorkload.hpp
rename to src/backends/NeonWorkloads/NeonPermuteWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPooling2dBaseWorkload.cpp b/src/backends/NeonWorkloads/NeonPooling2dBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPooling2dBaseWorkload.cpp
rename to src/backends/NeonWorkloads/NeonPooling2dBaseWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPooling2dBaseWorkload.hpp b/src/backends/NeonWorkloads/NeonPooling2dBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPooling2dBaseWorkload.hpp
rename to src/backends/NeonWorkloads/NeonPooling2dBaseWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPooling2dFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonPooling2dFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPooling2dFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonPooling2dFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPooling2dFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonPooling2dFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPooling2dFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonPooling2dFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPooling2dUint8Workload.cpp b/src/backends/NeonWorkloads/NeonPooling2dUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPooling2dUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonPooling2dUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonPooling2dUint8Workload.hpp b/src/backends/NeonWorkloads/NeonPooling2dUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonPooling2dUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonPooling2dUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonReshapeFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonReshapeFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonReshapeFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonReshapeFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonReshapeFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonReshapeFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonReshapeFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonReshapeFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonReshapeUint8Workload.cpp b/src/backends/NeonWorkloads/NeonReshapeUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonReshapeUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonReshapeUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonReshapeUint8Workload.hpp b/src/backends/NeonWorkloads/NeonReshapeUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonReshapeUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonReshapeUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.cpp b/src/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.cpp
rename to src/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.hpp b/src/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.hpp
rename to src/backends/NeonWorkloads/NeonSoftmaxBaseWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonSoftmaxFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSoftmaxUint8Workload.cpp b/src/backends/NeonWorkloads/NeonSoftmaxUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSoftmaxUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonSoftmaxUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSoftmaxUint8Workload.hpp b/src/backends/NeonWorkloads/NeonSoftmaxUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSoftmaxUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonSoftmaxUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSplitterFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonSplitterFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSplitterFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonSplitterFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSplitterFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonSplitterFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSplitterFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonSplitterFloatWorkload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSplitterUint8Workload.cpp b/src/backends/NeonWorkloads/NeonSplitterUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSplitterUint8Workload.cpp
rename to src/backends/NeonWorkloads/NeonSplitterUint8Workload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSplitterUint8Workload.hpp b/src/backends/NeonWorkloads/NeonSplitterUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSplitterUint8Workload.hpp
rename to src/backends/NeonWorkloads/NeonSplitterUint8Workload.hpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSubtractionFloatWorkload.cpp b/src/backends/NeonWorkloads/NeonSubtractionFloatWorkload.cpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSubtractionFloatWorkload.cpp
rename to src/backends/NeonWorkloads/NeonSubtractionFloatWorkload.cpp
diff --git a/src/armnn/backends/NeonWorkloads/NeonSubtractionFloatWorkload.hpp b/src/backends/NeonWorkloads/NeonSubtractionFloatWorkload.hpp
similarity index 100%
rename from src/armnn/backends/NeonWorkloads/NeonSubtractionFloatWorkload.hpp
rename to src/backends/NeonWorkloads/NeonSubtractionFloatWorkload.hpp
diff --git a/src/backends/NeonWorkloads/backend.cmake b/src/backends/NeonWorkloads/backend.cmake
new file mode 100644
index 0000000..f0908c5
--- /dev/null
+++ b/src/backends/NeonWorkloads/backend.cmake
@@ -0,0 +1,9 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+if(ARMCOMPUTENEON)
+    add_subdirectory(${PROJECT_SOURCE_DIR}/src/backends/NeonWorkloads)
+    list(APPEND armnnLibraries armnnNeonBackend)
+endif()
diff --git a/src/armnn/backends/OutputHandler.cpp b/src/backends/OutputHandler.cpp
similarity index 100%
rename from src/armnn/backends/OutputHandler.cpp
rename to src/backends/OutputHandler.cpp
diff --git a/src/armnn/backends/OutputHandler.hpp b/src/backends/OutputHandler.hpp
similarity index 100%
rename from src/armnn/backends/OutputHandler.hpp
rename to src/backends/OutputHandler.hpp
diff --git a/src/armnn/backends/RefLayerSupport.cpp b/src/backends/RefLayerSupport.cpp
similarity index 100%
rename from src/armnn/backends/RefLayerSupport.cpp
rename to src/backends/RefLayerSupport.cpp
diff --git a/src/armnn/backends/RefLayerSupport.hpp b/src/backends/RefLayerSupport.hpp
similarity index 100%
rename from src/armnn/backends/RefLayerSupport.hpp
rename to src/backends/RefLayerSupport.hpp
diff --git a/src/armnn/backends/RefWorkloadFactory.cpp b/src/backends/RefWorkloadFactory.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloadFactory.cpp
rename to src/backends/RefWorkloadFactory.cpp
diff --git a/src/armnn/backends/RefWorkloadFactory.hpp b/src/backends/RefWorkloadFactory.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloadFactory.hpp
rename to src/backends/RefWorkloadFactory.hpp
diff --git a/src/armnn/backends/RefWorkloads.hpp b/src/backends/RefWorkloads.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads.hpp
rename to src/backends/RefWorkloads.hpp
diff --git a/src/armnn/backends/RefWorkloads/Activation.cpp b/src/backends/RefWorkloads/Activation.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Activation.cpp
rename to src/backends/RefWorkloads/Activation.cpp
diff --git a/src/armnn/backends/RefWorkloads/Activation.hpp b/src/backends/RefWorkloads/Activation.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Activation.hpp
rename to src/backends/RefWorkloads/Activation.hpp
diff --git a/src/armnn/backends/RefWorkloads/ArithmeticFunction.cpp b/src/backends/RefWorkloads/ArithmeticFunction.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/ArithmeticFunction.cpp
rename to src/backends/RefWorkloads/ArithmeticFunction.cpp
diff --git a/src/armnn/backends/RefWorkloads/ArithmeticFunction.hpp b/src/backends/RefWorkloads/ArithmeticFunction.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/ArithmeticFunction.hpp
rename to src/backends/RefWorkloads/ArithmeticFunction.hpp
diff --git a/src/armnn/backends/RefWorkloads/BatchNormImpl.hpp b/src/backends/RefWorkloads/BatchNormImpl.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/BatchNormImpl.hpp
rename to src/backends/RefWorkloads/BatchNormImpl.hpp
diff --git a/src/armnn/backends/RefWorkloads/Broadcast.cpp b/src/backends/RefWorkloads/Broadcast.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Broadcast.cpp
rename to src/backends/RefWorkloads/Broadcast.cpp
diff --git a/src/armnn/backends/RefWorkloads/Broadcast.hpp b/src/backends/RefWorkloads/Broadcast.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Broadcast.hpp
rename to src/backends/RefWorkloads/Broadcast.hpp
diff --git a/src/backends/RefWorkloads/CMakeLists.txt b/src/backends/RefWorkloads/CMakeLists.txt
new file mode 100644
index 0000000..0f4bfe1
--- /dev/null
+++ b/src/backends/RefWorkloads/CMakeLists.txt
@@ -0,0 +1,101 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+list(APPEND armnnRefBackend_sources
+    Activation.cpp
+    Activation.hpp
+    ArithmeticFunction.cpp
+    ArithmeticFunction.hpp
+    BatchNormImpl.hpp
+    Broadcast.cpp
+    Broadcast.hpp
+    ConvImpl.cpp
+    ConvImpl.hpp
+    FullyConnected.cpp
+    FullyConnected.hpp
+    Merger.hpp
+    Pooling2d.cpp
+    Pooling2d.hpp
+    RefActivationFloat32Workload.cpp
+    RefActivationFloat32Workload.hpp
+    RefActivationUint8Workload.cpp
+    RefActivationUint8Workload.hpp
+    RefArithmeticWorkload.cpp
+    RefArithmeticWorkload.hpp
+    RefBaseConstantWorkload.cpp
+    RefBaseConstantWorkload.hpp
+    RefBatchNormalizationFloat32Workload.cpp
+    RefBatchNormalizationFloat32Workload.hpp
+    RefBatchNormalizationUint8Workload.cpp
+    RefBatchNormalizationUint8Workload.hpp
+    RefConstantFloat32Workload.cpp
+    RefConstantFloat32Workload.hpp
+    RefConstantUint8Workload.cpp
+    RefConstantUint8Workload.hpp
+    RefConvertFp16ToFp32Workload.cpp
+    RefConvertFp16ToFp32Workload.hpp
+    RefConvertFp32ToFp16Workload.cpp
+    RefConvertFp32ToFp16Workload.hpp
+    RefConvolution2dFloat32Workload.cpp
+    RefConvolution2dFloat32Workload.hpp
+    RefConvolution2dUint8Workload.cpp
+    RefConvolution2dUint8Workload.hpp
+    RefDepthwiseConvolution2dFloat32Workload.cpp
+    RefDepthwiseConvolution2dFloat32Workload.hpp
+    RefDepthwiseConvolution2dUint8Workload.cpp
+    RefDepthwiseConvolution2dUint8Workload.hpp
+    RefFakeQuantizationFloat32Workload.cpp
+    RefFakeQuantizationFloat32Workload.hpp
+    RefFloorFloat32Workload.cpp
+    RefFloorFloat32Workload.hpp
+    RefFullyConnectedFloat32Workload.cpp
+    RefFullyConnectedFloat32Workload.hpp
+    RefFullyConnectedUint8Workload.cpp
+    RefFullyConnectedUint8Workload.hpp
+    RefL2NormalizationFloat32Workload.cpp
+    RefL2NormalizationFloat32Workload.hpp
+    RefLstmFloat32Workload.cpp
+    RefLstmFloat32Workload.hpp
+    RefMergerFloat32Workload.cpp
+    RefMergerFloat32Workload.hpp
+    RefMergerUint8Workload.cpp
+    RefMergerUint8Workload.hpp
+    RefNormalizationFloat32Workload.cpp
+    RefNormalizationFloat32Workload.hpp
+    RefPermuteWorkload.cpp
+    RefPermuteWorkload.hpp
+    RefPooling2dFloat32Workload.cpp
+    RefPooling2dFloat32Workload.hpp
+    RefPooling2dUint8Workload.cpp
+    RefPooling2dUint8Workload.hpp
+    RefReshapeFloat32Workload.cpp
+    RefReshapeFloat32Workload.hpp
+    RefReshapeUint8Workload.cpp
+    RefReshapeUint8Workload.hpp
+    RefResizeBilinearFloat32Workload.cpp
+    RefResizeBilinearFloat32Workload.hpp
+    RefResizeBilinearUint8Workload.cpp
+    RefResizeBilinearUint8Workload.hpp
+    RefSoftmaxFloat32Workload.cpp
+    RefSoftmaxFloat32Workload.hpp
+    RefSoftmaxUint8Workload.cpp
+    RefSoftmaxUint8Workload.hpp
+    RefSplitterFloat32Workload.cpp
+    RefSplitterFloat32Workload.hpp
+    RefSplitterUint8Workload.cpp
+    RefSplitterUint8Workload.hpp
+    RefWorkloadUtils.hpp
+    ResizeBilinear.cpp
+    ResizeBilinear.hpp
+    Softmax.cpp
+    Softmax.hpp
+    Splitter.hpp
+    TensorBufferArrayView.hpp
+)
+
+add_library(armnnRefBackend STATIC ${armnnRefBackend_sources})
+target_include_directories(armnnRefBackend PRIVATE ${PROJECT_SOURCE_DIR}/src)
+target_include_directories(armnnRefBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(armnnRefBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
diff --git a/src/armnn/backends/RefWorkloads/ConvImpl.cpp b/src/backends/RefWorkloads/ConvImpl.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/ConvImpl.cpp
rename to src/backends/RefWorkloads/ConvImpl.cpp
diff --git a/src/armnn/backends/RefWorkloads/ConvImpl.hpp b/src/backends/RefWorkloads/ConvImpl.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/ConvImpl.hpp
rename to src/backends/RefWorkloads/ConvImpl.hpp
diff --git a/src/armnn/backends/RefWorkloads/FullyConnected.cpp b/src/backends/RefWorkloads/FullyConnected.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/FullyConnected.cpp
rename to src/backends/RefWorkloads/FullyConnected.cpp
diff --git a/src/armnn/backends/RefWorkloads/FullyConnected.hpp b/src/backends/RefWorkloads/FullyConnected.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/FullyConnected.hpp
rename to src/backends/RefWorkloads/FullyConnected.hpp
diff --git a/src/armnn/backends/RefWorkloads/Merger.hpp b/src/backends/RefWorkloads/Merger.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Merger.hpp
rename to src/backends/RefWorkloads/Merger.hpp
diff --git a/src/armnn/backends/RefWorkloads/Pooling2d.cpp b/src/backends/RefWorkloads/Pooling2d.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Pooling2d.cpp
rename to src/backends/RefWorkloads/Pooling2d.cpp
diff --git a/src/armnn/backends/RefWorkloads/Pooling2d.hpp b/src/backends/RefWorkloads/Pooling2d.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Pooling2d.hpp
rename to src/backends/RefWorkloads/Pooling2d.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefActivationFloat32Workload.cpp b/src/backends/RefWorkloads/RefActivationFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefActivationFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefActivationFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefActivationFloat32Workload.hpp b/src/backends/RefWorkloads/RefActivationFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefActivationFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefActivationFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefActivationUint8Workload.cpp b/src/backends/RefWorkloads/RefActivationUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefActivationUint8Workload.cpp
rename to src/backends/RefWorkloads/RefActivationUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefActivationUint8Workload.hpp b/src/backends/RefWorkloads/RefActivationUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefActivationUint8Workload.hpp
rename to src/backends/RefWorkloads/RefActivationUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefArithmeticWorkload.cpp b/src/backends/RefWorkloads/RefArithmeticWorkload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefArithmeticWorkload.cpp
rename to src/backends/RefWorkloads/RefArithmeticWorkload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefArithmeticWorkload.hpp b/src/backends/RefWorkloads/RefArithmeticWorkload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefArithmeticWorkload.hpp
rename to src/backends/RefWorkloads/RefArithmeticWorkload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefBaseConstantWorkload.cpp b/src/backends/RefWorkloads/RefBaseConstantWorkload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefBaseConstantWorkload.cpp
rename to src/backends/RefWorkloads/RefBaseConstantWorkload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefBaseConstantWorkload.hpp b/src/backends/RefWorkloads/RefBaseConstantWorkload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefBaseConstantWorkload.hpp
rename to src/backends/RefWorkloads/RefBaseConstantWorkload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.cpp b/src/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.hpp b/src/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefBatchNormalizationFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefBatchNormalizationUint8Workload.cpp b/src/backends/RefWorkloads/RefBatchNormalizationUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefBatchNormalizationUint8Workload.cpp
rename to src/backends/RefWorkloads/RefBatchNormalizationUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefBatchNormalizationUint8Workload.hpp b/src/backends/RefWorkloads/RefBatchNormalizationUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefBatchNormalizationUint8Workload.hpp
rename to src/backends/RefWorkloads/RefBatchNormalizationUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefConstantFloat32Workload.cpp b/src/backends/RefWorkloads/RefConstantFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConstantFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefConstantFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefConstantFloat32Workload.hpp b/src/backends/RefWorkloads/RefConstantFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConstantFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefConstantFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefConstantUint8Workload.cpp b/src/backends/RefWorkloads/RefConstantUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConstantUint8Workload.cpp
rename to src/backends/RefWorkloads/RefConstantUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefConstantUint8Workload.hpp b/src/backends/RefWorkloads/RefConstantUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConstantUint8Workload.hpp
rename to src/backends/RefWorkloads/RefConstantUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvertFp16ToFp32Workload.cpp b/src/backends/RefWorkloads/RefConvertFp16ToFp32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvertFp16ToFp32Workload.cpp
rename to src/backends/RefWorkloads/RefConvertFp16ToFp32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvertFp16ToFp32Workload.hpp b/src/backends/RefWorkloads/RefConvertFp16ToFp32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvertFp16ToFp32Workload.hpp
rename to src/backends/RefWorkloads/RefConvertFp16ToFp32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvertFp32ToFp16Workload.cpp b/src/backends/RefWorkloads/RefConvertFp32ToFp16Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvertFp32ToFp16Workload.cpp
rename to src/backends/RefWorkloads/RefConvertFp32ToFp16Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvertFp32ToFp16Workload.hpp b/src/backends/RefWorkloads/RefConvertFp32ToFp16Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvertFp32ToFp16Workload.hpp
rename to src/backends/RefWorkloads/RefConvertFp32ToFp16Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvolution2dFloat32Workload.cpp b/src/backends/RefWorkloads/RefConvolution2dFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvolution2dFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefConvolution2dFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvolution2dFloat32Workload.hpp b/src/backends/RefWorkloads/RefConvolution2dFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvolution2dFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefConvolution2dFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvolution2dUint8Workload.cpp b/src/backends/RefWorkloads/RefConvolution2dUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvolution2dUint8Workload.cpp
rename to src/backends/RefWorkloads/RefConvolution2dUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefConvolution2dUint8Workload.hpp b/src/backends/RefWorkloads/RefConvolution2dUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefConvolution2dUint8Workload.hpp
rename to src/backends/RefWorkloads/RefConvolution2dUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.cpp b/src/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.hpp b/src/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefDepthwiseConvolution2dFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.cpp b/src/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.cpp
rename to src/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.hpp b/src/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.hpp
rename to src/backends/RefWorkloads/RefDepthwiseConvolution2dUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.cpp b/src/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.hpp b/src/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefFakeQuantizationFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefFloorFloat32Workload.cpp b/src/backends/RefWorkloads/RefFloorFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFloorFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefFloorFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefFloorFloat32Workload.hpp b/src/backends/RefWorkloads/RefFloorFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFloorFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefFloorFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefFullyConnectedFloat32Workload.cpp b/src/backends/RefWorkloads/RefFullyConnectedFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFullyConnectedFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefFullyConnectedFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefFullyConnectedFloat32Workload.hpp b/src/backends/RefWorkloads/RefFullyConnectedFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFullyConnectedFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefFullyConnectedFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefFullyConnectedUint8Workload.cpp b/src/backends/RefWorkloads/RefFullyConnectedUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFullyConnectedUint8Workload.cpp
rename to src/backends/RefWorkloads/RefFullyConnectedUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefFullyConnectedUint8Workload.hpp b/src/backends/RefWorkloads/RefFullyConnectedUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefFullyConnectedUint8Workload.hpp
rename to src/backends/RefWorkloads/RefFullyConnectedUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefL2NormalizationFloat32Workload.cpp b/src/backends/RefWorkloads/RefL2NormalizationFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefL2NormalizationFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefL2NormalizationFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefL2NormalizationFloat32Workload.hpp b/src/backends/RefWorkloads/RefL2NormalizationFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefL2NormalizationFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefL2NormalizationFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefLstmFloat32Workload.cpp b/src/backends/RefWorkloads/RefLstmFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefLstmFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefLstmFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefLstmFloat32Workload.hpp b/src/backends/RefWorkloads/RefLstmFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefLstmFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefLstmFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefMergerFloat32Workload.cpp b/src/backends/RefWorkloads/RefMergerFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefMergerFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefMergerFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefMergerFloat32Workload.hpp b/src/backends/RefWorkloads/RefMergerFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefMergerFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefMergerFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefMergerUint8Workload.cpp b/src/backends/RefWorkloads/RefMergerUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefMergerUint8Workload.cpp
rename to src/backends/RefWorkloads/RefMergerUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefMergerUint8Workload.hpp b/src/backends/RefWorkloads/RefMergerUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefMergerUint8Workload.hpp
rename to src/backends/RefWorkloads/RefMergerUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefNormalizationFloat32Workload.cpp b/src/backends/RefWorkloads/RefNormalizationFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefNormalizationFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefNormalizationFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefNormalizationFloat32Workload.hpp b/src/backends/RefWorkloads/RefNormalizationFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefNormalizationFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefNormalizationFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefPermuteWorkload.cpp b/src/backends/RefWorkloads/RefPermuteWorkload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefPermuteWorkload.cpp
rename to src/backends/RefWorkloads/RefPermuteWorkload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefPermuteWorkload.hpp b/src/backends/RefWorkloads/RefPermuteWorkload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefPermuteWorkload.hpp
rename to src/backends/RefWorkloads/RefPermuteWorkload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefPooling2dFloat32Workload.cpp b/src/backends/RefWorkloads/RefPooling2dFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefPooling2dFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefPooling2dFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefPooling2dFloat32Workload.hpp b/src/backends/RefWorkloads/RefPooling2dFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefPooling2dFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefPooling2dFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefPooling2dUint8Workload.cpp b/src/backends/RefWorkloads/RefPooling2dUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefPooling2dUint8Workload.cpp
rename to src/backends/RefWorkloads/RefPooling2dUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefPooling2dUint8Workload.hpp b/src/backends/RefWorkloads/RefPooling2dUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefPooling2dUint8Workload.hpp
rename to src/backends/RefWorkloads/RefPooling2dUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefReshapeFloat32Workload.cpp b/src/backends/RefWorkloads/RefReshapeFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefReshapeFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefReshapeFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefReshapeFloat32Workload.hpp b/src/backends/RefWorkloads/RefReshapeFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefReshapeFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefReshapeFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefReshapeUint8Workload.cpp b/src/backends/RefWorkloads/RefReshapeUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefReshapeUint8Workload.cpp
rename to src/backends/RefWorkloads/RefReshapeUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefReshapeUint8Workload.hpp b/src/backends/RefWorkloads/RefReshapeUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefReshapeUint8Workload.hpp
rename to src/backends/RefWorkloads/RefReshapeUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefResizeBilinearFloat32Workload.cpp b/src/backends/RefWorkloads/RefResizeBilinearFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefResizeBilinearFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefResizeBilinearFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefResizeBilinearFloat32Workload.hpp b/src/backends/RefWorkloads/RefResizeBilinearFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefResizeBilinearFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefResizeBilinearFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefResizeBilinearUint8Workload.cpp b/src/backends/RefWorkloads/RefResizeBilinearUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefResizeBilinearUint8Workload.cpp
rename to src/backends/RefWorkloads/RefResizeBilinearUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefResizeBilinearUint8Workload.hpp b/src/backends/RefWorkloads/RefResizeBilinearUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefResizeBilinearUint8Workload.hpp
rename to src/backends/RefWorkloads/RefResizeBilinearUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefSoftmaxFloat32Workload.cpp b/src/backends/RefWorkloads/RefSoftmaxFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSoftmaxFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefSoftmaxFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefSoftmaxFloat32Workload.hpp b/src/backends/RefWorkloads/RefSoftmaxFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSoftmaxFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefSoftmaxFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefSoftmaxUint8Workload.cpp b/src/backends/RefWorkloads/RefSoftmaxUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSoftmaxUint8Workload.cpp
rename to src/backends/RefWorkloads/RefSoftmaxUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefSoftmaxUint8Workload.hpp b/src/backends/RefWorkloads/RefSoftmaxUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSoftmaxUint8Workload.hpp
rename to src/backends/RefWorkloads/RefSoftmaxUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefSplitterFloat32Workload.cpp b/src/backends/RefWorkloads/RefSplitterFloat32Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSplitterFloat32Workload.cpp
rename to src/backends/RefWorkloads/RefSplitterFloat32Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefSplitterFloat32Workload.hpp b/src/backends/RefWorkloads/RefSplitterFloat32Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSplitterFloat32Workload.hpp
rename to src/backends/RefWorkloads/RefSplitterFloat32Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefSplitterUint8Workload.cpp b/src/backends/RefWorkloads/RefSplitterUint8Workload.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSplitterUint8Workload.cpp
rename to src/backends/RefWorkloads/RefSplitterUint8Workload.cpp
diff --git a/src/armnn/backends/RefWorkloads/RefSplitterUint8Workload.hpp b/src/backends/RefWorkloads/RefSplitterUint8Workload.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefSplitterUint8Workload.hpp
rename to src/backends/RefWorkloads/RefSplitterUint8Workload.hpp
diff --git a/src/armnn/backends/RefWorkloads/RefWorkloadUtils.hpp b/src/backends/RefWorkloads/RefWorkloadUtils.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/RefWorkloadUtils.hpp
rename to src/backends/RefWorkloads/RefWorkloadUtils.hpp
diff --git a/src/armnn/backends/RefWorkloads/ResizeBilinear.cpp b/src/backends/RefWorkloads/ResizeBilinear.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/ResizeBilinear.cpp
rename to src/backends/RefWorkloads/ResizeBilinear.cpp
diff --git a/src/armnn/backends/RefWorkloads/ResizeBilinear.hpp b/src/backends/RefWorkloads/ResizeBilinear.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/ResizeBilinear.hpp
rename to src/backends/RefWorkloads/ResizeBilinear.hpp
diff --git a/src/armnn/backends/RefWorkloads/Softmax.cpp b/src/backends/RefWorkloads/Softmax.cpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Softmax.cpp
rename to src/backends/RefWorkloads/Softmax.cpp
diff --git a/src/armnn/backends/RefWorkloads/Softmax.hpp b/src/backends/RefWorkloads/Softmax.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Softmax.hpp
rename to src/backends/RefWorkloads/Softmax.hpp
diff --git a/src/armnn/backends/RefWorkloads/Splitter.hpp b/src/backends/RefWorkloads/Splitter.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/Splitter.hpp
rename to src/backends/RefWorkloads/Splitter.hpp
diff --git a/src/armnn/backends/RefWorkloads/TensorBufferArrayView.hpp b/src/backends/RefWorkloads/TensorBufferArrayView.hpp
similarity index 100%
rename from src/armnn/backends/RefWorkloads/TensorBufferArrayView.hpp
rename to src/backends/RefWorkloads/TensorBufferArrayView.hpp
diff --git a/src/backends/RefWorkloads/backend.cmake b/src/backends/RefWorkloads/backend.cmake
new file mode 100644
index 0000000..6fd09eb
--- /dev/null
+++ b/src/backends/RefWorkloads/backend.cmake
@@ -0,0 +1,7 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+add_subdirectory(${PROJECT_SOURCE_DIR}/src/backends/RefWorkloads)
+list(APPEND armnnLibraries armnnRefBackend)
diff --git a/src/armnn/backends/StringMapping.cpp b/src/backends/StringMapping.cpp
similarity index 100%
rename from src/armnn/backends/StringMapping.cpp
rename to src/backends/StringMapping.cpp
diff --git a/src/armnn/backends/StringMapping.hpp b/src/backends/StringMapping.hpp
similarity index 100%
rename from src/armnn/backends/StringMapping.hpp
rename to src/backends/StringMapping.hpp
diff --git a/src/armnn/backends/Workload.hpp b/src/backends/Workload.hpp
similarity index 100%
rename from src/armnn/backends/Workload.hpp
rename to src/backends/Workload.hpp
diff --git a/src/armnn/backends/WorkloadData.cpp b/src/backends/WorkloadData.cpp
similarity index 100%
rename from src/armnn/backends/WorkloadData.cpp
rename to src/backends/WorkloadData.cpp
diff --git a/src/armnn/backends/WorkloadData.hpp b/src/backends/WorkloadData.hpp
similarity index 100%
rename from src/armnn/backends/WorkloadData.hpp
rename to src/backends/WorkloadData.hpp
diff --git a/src/armnn/backends/WorkloadDataCollector.hpp b/src/backends/WorkloadDataCollector.hpp
similarity index 100%
rename from src/armnn/backends/WorkloadDataCollector.hpp
rename to src/backends/WorkloadDataCollector.hpp
diff --git a/src/armnn/backends/WorkloadDataFwd.hpp b/src/backends/WorkloadDataFwd.hpp
similarity index 100%
rename from src/armnn/backends/WorkloadDataFwd.hpp
rename to src/backends/WorkloadDataFwd.hpp
diff --git a/src/armnn/backends/WorkloadFactory.cpp b/src/backends/WorkloadFactory.cpp
similarity index 100%
rename from src/armnn/backends/WorkloadFactory.cpp
rename to src/backends/WorkloadFactory.cpp
diff --git a/src/armnn/backends/WorkloadFactory.hpp b/src/backends/WorkloadFactory.hpp
similarity index 100%
rename from src/armnn/backends/WorkloadFactory.hpp
rename to src/backends/WorkloadFactory.hpp
diff --git a/src/armnn/backends/WorkloadInfo.hpp b/src/backends/WorkloadInfo.hpp
similarity index 100%
rename from src/armnn/backends/WorkloadInfo.hpp
rename to src/backends/WorkloadInfo.hpp
diff --git a/src/armnn/backends/WorkloadUtils.hpp b/src/backends/WorkloadUtils.hpp
similarity index 100%
rename from src/armnn/backends/WorkloadUtils.hpp
rename to src/backends/WorkloadUtils.hpp
diff --git a/src/backends/backends.cmake b/src/backends/backends.cmake
new file mode 100644
index 0000000..462365c
--- /dev/null
+++ b/src/backends/backends.cmake
@@ -0,0 +1,15 @@
+#
+# Copyright © 2017 Arm Ltd. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+add_subdirectory(${PROJECT_SOURCE_DIR}/src/backends)
+list(APPEND armnnLibraries armnnBackendsCommon)
+
+# single place to use wildcards, so we can include
+# yet unknown backend modules
+FILE(GLOB backendIncludes ${PROJECT_SOURCE_DIR}/src/backends/*/backend.cmake)
+
+foreach(backendInclude ${backendIncludes})
+    include(${backendInclude})
+endforeach()
diff --git a/src/armnn/backends/test/ActivationFixture.hpp b/src/backends/test/ActivationFixture.hpp
similarity index 100%
rename from src/armnn/backends/test/ActivationFixture.hpp
rename to src/backends/test/ActivationFixture.hpp
diff --git a/src/armnn/backends/test/ActivationTestImpl.hpp b/src/backends/test/ActivationTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/ActivationTestImpl.hpp
rename to src/backends/test/ActivationTestImpl.hpp
diff --git a/src/armnn/backends/test/ArmComputeCl.cpp b/src/backends/test/ArmComputeCl.cpp
similarity index 100%
rename from src/armnn/backends/test/ArmComputeCl.cpp
rename to src/backends/test/ArmComputeCl.cpp
diff --git a/src/armnn/backends/test/ArmComputeNeon.cpp b/src/backends/test/ArmComputeNeon.cpp
similarity index 100%
rename from src/armnn/backends/test/ArmComputeNeon.cpp
rename to src/backends/test/ArmComputeNeon.cpp
diff --git a/src/armnn/backends/test/BatchNormTestImpl.hpp b/src/backends/test/BatchNormTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/BatchNormTestImpl.hpp
rename to src/backends/test/BatchNormTestImpl.hpp
diff --git a/src/armnn/backends/test/ClContextControlFixture.hpp b/src/backends/test/ClContextControlFixture.hpp
similarity index 100%
rename from src/armnn/backends/test/ClContextControlFixture.hpp
rename to src/backends/test/ClContextControlFixture.hpp
diff --git a/src/armnn/backends/test/Conv2dTestImpl.hpp b/src/backends/test/Conv2dTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/Conv2dTestImpl.hpp
rename to src/backends/test/Conv2dTestImpl.hpp
diff --git a/src/armnn/backends/test/ConvertFp16ToFp32TestImpl.hpp b/src/backends/test/ConvertFp16ToFp32TestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/ConvertFp16ToFp32TestImpl.hpp
rename to src/backends/test/ConvertFp16ToFp32TestImpl.hpp
diff --git a/src/armnn/backends/test/ConvertFp32ToFp16TestImpl.hpp b/src/backends/test/ConvertFp32ToFp16TestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/ConvertFp32ToFp16TestImpl.hpp
rename to src/backends/test/ConvertFp32ToFp16TestImpl.hpp
diff --git a/src/armnn/backends/test/CreateWorkloadCl.cpp b/src/backends/test/CreateWorkloadCl.cpp
similarity index 100%
rename from src/armnn/backends/test/CreateWorkloadCl.cpp
rename to src/backends/test/CreateWorkloadCl.cpp
diff --git a/src/armnn/backends/test/CreateWorkloadNeon.cpp b/src/backends/test/CreateWorkloadNeon.cpp
similarity index 100%
rename from src/armnn/backends/test/CreateWorkloadNeon.cpp
rename to src/backends/test/CreateWorkloadNeon.cpp
diff --git a/src/armnn/backends/test/CreateWorkloadRef.cpp b/src/backends/test/CreateWorkloadRef.cpp
similarity index 100%
rename from src/armnn/backends/test/CreateWorkloadRef.cpp
rename to src/backends/test/CreateWorkloadRef.cpp
diff --git a/src/armnn/backends/test/FullyConnectedTestImpl.hpp b/src/backends/test/FullyConnectedTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/FullyConnectedTestImpl.hpp
rename to src/backends/test/FullyConnectedTestImpl.hpp
diff --git a/src/armnn/backends/test/IsLayerSupportedTest.cpp b/src/backends/test/IsLayerSupportedTest.cpp
similarity index 100%
rename from src/armnn/backends/test/IsLayerSupportedTest.cpp
rename to src/backends/test/IsLayerSupportedTest.cpp
diff --git a/src/armnn/backends/test/IsLayerSupportedTestImpl.hpp b/src/backends/test/IsLayerSupportedTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/IsLayerSupportedTestImpl.hpp
rename to src/backends/test/IsLayerSupportedTestImpl.hpp
diff --git a/src/armnn/backends/test/LayerReleaseConstantDataTest.cpp b/src/backends/test/LayerReleaseConstantDataTest.cpp
similarity index 100%
rename from src/armnn/backends/test/LayerReleaseConstantDataTest.cpp
rename to src/backends/test/LayerReleaseConstantDataTest.cpp
diff --git a/src/armnn/backends/test/LayerTests.cpp b/src/backends/test/LayerTests.cpp
similarity index 100%
rename from src/armnn/backends/test/LayerTests.cpp
rename to src/backends/test/LayerTests.cpp
diff --git a/src/armnn/backends/test/LayerTests.hpp b/src/backends/test/LayerTests.hpp
similarity index 100%
rename from src/armnn/backends/test/LayerTests.hpp
rename to src/backends/test/LayerTests.hpp
diff --git a/src/armnn/backends/test/LstmTestImpl.hpp b/src/backends/test/LstmTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/LstmTestImpl.hpp
rename to src/backends/test/LstmTestImpl.hpp
diff --git a/src/armnn/backends/test/MemCopyTests.cpp b/src/backends/test/MemCopyTests.cpp
similarity index 100%
rename from src/armnn/backends/test/MemCopyTests.cpp
rename to src/backends/test/MemCopyTests.cpp
diff --git a/src/armnn/backends/test/NormTestImpl.hpp b/src/backends/test/NormTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/NormTestImpl.hpp
rename to src/backends/test/NormTestImpl.hpp
diff --git a/src/armnn/backends/test/PermuteTestImpl.hpp b/src/backends/test/PermuteTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/PermuteTestImpl.hpp
rename to src/backends/test/PermuteTestImpl.hpp
diff --git a/src/armnn/backends/test/Pooling2dTestImpl.hpp b/src/backends/test/Pooling2dTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/Pooling2dTestImpl.hpp
rename to src/backends/test/Pooling2dTestImpl.hpp
diff --git a/src/armnn/backends/test/QuantizeHelper.hpp b/src/backends/test/QuantizeHelper.hpp
similarity index 100%
rename from src/armnn/backends/test/QuantizeHelper.hpp
rename to src/backends/test/QuantizeHelper.hpp
diff --git a/src/armnn/backends/test/Reference.cpp b/src/backends/test/Reference.cpp
similarity index 100%
rename from src/armnn/backends/test/Reference.cpp
rename to src/backends/test/Reference.cpp
diff --git a/src/armnn/backends/test/ReshapeTestImpl.hpp b/src/backends/test/ReshapeTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/ReshapeTestImpl.hpp
rename to src/backends/test/ReshapeTestImpl.hpp
diff --git a/src/armnn/backends/test/SoftmaxTestImpl.hpp b/src/backends/test/SoftmaxTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/SoftmaxTestImpl.hpp
rename to src/backends/test/SoftmaxTestImpl.hpp
diff --git a/src/armnn/backends/test/SplitterTestImpl.hpp b/src/backends/test/SplitterTestImpl.hpp
similarity index 100%
rename from src/armnn/backends/test/SplitterTestImpl.hpp
rename to src/backends/test/SplitterTestImpl.hpp
diff --git a/src/armnn/backends/test/TensorCopyUtils.cpp b/src/backends/test/TensorCopyUtils.cpp
similarity index 100%
rename from src/armnn/backends/test/TensorCopyUtils.cpp
rename to src/backends/test/TensorCopyUtils.cpp
diff --git a/src/armnn/backends/test/TensorCopyUtils.hpp b/src/backends/test/TensorCopyUtils.hpp
similarity index 100%
rename from src/armnn/backends/test/TensorCopyUtils.hpp
rename to src/backends/test/TensorCopyUtils.hpp
diff --git a/src/armnn/backends/test/WorkloadDataValidation.cpp b/src/backends/test/WorkloadDataValidation.cpp
similarity index 100%
rename from src/armnn/backends/test/WorkloadDataValidation.cpp
rename to src/backends/test/WorkloadDataValidation.cpp
diff --git a/src/armnn/backends/test/WorkloadTestUtils.hpp b/src/backends/test/WorkloadTestUtils.hpp
similarity index 100%
rename from src/armnn/backends/test/WorkloadTestUtils.hpp
rename to src/backends/test/WorkloadTestUtils.hpp