ctranslate2_src_build_support/
link.rs

1use 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}