2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
6 #include "DynamicBackendUtils.hpp"
11 void* DynamicBackendUtils::OpenHandle(const std::string& sharedObjectPath)
13 if (sharedObjectPath.empty())
15 throw RuntimeException("OpenHandle error: shared object path must not be empty");
18 void* sharedObjectHandle = dlopen(sharedObjectPath.c_str(), RTLD_LAZY | RTLD_GLOBAL);
19 if (!sharedObjectHandle)
21 throw RuntimeException(boost::str(boost::format("OpenHandle error: %1%") % GetDlError()));
24 return sharedObjectHandle;
27 void DynamicBackendUtils::CloseHandle(const void* sharedObjectHandle)
29 if (!sharedObjectHandle)
34 dlclose(const_cast<void*>(sharedObjectHandle));
37 bool DynamicBackendUtils::IsBackendCompatible(const BackendVersion &backendVersion)
39 BackendVersion backendApiVersion = IBackendInternal::GetApiVersion();
41 return IsBackendCompatibleImpl(backendApiVersion, backendVersion);
44 bool DynamicBackendUtils::IsBackendCompatibleImpl(const BackendVersion &backendApiVersion,
45 const BackendVersion &backendVersion)
47 return backendVersion.m_Major == backendApiVersion.m_Major &&
48 backendVersion.m_Minor <= backendApiVersion.m_Minor;
51 std::string DynamicBackendUtils::GetDlError()
53 const char* errorMessage = dlerror();
59 return std::string(errorMessage);