17 inline namespace _V1 {
18 namespace detail::pi {
23 void *so = dlopen(LibraryPath.c_str(), RTLD_NOW);
25 char *Error = dlerror();
26 std::cerr <<
"SYCL_PI_TRACE[-1]: dlopen(" << LibraryPath
27 <<
") failed with <" << (Error ? Error :
"unknown error") <<
">"
44 return dlclose(Library);
48 return dlsym(Library, FunctionName.c_str());
52 std::vector<std::tuple<std::string, backend, void *>>
53 loadPlugins(
const std::vector<std::pair<std::string, backend>> &&PluginNames) {
54 std::vector<std::tuple<std::string, backend, void *>> LoadedPlugins;
55 const std::string LibSYCLDir =
56 sycl::detail::OSUtil::getCurrentDSODir() + sycl::detail::OSUtil::DirSep;
58 for (
auto &PluginName : PluginNames) {
61 std::move(PluginName.first), std::move(PluginName.second), Library));
__SYCL_EXTERN_STREAM_ATTRS ostream cerr
Linked to standard error (unbuffered)
int unloadOsLibrary(void *Library)
void * loadOsPluginLibrary(const std::string &Library)
bool trace(TraceLevel level)
void * loadOsLibrary(const std::string &Library)
void * getOsLibraryFuncAddress(void *Library, const std::string &FunctionName)
int unloadOsPluginLibrary(void *Library)
std::vector< std::tuple< std::string, backend, void * > > loadPlugins(const std::vector< std::pair< std::string, backend >> &&PluginNames)
constexpr tuple< Ts... > make_tuple(Ts... Args)
C++ wrapper of extern "C" PI interfaces.