1#include "ggml-backend-dl.h"
2
3#ifdef _WIN32
4
5dl_handle * dl_load_library(const fs::path & path) {
6 // suppress error dialogs for missing DLLs
7 DWORD old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
8 SetErrorMode(old_mode | SEM_FAILCRITICALERRORS);
9
10 HMODULE handle = LoadLibraryW(path.wstring().c_str());
11
12 SetErrorMode(old_mode);
13
14 return handle;
15}
16
17void * dl_get_sym(dl_handle * handle, const char * name) {
18 DWORD old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
19 SetErrorMode(old_mode | SEM_FAILCRITICALERRORS);
20
21 void * p = (void *) GetProcAddress(handle, name);
22
23 SetErrorMode(old_mode);
24
25 return p;
26}
27
28const char * dl_error() {
29 return "";
30}
31
32#else
33
34dl_handle * dl_load_library(const fs::path & path) {
35 dl_handle * handle = dlopen(path.string().c_str(), RTLD_NOW | RTLD_LOCAL);
36 return handle;
37}
38
39void * dl_get_sym(dl_handle * handle, const char * name) {
40 return dlsym(handle, name);
41}
42
43const char * dl_error() {
44 const char *rslt = dlerror();
45 return rslt != nullptr ? rslt : "";
46}
47
48#endif