#[cfg(feature = "intel_mkl")]
use std::env;
#[cfg(feature = "intel_mkl")]
fn validate_intel_setvars_completed() {
let intel_setvars_completed = match env::var("SETVARS_COMPLETED") {
Ok(v) => v == "1",
Err(_) => false,
};
if !intel_setvars_completed {
panic!("\n\nBUILD ERROR: Intel setvars.sh need to be sourced first.\nYou must execute the following command (just once):\nsource /opt/intel/oneapi/setvars.sh\n\n")
}
}
#[cfg(not(feature = "intel_mkl"))]
fn validate_intel_setvars_completed() {}
#[cfg(not(feature = "local_libs"))]
#[cfg(not(feature = "intel_mkl"))]
fn get_information() -> (Vec<&'static str>, Vec<&'static str>, Vec<&'static str>) {
(
vec![
"/usr/lib/x86_64-linux-gnu/openmpi/include", "/usr/include/openmpi-x86_64", "/usr/include", "/usr/include/MUMPS", "/usr/include/suitesparse", ],
vec![
"/usr/lib/x86_64-linux-gnu/openmpi/lib", "/usr/lib64/openmpi/lib", ],
vec![
"mpi", "dmumps", "zmumps", "umfpack", "klu", ],
)
}
#[cfg(feature = "local_libs")]
#[cfg(not(feature = "intel_mkl"))]
fn get_information() -> (Vec<&'static str>, Vec<&'static str>, Vec<&'static str>) {
(
vec![
"/usr/lib/x86_64-linux-gnu/openmpi/include", "/usr/local/include/mumps", "/usr/local/include/umfpack", ],
vec![
"/usr/lib/x86_64-linux-gnu/openmpi/lib", "/usr/local/lib/mumps", "/usr/local/lib/umfpack", ],
vec![
"mpi", "dmumps_cpmech", "zmumps_cpmech", "umfpack", "klu", ],
)
}
#[cfg(feature = "intel_mkl")]
fn get_information() -> (Vec<&'static str>, Vec<&'static str>, Vec<&'static str>) {
(
vec![
"/opt/intel/oneapi/mpi/latest/include", "/usr/local/include/mumps", "/usr/local/include/umfpack", ],
vec![
"/opt/intel/oneapi/mpi/latest/lib", "/usr/local/lib/mumps", "/usr/local/lib/umfpack", ],
vec![
"mpi", "dmumps_cpmech", "zmumps_cpmech", "umfpack", "klu", ],
)
}
fn main() {
validate_intel_setvars_completed();
let (inc_dirs, lib_dirs, libs) = get_information();
cc::Build::new()
.file("c_code/interface_complex_mumps.c")
.file("c_code/interface_mumps.c")
.includes(&inc_dirs)
.compile("c_code_interface_mumps");
cc::Build::new()
.file("c_code/interface_complex_umfpack.c")
.file("c_code/interface_complex_klu.c")
.file("c_code/interface_umfpack.c")
.file("c_code/interface_klu.c")
.includes(&inc_dirs)
.compile("c_code_interface_umfpack");
for d in &lib_dirs {
println!("cargo:rustc-link-search=native={}", *d);
}
for l in &libs {
println!("cargo:rustc-link-lib=dylib={}", *l);
}
}