diff options
| author | Haitao Li <lihaitao@gmail.com> | 2011-12-03 00:51:59 +0800 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2011-12-12 16:15:29 -0800 |
| commit | 6dbd4c21e9cc0fd3bb337ad2d9f10e206cf3e575 (patch) | |
| tree | e81b1c77a6b247a0521eca58f71ff629c0cad4e3 /src | |
| parent | b4f450a7938ef560168947a28600663389969a02 (diff) | |
| download | rust-6dbd4c21e9cc0fd3bb337ad2d9f10e206cf3e575.tar.gz rust-6dbd4c21e9cc0fd3bb337ad2d9f10e206cf3e575.zip | |
rustc: build versioned library with hash in its name
Also updated build to install versioned libraries and added a few missing actions for `make clean`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/back/link.rs | 19 | ||||
| -rw-r--r-- | src/comp/driver/rustc.rs | 6 | ||||
| -rw-r--r-- | src/comp/metadata/creader.rs | 2 | ||||
| -rw-r--r-- | src/comp/middle/trans.rs | 4 |
4 files changed, 19 insertions, 12 deletions
diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs index dea4481fa26..36a6daeff81 100644 --- a/src/comp/back/link.rs +++ b/src/comp/back/link.rs @@ -551,7 +551,8 @@ fn mangle_internal_name_by_seq(ccx: @crate_ctxt, flav: str) -> str { // gcc to link the object file with some libs fn link_binary(sess: session::session, obj_filename: str, - out_filename: str) { + out_filename: str, + lm: link_meta) { // The default library location, we need this to find the runtime. // The location of crates will be determined as needed. let stage: str = "-L" + sess.filesearch().get_target_lib_path(); @@ -611,14 +612,17 @@ fn link_binary(sess: session::session, let used_libs = cstore::get_used_libraries(cstore); for l: str in used_libs { gcc_args += ["-l" + l]; } + let long_libname = + std::os::dylib_filename(#fmt("%s-%s-%s", + lm.name, lm.extras_hash, lm.vers)); + if sess.building_library() { gcc_args += [lib_cmd]; // On mac we need to tell the linker to let this library // be rpathed if sess.get_targ_cfg().os == session::os_macos { - gcc_args += ["-Wl,-install_name,@rpath/" - + fs::basename(out_filename)]; + gcc_args += ["-Wl,-install_name,@rpath/" + long_libname]; } } else { // FIXME: why do we hardcode -lm? @@ -651,19 +655,22 @@ fn link_binary(sess: session::session, sess.note(prog.err + prog.out); sess.abort_if_errors(); } - // Clean up on Darwin + // Clean up on Darwin if sess.get_targ_cfg().os == session::os_macos { run::run_program("dsymutil", [out_filename]); } - // Remove the temporary object file if we aren't saving temps if !sess.get_opts().save_temps { run::run_program("rm", [obj_filename]); } -} + if sess.building_library() { + let fullname = fs::connect(fs::dirname(out_filename), long_libname); + run::run_program("mv", [out_filename, fullname]); + } +} // // Local Variables: // mode: rust diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index 105832735a4..76c51e35da7 100644 --- a/src/comp/driver/rustc.rs +++ b/src/comp/driver/rustc.rs @@ -10,7 +10,7 @@ import middle::{trans, resolve, freevars, kind, ty, typeck, fn_usage, import syntax::print::{pp, pprust}; import util::{ppaux, filesearch}; import back::link; -import std::{option, str, vec, int, io, getopts, result}; +import std::{fs, option, str, vec, int, io, getopts, result}; import std::option::{some, none}; import std::getopts::{optopt, optmulti, optflag, optflagopt, opt_present}; import back::{x86, x86_64}; @@ -193,7 +193,7 @@ fn compile_input(sess: session::session, cfg: ast::crate_cfg, input: str, let outputs = build_output_filenames(input, output, sess); - let llmod = + let (llmod, link_meta) = time(time_passes, "translation", bind trans::trans_crate(sess, crate, ty_cx, outputs.obj_filename, ast_map, @@ -209,7 +209,7 @@ fn compile_input(sess: session::session, cfg: ast::crate_cfg, input: str, time(time_passes, "Linking", bind link::link_binary(sess, outputs.obj_filename, - outputs.out_filename)); + outputs.out_filename, link_meta)); } fn pretty_print_input(sess: session::session, cfg: ast::crate_cfg, input: str, diff --git a/src/comp/metadata/creader.rs b/src/comp/metadata/creader.rs index cb806efa647..b94110acb31 100644 --- a/src/comp/metadata/creader.rs +++ b/src/comp/metadata/creader.rs @@ -157,7 +157,7 @@ fn find_library_crate_aux(sess: session::session, metas: [@ast::meta_item], filesearch: filesearch::filesearch) -> option::t<{ident: str, data: @[u8]}> { - let prefix: str = nn.prefix + crate_name; + let prefix: str = nn.prefix + crate_name + "-"; let suffix: str = nn.suffix; ret filesearch::search(filesearch, { |path| diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index df0de922fa3..fcae4dd45bf 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -6020,7 +6020,7 @@ fn write_abi_version(ccx: @crate_ctxt) { fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt, output: str, amap: ast_map::map, mut_map: mut::mut_map, copy_map: alias::copy_map, last_uses: last_use::last_uses) - -> ModuleRef { + -> (ModuleRef, link::link_meta) { let sha = std::sha1::mk_sha1(); let link_meta = link::build_link_meta(sess, *crate, output, sha); @@ -6138,7 +6138,7 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt, log_err #fmt["time: %s took %d ms", timing.ident, timing.time]; } } - ret llmod; + ret (llmod, link_meta); } // // Local Variables: |
