Skip to content

Commit 199c8ab

Browse files
committed
---
yaml --- r: 3674 b: refs/heads/master c: b135277 h: refs/heads/master v: v3
1 parent b568dee commit 199c8ab

File tree

2 files changed

+75
-73
lines changed

2 files changed

+75
-73
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 6d6c4c2a7699778cb641cf96f4b08f7fc4402840
2+
refs/heads/master: b13527735e5977d544eff498469cda9d9c4511de

trunk/src/comp/driver/rustc.rs

+74-72
Original file line numberDiff line numberDiff line change
@@ -471,88 +471,90 @@ fn main(vec[str] args) {
471471
// gcc to link the object file with some libs
472472
//
473473
// TODO: Factor this out of main.
474-
if (sopts.output_type == link::output_type_exe) {
475-
let str glu = binary_dir + "/lib/glue.o";
476-
let str main = "rt/main.o";
477-
let str stage = "-L" + binary_dir + "/lib";
478-
let str prog = "gcc";
479-
// The invocations of gcc share some flags across platforms
480-
481-
let vec[str] gcc_args =
482-
[stage, "-Lrt", "-lrustrt", glu, "-m32", "-o",
483-
saved_out_filename, saved_out_filename + ".o"];
484-
auto lib_cmd;
485-
486-
auto os = sess.get_targ_cfg().os;
487-
if (os == session::os_macos) {
488-
lib_cmd = "-dynamiclib";
489-
} else {
490-
lib_cmd = "-shared";
491-
}
474+
if (sopts.output_type != link::output_type_exe) {
475+
ret;
476+
}
492477

493-
// Converts a library file name into a gcc -l argument
494-
fn unlib(@session::config config, str filename) -> str {
495-
auto rmlib = bind fn(@session::config config,
496-
str filename) -> str {
497-
if (config.os == session::os_macos
498-
|| config.os == session::os_linux
499-
&& str::find(filename, "lib") == 0) {
500-
ret str::slice(filename, 3u, str::byte_len(filename));
501-
} else {
502-
ret filename;
503-
}
504-
} (config, _);
505-
fn rmext(str filename) -> str {
506-
auto parts = str::split(filename, '.' as u8);
507-
vec::pop(parts);
508-
ret str::connect(parts, ".");
509-
}
510-
ret alt (config.os) {
511-
case (session::os_macos) { rmext(rmlib(filename)) }
512-
case (session::os_linux) { rmext(rmlib(filename)) }
513-
case (_) { rmext(filename) }
514-
};
515-
}
478+
let str glu = binary_dir + "/lib/glue.o";
479+
let str main = "rt/main.o";
480+
let str stage = "-L" + binary_dir + "/lib";
481+
let str prog = "gcc";
482+
// The invocations of gcc share some flags across platforms
483+
484+
let vec[str] gcc_args =
485+
[stage, "-Lrt", "-lrustrt", glu, "-m32", "-o",
486+
saved_out_filename, saved_out_filename + ".o"];
487+
auto lib_cmd;
488+
489+
auto os = sess.get_targ_cfg().os;
490+
if (os == session::os_macos) {
491+
lib_cmd = "-dynamiclib";
492+
} else {
493+
lib_cmd = "-shared";
494+
}
516495

517-
for (str cratepath in sess.get_used_crate_files()) {
518-
auto dir = fs::dirname(cratepath);
519-
if (dir != "") {
520-
gcc_args += ["-L" + dir];
496+
// Converts a library file name into a gcc -l argument
497+
fn unlib(@session::config config, str filename) -> str {
498+
auto rmlib = bind fn(@session::config config,
499+
str filename) -> str {
500+
if (config.os == session::os_macos
501+
|| config.os == session::os_linux
502+
&& str::find(filename, "lib") == 0) {
503+
ret str::slice(filename, 3u, str::byte_len(filename));
504+
} else {
505+
ret filename;
521506
}
522-
auto libarg = unlib(sess.get_targ_cfg(), fs::basename(cratepath));
523-
gcc_args += ["-l" + libarg];
507+
} (config, _);
508+
fn rmext(str filename) -> str {
509+
auto parts = str::split(filename, '.' as u8);
510+
vec::pop(parts);
511+
ret str::connect(parts, ".");
524512
}
513+
ret alt (config.os) {
514+
case (session::os_macos) { rmext(rmlib(filename)) }
515+
case (session::os_linux) { rmext(rmlib(filename)) }
516+
case (_) { rmext(filename) }
517+
};
518+
}
525519

526-
gcc_args += sess.get_used_link_args();
527-
auto used_libs = sess.get_used_libraries();
528-
for (str l in used_libs) {
529-
gcc_args += ["-l" + l];
520+
for (str cratepath in sess.get_used_crate_files()) {
521+
auto dir = fs::dirname(cratepath);
522+
if (dir != "") {
523+
gcc_args += ["-L" + dir];
530524
}
525+
auto libarg = unlib(sess.get_targ_cfg(), fs::basename(cratepath));
526+
gcc_args += ["-l" + libarg];
527+
}
531528

532-
if (sopts.library) {
533-
gcc_args += [lib_cmd];
534-
} else {
535-
// FIXME: why do we hardcode -lm?
536-
gcc_args += ["-lm", main];
537-
}
538-
// We run 'gcc' here
529+
gcc_args += sess.get_used_link_args();
530+
auto used_libs = sess.get_used_libraries();
531+
for (str l in used_libs) {
532+
gcc_args += ["-l" + l];
533+
}
539534

540-
auto err_code = run::run_program(prog, gcc_args);
541-
if (0 != err_code) {
542-
sess.err(#fmt("linking with gcc failed with code %d", err_code));
543-
sess.note(#fmt("gcc arguments: %s", str::connect(gcc_args, " ")));
544-
sess.abort_if_errors();
545-
}
546-
// Clean up on Darwin
535+
if (sopts.library) {
536+
gcc_args += [lib_cmd];
537+
} else {
538+
// FIXME: why do we hardcode -lm?
539+
gcc_args += ["-lm", main];
540+
}
541+
// We run 'gcc' here
547542

548-
if (sess.get_targ_cfg().os == session::os_macos) {
549-
run::run_program("dsymutil", [saved_out_filename]);
550-
}
543+
auto err_code = run::run_program(prog, gcc_args);
544+
if (0 != err_code) {
545+
sess.err(#fmt("linking with gcc failed with code %d", err_code));
546+
sess.note(#fmt("gcc arguments: %s", str::connect(gcc_args, " ")));
547+
sess.abort_if_errors();
548+
}
549+
// Clean up on Darwin
551550

552-
// Remove the temporary object file if we aren't saving temps
553-
if (!sopts.save_temps) {
554-
run::run_program("rm", [saved_out_filename + ".o"]);
555-
}
551+
if (sess.get_targ_cfg().os == session::os_macos) {
552+
run::run_program("dsymutil", [saved_out_filename]);
553+
}
554+
555+
// Remove the temporary object file if we aren't saving temps
556+
if (!sopts.save_temps) {
557+
run::run_program("rm", [saved_out_filename + ".o"]);
556558
}
557559
}
558560
// Local Variables:

0 commit comments

Comments
 (0)