COMPMID-417 - Added clFinish to CLSymbols

Change-Id: If3ee89d91f105489c766b9e714fdf72da8fbfe78
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/83664
Reviewed-by: Moritz Pflanzer <moritz.pflanzer@arm.com>
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
diff --git a/arm_compute/core/CL/OpenCL.h b/arm_compute/core/CL/OpenCL.h
index 644608f..bea9743 100644
--- a/arm_compute/core/CL/OpenCL.h
+++ b/arm_compute/core/CL/OpenCL.h
@@ -72,6 +72,7 @@
     using clRetainContext_func           = cl_int (*)(cl_context context);
     using clReleaseProgram_func          = cl_int (*)(cl_program program);
     using clFlush_func                   = cl_int (*)(cl_command_queue command_queue);
+    using clFinish_func                  = cl_int (*)(cl_command_queue command_queue);
     using clGetProgramInfo_func          = cl_int (*)(cl_program, cl_program_info, size_t, void *, size_t *);
     using clCreateKernel_func            = cl_kernel (*)(cl_program, const char *, cl_int *);
     using clRetainKernel_func            = cl_int (*)(cl_kernel kernel);
@@ -91,6 +92,7 @@
     clCreateKernel_func            clCreateKernel            = nullptr;
     clGetProgramInfo_func          clGetProgramInfo          = nullptr;
     clFlush_func                   clFlush                   = nullptr;
+    clFinish_func                  clFinish                  = nullptr;
     clReleaseProgram_func          clReleaseProgram          = nullptr;
     clRetainContext_func           clRetainContext           = nullptr;
     clCreateProgramWithBinary_func clCreateProgramWithBinary = nullptr;
diff --git a/src/core/CL/OpenCL.cpp b/src/core/CL/OpenCL.cpp
index 4eba709..085e186 100644
--- a/src/core/CL/OpenCL.cpp
+++ b/src/core/CL/OpenCL.cpp
@@ -81,6 +81,7 @@
     clCreateKernel            = reinterpret_cast<clCreateKernel_func>(dlsym(handle, "clCreateKernel"));
     clGetProgramInfo          = reinterpret_cast<clGetProgramInfo_func>(dlsym(handle, "clGetProgramInfo"));
     clFlush                   = reinterpret_cast<clFlush_func>(dlsym(handle, "clFlush"));
+    clFinish                  = reinterpret_cast<clFinish_func>(dlsym(handle, "clFinish"));
     clReleaseProgram          = reinterpret_cast<clReleaseProgram_func>(dlsym(handle, "clReleaseProgram"));
     clRetainContext           = reinterpret_cast<clRetainContext_func>(dlsym(handle, "clRetainContext"));
     clCreateProgramWithBinary = reinterpret_cast<clCreateProgramWithBinary_func>(dlsym(handle, "clCreateProgramWithBinary"));
@@ -438,6 +439,20 @@
     }
 }
 
+cl_int clFinish(cl_command_queue command_queue)
+{
+    arm_compute::CLSymbols::get().load_default();
+    auto func = arm_compute::CLSymbols::get().clFinish;
+    if(func != nullptr)
+    {
+        return func(command_queue);
+    }
+    else
+    {
+        return CL_OUT_OF_RESOURCES;
+    }
+}
+
 cl_int clGetProgramInfo(
     cl_program      program,
     cl_program_info param_name,