#![allow(dead_code)]
use std::env;
use std::path::PathBuf;
pub const CUDA_PATH_ENV_VARS: [&str; 4] = [
"CUDA_PATH",
"CUDA_HOME",
"CUDA_ROOT",
"CUDA_TOOLKIT_ROOT_DIR",
];
const STANDARD_ROOTS: &[&str] = &[
"/usr",
"/usr/local/cuda",
"/opt/cuda",
"/usr/lib/cuda",
"C:/Program Files/NVIDIA GPU Computing Toolkit",
"C:/Program Files/NVIDIA",
"C:/CUDA",
];
const LIB_SUBDIRS: &[&str] = &[
"lib",
"lib/x64",
"lib/Win32",
"lib/x86_64",
"lib/x86_64-linux-gnu",
"lib/stubs",
"lib64",
"lib64/stubs",
"targets/x86_64-linux/lib",
"targets/x86_64-linux/lib/stubs",
];
pub fn cuda_roots_from_env() -> Vec<PathBuf> {
CUDA_PATH_ENV_VARS
.iter()
.filter_map(|var| env::var(var).ok())
.map(PathBuf::from)
.filter(|p| p.exists())
.collect()
}
pub fn cuda_lib_search_paths() -> Vec<PathBuf> {
let env_roots = cuda_roots_from_env();
let roots: Vec<PathBuf> = if env_roots.is_empty() {
STANDARD_ROOTS
.iter()
.map(PathBuf::from)
.filter(|p| p.exists())
.collect()
} else {
env_roots
};
let mut candidates = Vec::new();
for root in &roots {
for subdir in LIB_SUBDIRS {
let path = root.join(subdir);
if path.is_dir() {
candidates.push(path);
}
}
}
candidates
}