diff --git a/openblas-build/src/build.rs b/openblas-build/src/build.rs index 6e87fe1..5be60d7 100644 --- a/openblas-build/src/build.rs +++ b/openblas-build/src/build.rs @@ -330,6 +330,30 @@ pub struct Deliverables { } impl Configure { + fn cross_compile_args(&self) -> Result, Error> { + let mut args = Vec::new(); + for name in ["CC", "FC", "HOSTCC"] { + if let Ok(value) = std::env::var(format!("OPENBLAS_{}", name)) { + args.push(format!("{}={}", name, value)); + eprintln!("{}={}", name, value); + } else { + eprintln!("not found {}", name); + } + } + // for successful compile all 3 env-vars must be set + if !args.is_empty() && args.len() != 3 { + return Err(Error::MissingCrossCompileInfo); + } + // optional flags + for name in ["RANLIB"] { + if let Ok(value) = std::env::var(format!("OPENBLAS_{}", name)) { + args.push(format!("{}={}", name, value)); + eprintln!("{}={}", name, value); + } + } + Ok(args) + } + fn make_args(&self) -> Vec { let mut args = Vec::new(); if self.no_static { @@ -467,6 +491,7 @@ impl Configure { .stdout(out) .stderr(err) .args(&self.make_args()) + .args(&self.cross_compile_args()?) .args(["all"]) .env_remove("TARGET") .check_call() diff --git a/openblas-build/src/error.rs b/openblas-build/src/error.rs index e49e9e8..9ec2fef 100644 --- a/openblas-build/src/error.rs +++ b/openblas-build/src/error.rs @@ -24,6 +24,9 @@ pub enum Error { #[error("Target {} is unsupported", target)] UnsupportedTarget { target: String }, + #[error("Insufficient cross compile information, need all of OPENBLAS_{{CC, FC, HOSTCC}}")] + MissingCrossCompileInfo, + #[error("Other IO errors: {0:?}")] IOError(#[from] io::Error), }