// instead of hard-coded gcc.
// For win32, there is no cc command,
// so we add a condition to make it use gcc.
- let cc_prog: ~str = if sess.targ_cfg.os == session::os_android {
- match &sess.opts.android_cross_path {
- &Some(copy path) => {
- fmt!("%s/bin/arm-linux-androideabi-gcc", path)
- }
- &None => {
- sess.fatal(~"need Android NDK path for linking \
- (--android-cross-path)")
+ let cc_prog: ~str = match sess.opts.linker {
+ Some(copy linker) => linker,
+ None => {
+ if sess.targ_cfg.os == session::os_android {
+ match &sess.opts.android_cross_path {
+ &Some(copy path) => {
+ fmt!("%s/bin/arm-linux-androideabi-gcc", path)
+ }
+ &None => {
+ sess.fatal(~"need Android NDK path for linking \
+ (--android-cross-path)")
+ }
+ }
+ } else if sess.targ_cfg.os == session::os_win32 {
+ ~"gcc"
+ } else {
+ ~"cc"
}
}
- } else if sess.targ_cfg.os == session::os_win32 { ~"gcc" }
- else { ~"cc" };
+ };
// The invocations of cc share some flags across platforms
};
let addl_lib_search_paths = getopts::opt_strs(matches, ~"L").map(|s| Path(*s));
-
+ let linker = getopts::opt_maybe_str(matches, ~"linker");
let linker_args = getopts::opt_strs(matches, ~"link-args").flat_map( |a| {
let mut args = ~[];
for str::each_split_char(*a, ' ') |arg| {
jit: jit,
output_type: output_type,
addl_lib_search_paths: addl_lib_search_paths,
+ linker: linker,
linker_args: linker_args,
maybe_sysroot: sysroot_opt,
target_triple: target,
optmulti("L", "", "Add a directory to the library search path",
"PATH"),
optflag("", "lib", "Compile a library crate"),
+ optopt("", "linker", "Program to use for linking instead of the default.", "LINKER"),
optmulti("", "link-args", "FLAGS is a space-separated list of flags
passed to the linker", "FLAGS"),
optflag("", "ls", "List the symbols defined by a library crate"),
jit: bool,
output_type: back::link::output_type,
addl_lib_search_paths: ~[Path],
+ linker: Option<~str>,
linker_args: ~[~str],
maybe_sysroot: Option<Path>,
target_triple: ~str,
jit: false,
output_type: link::output_type_exe,
addl_lib_search_paths: ~[],
- linker_args:~[],
+ linker: None,
+ linker_args: ~[],
maybe_sysroot: None,
target_triple: host_triple(),
target_feature: ~"",