IVGCVSW-2005: Pull in backend specific unit tests into Android.mk similarly as backend sources

Change-Id: Icafc644b64c591f4dc0e1560d02b806bf053a2da
diff --git a/Android.mk b/Android.mk
index 7493374..a2299a1 100644
--- a/Android.mk
+++ b/Android.mk
@@ -152,6 +152,24 @@
 LOCAL_ARM_MODE := arm
 LOCAL_PROPRIETARY_MODULE := true
 
+# placeholder to hold all backend unit test source files
+ARMNN_BACKEND_TEST_SOURCES :=
+
+#
+# iterate through the backend common and specific include paths, include them into the current
+# makefile and append the sources held by the COMMON_TEST_SOURCES and BACKEND_TEST_SOURCES
+# (included from the given makefile) to the ARMNN_BACKEND_TEST_SOURCES list
+#
+$(foreach mkPath,$(ARMNN_BACKEND_COMMON_MAKEFILE_DIRS), \
+   $(eval include $(LOCAL_PATH)/$(mkPath)/common.mk) \
+   $(eval ARMNN_BACKEND_TEST_SOURCES := $(ARMNN_BACKEND_TEST_SOURCES) \
+   $(patsubst %,$(mkPath)/%,$(COMMON_TEST_SOURCES))))
+
+$(foreach mkPath,$(ARMNN_BACKEND_MAKEFILE_DIRS), \
+   $(eval include $(LOCAL_PATH)/$(mkPath)/backend.mk) \
+   $(eval ARMNN_BACKEND_TEST_SOURCES := $(ARMNN_BACKEND_TEST_SOURCES) \
+   $(patsubst %,$(mkPath)/%,$(BACKEND_TEST_SOURCES))))
+
 # Mark source files as dependent on Android.mk
 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
 
@@ -172,6 +190,7 @@
 	-DARMCOMPUTENEON_ENABLED
 
 LOCAL_SRC_FILES := \
+        $(ARMNN_BACKEND_TEST_SOURCES) \
 	src/armnn/test/UnitTests.cpp \
 	src/armnn/test/EndToEndTest.cpp \
 	src/armnn/test/UtilsTests.cpp \
@@ -182,25 +201,7 @@
 	src/armnn/test/InstrumentTests.cpp \
 	src/armnn/test/ProfilingEventTest.cpp \
 	src/armnn/test/ObservableTest.cpp \
-	src/armnn/test/OptionalTest.cpp \
-	src/backends/test/WorkloadDataValidation.cpp \
-	src/backends/test/TensorCopyUtils.cpp \
-	src/backends/test/LayerTests.cpp \
-	src/backends/aclCommon/test/MemCopyTests.cpp \
-        src/backends/cl/test/ClCreateWorkloadTests.cpp \
-        src/backends/cl/test/ClLayerSupportTests.cpp \
-	src/backends/cl/test/ClLayerTests.cpp \
-        src/backends/cl/test/ClMemCopyTests.cpp \
-        src/backends/cl/test/Fp16SupportTest.cpp \
-        src/backends/cl/test/OpenClTimerTest.cpp \
-        src/backends/neon/test/NeonCreateWorkloadTests.cpp \
-        src/backends/neon/test/NeonLayerSupportTests.cpp \
-	src/backends/neon/test/NeonLayerTests.cpp \
-        src/backends/neon/test/NeonMemCopyTests.cpp \
-        src/backends/neon/test/NeonTimerTest.cpp \
-        src/backends/reference/test/RefCreateWorkloadTests.cpp \
-        src/backends/reference/test/RefLayerSupportTests.cpp \
-	src/backends/reference/test/RefLayerTests.cpp
+	src/armnn/test/OptionalTest.cpp
 
 LOCAL_STATIC_LIBRARIES := \
 	libneuralnetworks_common \
diff --git a/src/backends/aclCommon/common.mk b/src/backends/aclCommon/common.mk
index 9854f6f..67ba01b 100644
--- a/src/backends/aclCommon/common.mk
+++ b/src/backends/aclCommon/common.mk
@@ -14,4 +14,11 @@
     memory/BlobMemoryPool.cpp \
     memory/OffsetLifetimeManager.cpp \
     memory/OffsetMemoryPool.cpp \
-    memory/PoolManager.cpp
\ No newline at end of file
+    memory/PoolManager.cpp
+
+# COMMON_TEST_SOURCES contains the list of files to be included
+# in the Android unit test build (armnn-tests) and it is picked
+# up by the Android.mk file in the root of ArmNN
+
+COMMON_TEST_SOURCES := \
+    test/MemCopyTests.cpp
diff --git a/src/backends/aclCommon/test/MemCopyTests.cpp b/src/backends/aclCommon/test/MemCopyTests.cpp
index 7e503b1..d8b407d 100644
--- a/src/backends/aclCommon/test/MemCopyTests.cpp
+++ b/src/backends/aclCommon/test/MemCopyTests.cpp
@@ -9,11 +9,12 @@
 
 #if ARMCOMPUTECL_ENABLED && ARMCOMPUTENEON_ENABLED
 #include <backends/aclCommon/test/MemCopyTestImpl.hpp>
