From 19e97f5c5db9b47558c7bdc2249c228254b81a1e Mon Sep 17 00:00:00 2001 From: Young-il Choi <duddlf.choi@samsung.com> Date: Fri, 6 Dec 2013 15:44:27 +0900 Subject: [PATCH 1/4] librustc: ar call fix to support android cross compile on mac --- src/librustc/back/archive.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/librustc/back/archive.rs b/src/librustc/back/archive.rs index 07457b1db27..e7535d8199d 100644 --- a/src/librustc/back/archive.rs +++ b/src/librustc/back/archive.rs @@ -37,7 +37,15 @@ pub struct ArchiveRO { fn run_ar(sess: Session, args: &str, cwd: Option<&Path>, paths: &[&Path]) -> ProcessOutput { - let ar = sess.opts.ar.clone().unwrap_or_else(|| ~"ar"); + 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 mut args = ~[args.to_owned()]; let mut paths = paths.iter().map(|p| p.as_str().unwrap().to_owned()); args.extend(&mut paths); From c8c99429d2d40e70824dae90305acae88a3d917d Mon Sep 17 00:00:00 2001 From: Young-il Choi <duddlf.choi@samsung.com> Date: Fri, 27 Dec 2013 17:29:53 +0900 Subject: [PATCH 2/4] librustc: move target dependent logic to back::link --- src/librustc/back/archive.rs | 10 ++-------- src/librustc/back/link.rs | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) 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, From e6490cbdb01dfa8687d29c42ac3e7342ff2bafaf Mon Sep 17 00:00:00 2001 From: Young-il Choi <duddlf.choi@samsung.com> Date: Thu, 2 Jan 2014 15:43:47 +0900 Subject: [PATCH 3/4] librustc: add get_system_tools for target specific environment --- src/librustc/back/link.rs | 41 +++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index a0364101d3d..414978df1db 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -724,32 +724,39 @@ pub fn get_cc_prog(sess: Session) -> ~str { // instead of hard-coded gcc. // For win32, there is no cc command, so we add a condition to make it use gcc. match sess.targ_cfg.os { - abi::OsAndroid => match sess.opts.android_cross_path { - Some(ref path) => format!("{}/bin/arm-linux-androideabi-gcc", *path), - None => { - sess.fatal("need Android NDK path for linking \ - (--android-cross-path)") - } - }, - abi::OsWin32 => ~"gcc", - _ => ~"cc", + abi::OsWin32 => return ~"gcc", + _ => {}, } + + get_system_tool(sess, "cc") } pub fn get_ar_prog(sess: Session) -> ~str { + match sess.opts.ar { + Some(ref ar) => return ar.to_owned(), + None => {} + } + + get_system_tool(sess, "ar") +} + +fn get_system_tool(sess: Session, tool: &str) -> ~str { match sess.targ_cfg.os { abi::OsAndroid => match sess.opts.android_cross_path { - Some(ref path) => format!("{}/bin/arm-linux-androideabi-ar", *path), + Some(ref path) => { + let tool_str = match tool { + "cc" => "gcc", + _ => tool + }; + format!("{}/bin/arm-linux-androideabi-{}", *path, tool_str) + } None => { - sess.fatal("need Android NDK path for linking \ - (--android-cross-path)") + sess.fatal(format!("need Android NDK path for the '{}' tool \ + (--android-cross-path)", tool)) } }, - _ => match sess.opts.ar { - Some(ref ar) => format!("{}", *ar), - None => ~"ar" - }, - } + _ => tool.to_owned(), + } } /// Perform the linkage portion of the compilation phase. This will generate all From 635002a3503b1020433f729dbb5b37e30a691813 Mon Sep 17 00:00:00 2001 From: Young-il Choi <duddlf.choi@samsung.com> Date: Mon, 6 Jan 2014 13:06:06 +0900 Subject: [PATCH 4/4] librustc: tidy cleanup --- src/librustc/back/link.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 414978df1db..a73c3cf6b5c 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -756,7 +756,7 @@ fn get_system_tool(sess: Session, tool: &str) -> ~str { } }, _ => tool.to_owned(), - } + } } /// Perform the linkage portion of the compilation phase. This will generate all