ctranslate2_src_build_support/
link.rs1use std::path::PathBuf;
2
3use crate::{Os, dnnl::build_dnnl};
4
5pub fn link(
6 os: Os,
7 cuda: bool,
8 cudnn: bool,
9 cuda_dynamic_loading: bool,
10 openblas: bool,
11 dnnl: bool,
12 accelarate: bool,
13 openmp_comp: bool,
14 openmp_intel: bool,
15 cuda_root: Option<PathBuf>,
16 shared: bool,
17) {
18 if cuda && !shared {
19 if let Some(cuda) = cuda_root {
20 println!("cargo:rustc-link-search={}", cuda.join("lib").display());
21 println!("cargo:rustc-link-search={}", cuda.join("lib64").display());
22 println!("cargo:rustc-link-search={}", cuda.join("lib/x64").display());
23 }
24
25 println!("cargo:rustc-link-lib=static=cudart_static");
26 if cudnn {
27 println!("cargo:rustc-link-lib=cudnn");
28 }
29 if !cuda_dynamic_loading {
30 if os == Os::Win {
31 println!("cargo:rustc-link-lib=static=cublas");
32 println!("cargo:rustc-link-lib=static=cublasLt");
33 } else {
34 println!("cargo:rustc-link-lib=static=cublas_static");
35 println!("cargo:rustc-link-lib=static=cublasLt_static");
36 println!("cargo:rustc-link-lib=static=culibos");
37 }
38 }
39 }
40
41 if openblas && !shared {
42 println!("cargo:rustc-link-lib=static=openblas");
43 }
44 if accelarate {
45 println!("cargo:rustc-link-lib=framework=Accelerate");
46 }
47 if dnnl {
48 build_dnnl(!shared);
49 }
50 if openmp_comp && !shared {
51 println!("cargo:rustc-link-lib=gomp");
52 } else if openmp_intel && !shared {
53 if os == Os::Win {
54 println!("cargo:rustc-link-lib=dylib=libiomp5md");
55 } else {
56 println!("cargo:rustc-link-lib=iomp5");
57 }
58 }
59}