+#include <backends/cl/test/ClContextControlFixture.hpp>
 #endif
 
 #include <boost/test/unit_test.hpp>
 
-BOOST_AUTO_TEST_SUITE(MemCopyTestSuite)
+BOOST_AUTO_TEST_SUITE(MemCopyCommon)
 
 BOOST_AUTO_TEST_CASE(AclTypeConversions)
 {
@@ -34,8 +35,12 @@
     BOOST_TEST(convertedshape[3] == 5);
 }
 
+BOOST_AUTO_TEST_SUITE_END()
+
 #if ARMCOMPUTECL_ENABLED && ARMCOMPUTENEON_ENABLED
 
+BOOST_FIXTURE_TEST_SUITE(MemCopyClNeon, ClContextControlFixture)
+
 BOOST_AUTO_TEST_CASE(CopyBetweenNeonAndGpu)
 {
     LayerTestResult<float, 4> result = MemCopyTest<armnn::NeonWorkloadFactory, armnn::ClWorkloadFactory>(false);
@@ -60,6 +65,6 @@
     BOOST_TEST(CompareTensors(result.output, result.outputExpected));
 }
 
-#endif
-
 BOOST_AUTO_TEST_SUITE_END()
+
+#endif
\ No newline at end of file
diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk
index 205f7b5..c549c01 100644
--- a/src/backends/cl/backend.mk
+++ b/src/backends/cl/backend.mk
@@ -37,3 +37,15 @@
         workloads/ClSoftmaxFloatWorkload.cpp \
         workloads/ClSoftmaxUint8Workload.cpp \
         workloads/ClSubtractionWorkload.cpp
+
+# BACKEND_TEST_SOURCES contains the list of files to be included
+# in the Android unit test build (armnn-tests) and it is picked
+# up by the Android.mk file in the root of ArmNN
+
+BACKEND_TEST_SOURCES := \
+        test/ClCreateWorkloadTests.cpp \
+        test/ClLayerSupportTests.cpp \
+        test/ClLayerTests.cpp \
+        test/ClMemCopyTests.cpp \
+        test/Fp16SupportTest.cpp \
+        test/OpenClTimerTest.cpp
diff --git a/src/backends/common.mk b/src/backends/common.mk
index 2b649ad..b1583b9 100644
--- a/src/backends/common.mk
+++ b/src/backends/common.mk
@@ -17,3 +17,12 @@
     StringMapping.cpp \
     WorkloadData.cpp \
     WorkloadFactory.cpp
+
+# COMMON_TEST_SOURCES contains the list of files to be included
+# in the Android unit test build (armnn-tests) and it is picked
+# up by the Android.mk file in the root of ArmNN
+
+COMMON_TEST_SOURCES := \
+    test/WorkloadDataValidation.cpp \
+    test/TensorCopyUtils.cpp \
+    test/LayerTests.cpp
diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk
index 52e241f..4cab9fb 100644
--- a/src/backends/neon/backend.mk
+++ b/src/backends/neon/backend.mk
@@ -34,3 +34,14 @@
         workloads/NeonSoftmaxFloatWorkload.cpp \
         workloads/NeonSoftmaxUint8Workload.cpp \
         workloads/NeonSubtractionFloatWorkload.cpp
+
+# BACKEND_TEST_SOURCES contains the list of files to be included
+# in the Android unit test build (armnn-tests) and it is picked
+# up by the Android.mk file in the root of ArmNN
+
+BACKEND_TEST_SOURCES := \
+        test/NeonCreateWorkloadTests.cpp \
+        test/NeonLayerSupportTests.cpp \
+        test/NeonLayerTests.cpp \
+        test/NeonMemCopyTests.cpp \
+        test/NeonTimerTest.cpp
diff --git a/src/backends/reference/backend.mk b/src/backends/reference/backend.mk
index 4403ea2..9ecb6d7 100644
--- a/src/backends/reference/backend.mk
+++ b/src/backends/reference/backend.mk
@@ -58,3 +58,12 @@
         workloads/RefSplitterUint8Workload.cpp \
         workloads/ResizeBilinear.cpp \
         workloads/Softmax.cpp
+
+# BACKEND_TEST_SOURCES contains the list of files to be included
+# in the Android unit test build (armnn-tests) and it is picked
+# up by the Android.mk file in the root of ArmNN
+
+BACKEND_TEST_SOURCES := \
+        test/RefCreateWorkloadTests.cpp \
+        test/RefLayerSupportTests.cpp \
+        test/RefLayerTests.cpp
diff --git a/src/backends/test/LayerTests.cpp b/src/backends/test/LayerTests.cpp
index 726cb7d..95f2a32 100755
--- a/src/backends/test/LayerTests.cpp
+++ b/src/backends/test/LayerTests.cpp
@@ -34,8 +34,6 @@
 #include "ConvertFp16ToFp32TestImpl.hpp"
 #include "ConvertFp32ToFp16TestImpl.hpp"
 
-#include <backends/cl/test/ClContextControlFixture.hpp>
-
 // 3-channel 16x8 image used as common input data for a number of Conv2d tests.
 static std::vector<float> ConvInput3x8x16({
     0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,