dtlvnative_sys/
runtime.rs1use std::{env, path::PathBuf};
2
3pub fn directory() -> PathBuf {
7 env::var_os("DTLVNATIVE_RUNTIME_DIR")
8 .map(PathBuf::from)
9 .unwrap_or_else(|| PathBuf::from(env!("DTLVNATIVE_RUNTIME_DIR")))
10}
11
12pub(crate) fn load(name: &str) -> Result<libloading::Library, String> {
13 let path = std::path::absolute(directory().join(name)).map_err(|error| error.to_string())?;
14 unsafe {
18 #[cfg(windows)]
19 let result = libloading::os::windows::Library::load_with_flags(
20 &path,
21 libloading::os::windows::LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
22 | libloading::os::windows::LOAD_LIBRARY_SEARCH_DEFAULT_DIRS,
23 )
24 .map(libloading::Library::from);
25 #[cfg(not(windows))]
26 let result = libloading::Library::new(&path);
27 result.map_err(|error| format!("Could not load {}: {error}. Deploy the runtime and its bundled OpenMP library together and set DTLVNATIVE_RUNTIME_DIR.", path.display()))
28 }
29}