diff --git a/src/librustc/back/archive.rs b/src/librustc/back/archive.rs index e7535d8199d..cc96bea9fa1 100644 --- a/src/librustc/back/archive.rs +++ b/src/librustc/back/archive.rs @@ -10,6 +10,7 @@ //! A helper class for dealing with static archives +use back::link::{get_ar_prog}; use driver::session::Session; use metadata::filesearch; use lib::llvm::{ArchiveRef, llvm}; @@ -37,14 +38,7 @@ pub struct ArchiveRO { fn run_ar(sess: Session, args: &str, cwd: Option<&Path>, paths: &[&Path]) -> ProcessOutput { - let ar = if sess.opts.target_triple == ~"arm-linux-androideabi" { - match sess.opts.android_cross_path { - Some(ref path) => *path + "/bin/" + "arm-linux-androideabi-ar", - None => ~"arm-linux-androideabi-ar" - } - } else { - sess.opts.ar.clone().unwrap_or_else(|| ~"ar") - }; + let ar = get_ar_prog(sess); let mut args = ~[args.to_owned()]; let mut paths = paths.iter().map(|p| p.as_str().unwrap().to_owned()); diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index a63d0041d0c..a0364101d3d 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -736,6 +736,22 @@ pub fn get_cc_prog(sess: Session) -> ~str { } } +pub fn get_ar_prog(sess: Session) -> ~str { + match sess.targ_cfg.os { + abi::OsAndroid => match sess.opts.android_cross_path { + Some(ref path) => format!("{}/bin/arm-linux-androideabi-ar", *path), + None => { + sess.fatal("need Android NDK path for linking \ + (--android-cross-path)") + } + }, + _ => match sess.opts.ar { + Some(ref ar) => format!("{}", *ar), + None => ~"ar" + }, + } +} + /// Perform the linkage portion of the compilation phase. This will generate all /// of the requested outputs for this compilation session. pub fn link_binary(sess: Session,