IVGCVSW-3596 Register the dynamic backends in the BackendRegistry

 * Added getter for the factory function in the DynamicBackend class
 * Added new RegisterDynamicBackends method in utils class
 * Added dynamic backend registration process in the Runtime class
 * Added new dummy dynamic backend objects for testing
 * Added unit tests for dynamic backend registration
 * Added convenience methods to BackendId

Change-Id: I01e147d1d6f01bf56747ad946f73f867af5770c4
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
diff --git a/src/backends/backendsCommon/DynamicBackendUtils.hpp b/src/backends/backendsCommon/DynamicBackendUtils.hpp
index 9c10df7..187b0b1 100644
--- a/src/backends/backendsCommon/DynamicBackendUtils.hpp
+++ b/src/backends/backendsCommon/DynamicBackendUtils.hpp
@@ -39,11 +39,14 @@
     static std::vector<std::string> GetSharedObjects(const std::vector<std::string>& backendPaths);
 
     static std::vector<DynamicBackendPtr> CreateDynamicBackends(const std::vector<std::string>& sharedObjects);
+    static void RegisterDynamicBackends(const std::vector<DynamicBackendPtr>& dynamicBackends);
 
 protected:
     /// Protected methods for testing purposes
     static bool IsBackendCompatibleImpl(const BackendVersion& backendApiVersion, const BackendVersion& backendVersion);
     static std::vector<std::string> GetBackendPathsImpl(const std::string& backendPaths);
+    static void RegisterDynamicBackendsImpl(BackendRegistry& backendRegistry,
+                                            const std::vector<DynamicBackendPtr>& dynamicBackends);
 
 private:
     static std::string GetDlError();