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