blob: 0ab02d7c98bb06c5dcf2f500c3f8972f032adef7 [file] [log] [blame]
Matteo Martincighd73cecb2019-07-24 09:15:00 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "DynamicBackendUtils.hpp"
7
8namespace armnn
9{
10
11void* DynamicBackendUtils::OpenHandle(const std::string& sharedObjectPath)
12{
13 if (sharedObjectPath.empty())
14 {
15 throw RuntimeException("OpenHandle error: shared object path must not be empty");
16 }
17
18 void* sharedObjectHandle = dlopen(sharedObjectPath.c_str(), RTLD_LAZY | RTLD_GLOBAL);
19 if (!sharedObjectHandle)
20 {
Matteo Martincighb19d2e92019-07-25 14:04:40 +010021 throw RuntimeException(boost::str(boost::format("OpenHandle error: %1%") % GetDlError()));
Matteo Martincighd73cecb2019-07-24 09:15:00 +010022 }
23
24 return sharedObjectHandle;
25}
26
27void DynamicBackendUtils::CloseHandle(const void* sharedObjectHandle)
28{
29 if (!sharedObjectHandle)
30 {
31 return;
32 }
33
34 dlclose(const_cast<void*>(sharedObjectHandle));
35}
36
Matteo Martincighac60d282019-07-25 15:25:44 +010037bool DynamicBackendUtils::IsBackendCompatible(const BackendVersion &backendVersion)
38{
39 BackendVersion backendApiVersion = IBackendInternal::GetApiVersion();
40
41 return IsBackendCompatibleImpl(backendApiVersion, backendVersion);
42}
43
44bool DynamicBackendUtils::IsBackendCompatibleImpl(const BackendVersion &backendApiVersion,
45 const BackendVersion &backendVersion)
46{
47 return backendVersion.m_Major == backendApiVersion.m_Major &&
48 backendVersion.m_Minor <= backendApiVersion.m_Minor;
49}
50
Matteo Martincighd73cecb2019-07-24 09:15:00 +010051std::string DynamicBackendUtils::GetDlError()
52{
53 const char* errorMessage = dlerror();
54 if (!errorMessage)
55 {
56 return "";
57 }
58
59 return std::string(errorMessage);
60}
61
62} // namespace armnn