-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.rs
59 lines (48 loc) · 1.86 KB
/
build.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use glob::glob;
use std::path::Path;
use std::path::PathBuf;
use std::fs;
use std::process::Command;
fn main() {
let build_dir = "./src/cuda/build/";
fs::create_dir(&build_dir);
let status = Command::new("sh")
.arg("-c")
.arg("cmake .. && make -j12")
.current_dir(build_dir)
.status()
.expect("Failed to execute command");
let cuda_build_dir_relative = "./src/cuda/build/core";
let current_dir = std::env::current_dir().expect("Failed to get current directory");
let cuda_build_dir = current_dir.join(cuda_build_dir_relative);
let cuda_home = match std::env::var("CUDA_HOME") {
Ok(val) => val,
Err(_) => {
match std::env::var("CUDA_PATH") {
Ok(val) => val,
Err(_) => {
eprintln!("CUDA_HOME or CUDA_PATH environment variable not set.");
std::process::exit(1);
}
}
}
};
let cuda_lib_dir = format!("{}/lib64", cuda_home);
let cuda_include_dir = format!("{}/include", cuda_home);
println!("CUDA library directory: {}", cuda_lib_dir);
println!("CUDA include directory: {}", cuda_include_dir);
println!(
"cargo:rustc-link-search=native={}",
cuda_build_dir.display()
);
println!("cargo:rustc-link-lib=static=panda-cuda");
println!("cargo:rustc-link-search=native={}", cuda_lib_dir);
println!("cargo:rustc-link-lib=dylib=curand");
println!("cargo:rustc-link-search=native={}", cuda_lib_dir);
println!("cargo:rustc-link-lib=dylib=cudart");
println!("cargo:rerun-if-env-changed=LD_LIBRARY_PATH");
println!("cargo:rustc-env=LD_LIBRARY_PATH={}", cuda_lib_dir);
println!("cargo:rustc-link-search=native={}", cuda_include_dir);
println!("cargo:rustc-link-lib=dylib=cuda");
println!("cargo:rustc-link-lib=dylib=stdc++");
}