auto merge of #12448 : alexcrichton/rust/smaller-rust, r=brson
Two optimizations: 1. Compress `foo.bc` in each rlib with `flate`. These are just taking up space and are only used with LTO, no need for LTO to be speedy. 2. Stop install `librustc.rlib` and friends, this is a *huge* source of bloat. There's no need for us to install static libraries for these components. cc #12440
This commit is contained in:
commit
4995a85f40
@ -172,7 +172,10 @@ prepare-target-$(2)-host-$(3)-$(1): \
|
||||
$$(if $$(findstring $(2),$$(CFG_HOST)), \
|
||||
$$(foreach crate,$$(HOST_CRATES), \
|
||||
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(crate)),)
|
||||
# Only install if this host and target combo is being prepared
|
||||
# Only install if this host and target combo is being prepared. Also be sure to
|
||||
# *not* install the rlibs for host crates because there's no need to statically
|
||||
# link against most of them. They just produce a large amount of extra size
|
||||
# bloat.
|
||||
$$(if $$(findstring $(1), $$(PREPARE_STAGE)),\
|
||||
$$(if $$(findstring $(2), $$(PREPARE_TARGETS)),\
|
||||
$$(if $$(findstring $(3), $$(PREPARE_HOST)),\
|
||||
@ -182,8 +185,7 @@ prepare-target-$(2)-host-$(3)-$(1): \
|
||||
$$(call PREPARE_LIB,$$(call CFG_RLIB_GLOB,$$(crate))))\
|
||||
$$(if $$(findstring $(2),$$(CFG_HOST)),\
|
||||
$$(foreach crate,$$(HOST_CRATES),\
|
||||
$$(call PREPARE_LIB,$$(call CFG_LIB_GLOB_$(2),$$(crate)))\
|
||||
$$(call PREPARE_LIB,$$(call CFG_RLIB_GLOB,$$(crate)))),)\
|
||||
$$(call PREPARE_LIB,$$(call CFG_LIB_GLOB_$(2),$$(crate)))),)\
|
||||
$$(call PREPARE_LIB,libmorestack.a) \
|
||||
$$(call PREPARE_LIB,libcompiler-rt.a),),),)
|
||||
endef
|
||||
|
@ -34,6 +34,7 @@ use std::run;
|
||||
use std::str;
|
||||
use std::io;
|
||||
use std::io::fs;
|
||||
use flate;
|
||||
use serialize::hex::ToHex;
|
||||
use extra::tempfile::TempDir;
|
||||
use syntax::abi;
|
||||
@ -942,6 +943,15 @@ fn link_rlib(sess: Session,
|
||||
// For LTO purposes, the bytecode of this library is also inserted
|
||||
// into the archive.
|
||||
let bc = obj_filename.with_extension("bc");
|
||||
match fs::File::open(&bc).read_to_end().and_then(|data| {
|
||||
fs::File::create(&bc).write(flate::deflate_bytes(data))
|
||||
}) {
|
||||
Ok(()) => {}
|
||||
Err(e) => {
|
||||
sess.err(format!("failed to compress bytecode: {}", e));
|
||||
sess.abort_if_errors()
|
||||
}
|
||||
}
|
||||
a.add_file(&bc, false);
|
||||
if !sess.opts.cg.save_temps &&
|
||||
!sess.opts.output_types.contains(&OutputTypeBitcode) {
|
||||
|
@ -16,6 +16,7 @@ use metadata::cstore;
|
||||
use util::common::time;
|
||||
|
||||
use std::libc;
|
||||
use flate;
|
||||
|
||||
pub fn run(sess: session::Session, llmod: ModuleRef,
|
||||
tm: TargetMachineRef, reachable: &[~str]) {
|
||||
@ -55,6 +56,8 @@ pub fn run(sess: session::Session, llmod: ModuleRef,
|
||||
let bc = time(sess.time_passes(), format!("read {}.bc", name), (), |_|
|
||||
archive.read(format!("{}.bc", name)));
|
||||
let bc = bc.expect("missing bytecode in archive!");
|
||||
let bc = time(sess.time_passes(), format!("inflate {}.bc", name), (), |_|
|
||||
flate::inflate_bytes(bc));
|
||||
let ptr = bc.as_ptr();
|
||||
debug!("linking {}", name);
|
||||
time(sess.time_passes(), format!("ll link {}", name), (), |()| unsafe {
|
||||
|
Loading…
x
Reference in New Issue
Block a user