blob: 34c001958dfd1735d22759c19c606dbffb129bac [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 Martincigh0c2b2892019-08-05 14:12:11 +01009#include "BackendRegistry.hpp"
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010010
11#include <functional>
12#include <memory>
13
14namespace armnn
15{
16
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010017class DynamicBackend final
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010018{
19public:
20 using HandleCloser = std::function<void(const void*)>;
21 using HandlePtr = std::unique_ptr<void, HandleCloser>;
22
23 explicit DynamicBackend(const void* sharedObjectHandle);
24
25 /// Public dynamic backend functions
26 BackendId GetBackendId();
27 BackendVersion GetBackendVersion();
28 IBackendInternalUniquePtr GetBackend();
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010029 BackendRegistry::FactoryFunction GetFactoryFunction();
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010030
31private:
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010032 /// Private utility functions
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010033 template<typename BackendFunctionType>
34 BackendFunctionType SetFunctionPointer(const std::string& backendFunctionName);
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010035 IBackendInternalUniquePtr CreateBackend();
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010036
37 /// Backend function pointer types
38 using IdFunctionType = const char*(*)();
39 using VersionFunctionType = void(*)(uint32_t*, uint32_t*);
40 using FactoryFunctionType = void*(*)();
41
42 /// Backend function pointers
43 IdFunctionType m_BackendIdFunction;
44 VersionFunctionType m_BackendVersionFunction;
45 FactoryFunctionType m_BackendFactoryFunction;
46
47 /// Shared object handle
48 HandlePtr m_Handle;
49};
50
Matteo Martincighe54aa062019-08-05 14:12:11 +010051using DynamicBackendPtr = std::unique_ptr<DynamicBackend>;
52
Matteo Martincigh2e7f6ad2019-07-24 09:54:26 +010053} // namespace armnn