blob: f888b1e27e334ab5f406ce62852bc0a765f6860d [file] [log] [blame]
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "IBackendInternal.hpp"
Matteo Martincighc601aa62019-10-29 15:03:22 +00009
10#include <armnn/BackendRegistry.hpp>
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010011
12#include <functional>
13#include <memory>
14
15namespace armnn
16{
17
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010018class DynamicBackend final
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010019{
20public:
21 using HandleCloser = std::function<void(const void*)>;
22 using HandlePtr = std::unique_ptr<void, HandleCloser>;
23
24 explicit DynamicBackend(const void* sharedObjectHandle);
25
26 /// Public dynamic backend functions
27 BackendId GetBackendId();
28 BackendVersion GetBackendVersion();
29 IBackendInternalUniquePtr GetBackend();
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010030 BackendRegistry::FactoryFunction GetFactoryFunction();
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010031
32private:
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010033 /// Private utility functions
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010034 template<typename BackendFunctionType>
35 BackendFunctionType SetFunctionPointer(const std::string& backendFunctionName);
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010036 IBackendInternalUniquePtr CreateBackend();
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010037
38 /// Backend function pointer types
39 using IdFunctionType = const char*(*)();
40 using VersionFunctionType = void(*)(uint32_t*, uint32_t*);
41 using FactoryFunctionType = void*(*)();
42
43 /// Backend function pointers
44 IdFunctionType m_BackendIdFunction;
45 VersionFunctionType m_BackendVersionFunction;
46 FactoryFunctionType m_BackendFactoryFunction;
47
48 /// Shared object handle
49 HandlePtr m_Handle;
50};
51
Matteo Martincighe54aa062019-08-05 14:12:11 +010052using DynamicBackendPtr = std::unique_ptr<DynamicBackend>;
53
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010054} // namespace armnn