COMPMID-2205: CL runtime context.

CL Interfaces implemented.
Concrete classes implemented.
One test (ActivationLayer) ported to the new interface.

Change-Id: I283808bec36ccfc2f13fe048c45cbbee698ce525
Signed-off-by: Pablo Tello <pablo.tello@arm.com>
Reviewed-on: https://review.mlplatform.org/c/1998
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
diff --git a/tests/main.cpp b/tests/main.cpp
index 0174193..415dba0 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -23,11 +23,11 @@
  */
 #include "support/ToolchainSupport.h"
 #include "tests/AssetsLibrary.h"
-#include "tests/ParametersLibrary.h"
 #include "tests/framework/DatasetModes.h"
 #include "tests/framework/Exceptions.h"
 #include "tests/framework/Framework.h"
 #include "tests/framework/Macros.h"
+#include "tests/framework/ParametersLibrary.h"
 #include "tests/framework/Profiler.h"
 #include "tests/framework/command_line/CommonOptions.h"
 #include "tests/framework/instruments/Instruments.h"
@@ -74,8 +74,8 @@
 {
 namespace test
 {
-std::unique_ptr<AssetsLibrary>     library;
-std::unique_ptr<ParametersLibrary> parameters;
+std::unique_ptr<AssetsLibrary>            library;
+extern std::unique_ptr<ParametersLibrary> parameters;
 } // namespace test
 } // namespace arm_compute
 
@@ -92,17 +92,6 @@
 
 int main(int argc, char **argv)
 {
-#ifdef ARM_COMPUTE_CL
-    CLTuner cl_tuner(false);
-    if(opencl_is_available())
-    {
-        auto ctx_dev_err = create_opencl_context_and_device();
-        ARM_COMPUTE_ERROR_ON_MSG(std::get<2>(ctx_dev_err) != CL_SUCCESS, "Failed to create OpenCL context");
-        CLScheduler::get()
-        .default_init_with_context(std::get<1>(ctx_dev_err), std::get<0>(ctx_dev_err), &cl_tuner);
-    }
-#endif /* ARM_COMPUTE_CL */
-
 #ifdef ARM_COMPUTE_GC
     GCScheduler::get().default_init();
 #endif /* ARM_COMPUTE_GC */
@@ -185,6 +174,20 @@
         parameters->set_cpu_ctx(std::move(cpu_ctx));
 
 #ifdef ARM_COMPUTE_CL
+        CLTuner cl_tuner(false);
+        // Create GPU context
+        auto cl_ctx = support::cpp14::make_unique<CLRuntimeContext>();
+        assert(cl_ctx != nullptr);
+        CLScheduler *gpu_scheduler = cl_ctx->gpu_scheduler();
+        assert(gpu_scheduler != nullptr);
+        const auto device_version = cl_ctx->kernel_library().get_device_version();
+        {
+            // Legacy singletons API: This has been deprecated and the singletons will be removed
+            // Setup singleton for backward compatibility
+            CLScheduler::get().init(gpu_scheduler->context(), gpu_scheduler->queue(), cl_ctx->kernel_library().get_device(), &cl_tuner);
+        }
+        parameters->set_gpu_ctx(std::move(cl_ctx));
+
         if(enable_tuner->is_set())
         {
             cl_tuner.set_tune_new_kernels(enable_tuner->value());
@@ -222,7 +225,7 @@
 #ifdef ARM_COMPUTE_CL
                 if(opencl_is_available())
                 {
-                    p->print_entry("CL_DEVICE_VERSION", CLKernelLibrary::get().get_device_version());
+                    p->print_entry("CL_DEVICE_VERSION", device_version);
                 }
                 else
                 {