From 13ee8efd427717d59302877ab148237c362bd305 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Sat, 2 Mar 2019 08:58:17 -0800 Subject: [PATCH] Move build.rs into core/ --- build.rs | 60 ----------------------------------------- core/build.rs | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 60 deletions(-) delete mode 100644 build.rs create mode 100644 core/build.rs diff --git a/build.rs b/build.rs deleted file mode 100644 index 72d2686e4..000000000 --- a/build.rs +++ /dev/null @@ -1,60 +0,0 @@ -use std::env; -use std::fs; - -fn main() { - println!("cargo:rerun-if-changed=build.rs"); - - // Ensure target/perf-libs/ exists. It's been observed that - // a cargo:rerun-if-changed= directive with a non-existent - // directory triggers a rebuild on every |cargo build| invocation - fs::create_dir_all("target/perf-libs").unwrap_or_else(|err| { - if err.kind() != std::io::ErrorKind::AlreadyExists { - panic!("Unable to create target/perf-libs: {:?}", err); - } - }); - - let chacha = !env::var("CARGO_FEATURE_CHACHA").is_err(); - let cuda = !env::var("CARGO_FEATURE_CUDA").is_err(); - let erasure = !env::var("CARGO_FEATURE_ERASURE").is_err(); - - if chacha || cuda || erasure { - println!("cargo:rerun-if-changed=target/perf-libs"); - println!("cargo:rustc-link-search=native=target/perf-libs"); - } - if chacha { - println!("cargo:rerun-if-changed=target/perf-libs/libcpu-crypt.a"); - } - if cuda { - let cuda_home = match env::var("CUDA_HOME") { - Ok(cuda_home) => cuda_home, - Err(_) => String::from("/usr/local/cuda"), - }; - - println!("cargo:rerun-if-changed=target/perf-libs/libcuda-crypt.a"); - println!("cargo:rustc-link-lib=static=cuda-crypt"); - println!("cargo:rustc-link-search=native={}/lib64", cuda_home); - println!("cargo:rustc-link-lib=dylib=cudart"); - println!("cargo:rustc-link-lib=dylib=cuda"); - println!("cargo:rustc-link-lib=dylib=cudadevrt"); - } - if erasure { - #[cfg(any(target_os = "macos", target_os = "ios"))] - { - println!("cargo:rerun-if-changed=target/perf-libs/libgf_complete.dylib"); - println!("cargo:rerun-if-changed=target/perf-libs/libJerasure.dylib"); - } - #[cfg(all(unix, not(any(target_os = "macos", target_os = "ios"))))] - { - println!("cargo:rerun-if-changed=target/perf-libs/libgf_complete.so"); - println!("cargo:rerun-if-changed=target/perf-libs/libJerasure.so"); - } - #[cfg(windows)] - { - println!("cargo:rerun-if-changed=target/perf-libs/libgf_complete.dll"); - println!("cargo:rerun-if-changed=target/perf-libs/libJerasure.dll"); - } - - println!("cargo:rustc-link-lib=dylib=Jerasure"); - println!("cargo:rustc-link-lib=dylib=gf_complete"); - } -} diff --git a/core/build.rs b/core/build.rs new file mode 100644 index 000000000..4a3800377 --- /dev/null +++ b/core/build.rs @@ -0,0 +1,75 @@ +use std::env; +use std::fs; +use std::path::Path; + +fn main() { + println!("cargo:rerun-if-changed=build.rs"); + + let perf_libs_dir = { + let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); + let mut path = Path::new(&manifest_dir); + path = path.parent().unwrap(); + path.join(Path::new("target/perf-libs")) + }; + let perf_libs_dir = perf_libs_dir.to_str().unwrap(); + + // Ensure `perf_libs_dir` exists. It's been observed that + // a cargo:rerun-if-changed= directive with a non-existent + // directory triggers a rebuild on every |cargo build| invocation + fs::create_dir_all(&perf_libs_dir).unwrap_or_else(|err| { + if err.kind() != std::io::ErrorKind::AlreadyExists { + panic!("Unable to create {}: {:?}", perf_libs_dir, err); + } + }); + + let chacha = !env::var("CARGO_FEATURE_CHACHA").is_err(); + let cuda = !env::var("CARGO_FEATURE_CUDA").is_err(); + let erasure = !env::var("CARGO_FEATURE_ERASURE").is_err(); + + if chacha || cuda || erasure { + println!("cargo:rerun-if-changed={}", perf_libs_dir); + println!("cargo:rustc-link-search=native={}", perf_libs_dir); + } + if chacha { + println!("cargo:rerun-if-changed={}/libcpu-crypt.a", perf_libs_dir); + } + if cuda { + let cuda_home = match env::var("CUDA_HOME") { + Ok(cuda_home) => cuda_home, + Err(_) => String::from("/usr/local/cuda"), + }; + + println!("cargo:rerun-if-changed={}/libcuda-crypt.a", perf_libs_dir); + println!("cargo:rustc-link-lib=static=cuda-crypt"); + println!("cargo:rustc-link-search=native={}/lib64", cuda_home); + println!("cargo:rustc-link-lib=dylib=cudart"); + println!("cargo:rustc-link-lib=dylib=cuda"); + println!("cargo:rustc-link-lib=dylib=cudadevrt"); + } + if erasure { + #[cfg(any(target_os = "macos", target_os = "ios"))] + { + println!( + "cargo:rerun-if-changed={}/libgf_complete.dylib", + perf_libs_dir + ); + println!("cargo:rerun-if-changed={}/libJerasure.dylib", perf_libs_dir); + } + #[cfg(all(unix, not(any(target_os = "macos", target_os = "ios"))))] + { + println!("cargo:rerun-if-changed={}/libgf_complete.so", perf_libs_dir); + println!("cargo:rerun-if-changed={}/libJerasure.so", perf_libs_dir); + } + #[cfg(windows)] + { + println!( + "cargo:rerun-if-changed={}/libgf_complete.dll", + perf_libs_dir + ); + println!("cargo:rerun-if-changed={}/libJerasure.dll", perf_libs_dir); + } + + println!("cargo:rustc-link-lib=dylib=Jerasure"); + println!("cargo:rustc-link-lib=dylib=gf_complete"); + } +}