Files
sitk-registration-sys/build.rs
2025-03-01 19:40:37 +01:00

63 lines
2.5 KiB
Rust

use cmake::Config;
use git2::Repository;
use std::ffi::OsStr;
use std::path::PathBuf;
fn main() {
if std::env::var("DOCS_RS").is_err() {
let out_dir = PathBuf::from(std::env::var("OUT_DIR").expect("OUT_DIR is undefined"));
let mut target_dir = out_dir.clone();
while target_dir.file_name() != Some(OsStr::new("target")) {
if !target_dir.pop() {
panic!("Could not find target directory");
}
}
let sitk_dir = if let Some(d) = target_dir.parent() {
d.join("sitk").to_path_buf()
} else {
target_dir.join("sitk")
};
if !sitk_dir.exists() {
Repository::clone("https://github.com/SimpleITK/SimpleITK.git", &sitk_dir)
.expect("unable to clone sitk");
}
let sitk_build_dir = sitk_dir.join("build");
if !sitk_build_dir.exists() {
println!("cargo::warning=Simple ITK; this will take a long time...");
Config::new(sitk_dir.join("SuperBuild"))
.out_dir(&sitk_dir)
.no_build_target(true)
.define("BUILD_TESTING", "OFF")
.define("WRAP_CSHARP", "OFF")
.define("WRAP_JAVA", "OFF")
.define("WRAP_LUA", "OFF")
.define("WRAP_R", "OFF")
.define("WRAP_RUBY", "OFF")
.define("WRAP_TCL", "OFF")
.define("WRAP_PYTHON", "OFF")
.define("WRAP_DEFAULT", "OFF")
.define("SimpleITK_USE_ELASTIX", "ON")
.build();
}
// println!("cargo::rustc-env=CMAKE_INSTALL_PREFIX=/home/wim/code/rust/sitk-sys/cpp");
println!(
"cargo::rustc-env=CMAKE_INSTALL_PREFIX={}",
out_dir.display()
);
let path = Config::new("cpp")
.very_verbose(true)
.define("Elastix_DIR", sitk_build_dir.join("Elastix-build"))
.define("ITK_DIR", sitk_build_dir.join("ITK-build"))
.define("SimpleITK_DIR", sitk_build_dir.join("SimpleITK-build"))
.define("CMAKE_INSTALL_PREFIX", out_dir)
.build();
println!("cargo::rustc-link-arg=-Wl,-rpath,{}", path.display());
println!("cargo::rustc-link-search={}", path.join("build").display());
println!("cargo::rustc-link-lib=dylib=sitk_adapter");
println!("cargo::rerun-if-changed=build.rs");
println!("cargo::rerun-if-changed=cpp/*.cxx");
}
}