diff options
| author | Rafael Ávila de Espíndola <respindola@mozilla.com> | 2011-06-20 17:36:15 -0400 |
|---|---|---|
| committer | Rafael Ávila de Espíndola <respindola@mozilla.com> | 2011-06-20 17:44:12 -0400 |
| commit | 3d8a5cb9e67d0e38d2062bd7685aa5514305dfc6 (patch) | |
| tree | ca77815fd66229bc0c64669c8deded58b01f4613 /src/comp/driver | |
| parent | a2dcd08cc273bcc880fc9687bffc98796fa1f3c4 (diff) | |
| download | rust-3d8a5cb9e67d0e38d2062bd7685aa5514305dfc6.tar.gz rust-3d8a5cb9e67d0e38d2062bd7685aa5514305dfc6.zip | |
Remember the library files we used in rustc and pass them to the "linker".
This avoid the hardcoded -lstd, allows programs to use other crates and avoids any differences that may exist in the rustc and ld search logic.
Diffstat (limited to 'src/comp/driver')
| -rw-r--r-- | src/comp/driver/rustc.rs | 7 | ||||
| -rw-r--r-- | src/comp/driver/session.rs | 14 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index 4783c71cfc7..0acf1dfac87 100644 --- a/src/comp/driver/rustc.rs +++ b/src/comp/driver/rustc.rs @@ -271,7 +271,7 @@ fn build_session(@session::options sopts) -> session::session { auto crate_cache = common::new_int_hash[session::crate_metadata](); auto target_crate_num = 0; auto sess = - session::session(target_crate_num, target_cfg, sopts, crate_cache, + session::session(target_crate_num, target_cfg, sopts, crate_cache, [], front::codemap::new_codemap(), 0u); ret sess; } @@ -417,10 +417,13 @@ fn main(vec[str] args) { gcc_args = common_args; } } + + gcc_args += sess.get_used_libraries(); + if (sopts.shared) { gcc_args += [shared_cmd]; } else { - gcc_args += ["-Lrustllvm", "-lrustllvm", "-lstd", "-lm", main]; + gcc_args += ["-Lrustllvm", "-lrustllvm", "-lm", main]; } // We run 'gcc' here diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs index 14b8213ce3c..695cf7e5606 100644 --- a/src/comp/driver/session.rs +++ b/src/comp/driver/session.rs @@ -66,6 +66,7 @@ obj session(ast::crate_num cnum, @config targ_cfg, @options opts, map::hashmap[int, crate_metadata] crates, + mutable vec[str] used_libraries, codemap::codemap cm, mutable uint err_count) { fn get_targ_cfg() -> @config { ret targ_cfg; } @@ -122,6 +123,19 @@ obj session(ast::crate_num cnum, crates.insert(num, metadata); } fn has_external_crate(int num) -> bool { ret crates.contains_key(num); } + fn add_used_library(&str lib) { + // A program has a small number of libraries, so a vector is probably a + // good data structure in here. + for (str l in used_libraries) { + if (l == lib) { + ret; + } + } + used_libraries += [lib]; + } + fn get_used_libraries() -> vec[str] { + ret used_libraries; + } fn get_codemap() -> codemap::codemap { ret cm; } fn lookup_pos(uint pos) -> codemap::loc { ret codemap::lookup_pos(cm, pos); |
