diff --git a/src/librustc_codegen_utils/Cargo.toml b/src/librustc_codegen_utils/Cargo.toml index 77a29ac89f5..30f533285dd 100644 --- a/src/librustc_codegen_utils/Cargo.toml +++ b/src/librustc_codegen_utils/Cargo.toml @@ -10,6 +10,7 @@ crate-type = ["dylib"] test = false [dependencies] +flate2 = "1.0" log = "0.4" syntax = { path = "../libsyntax" } diff --git a/src/librustc_codegen_utils/codegen_backend.rs b/src/librustc_codegen_utils/codegen_backend.rs index 25d01ace4ca..c8cb92b7782 100644 --- a/src/librustc_codegen_utils/codegen_backend.rs +++ b/src/librustc_codegen_utils/codegen_backend.rs @@ -29,6 +29,8 @@ use std::sync::{mpsc, Arc}; use rustc_data_structures::owning_ref::OwningRef; use rustc_data_structures::sync::Lrc; +use flate2::Compression; +use flate2::write::DeflateEncoder; use syntax::symbol::Symbol; use rustc::hir::def_id::LOCAL_CRATE; @@ -97,6 +99,7 @@ impl MetadataLoader for NoLlvmMetadataLoader { pub struct MetadataOnlyCodegenBackend(()); pub struct OngoingCodegen { metadata: EncodedMetadata, + metadata_version: Vec, crate_name: Symbol, } @@ -184,6 +187,7 @@ impl CodegenBackend for MetadataOnlyCodegenBackend { box OngoingCodegen { metadata: metadata, + metadata_version: tcx.metadata_encoding_version().to_vec(), crate_name: tcx.crate_name(LOCAL_CRATE), } } @@ -203,7 +207,15 @@ impl CodegenBackend for MetadataOnlyCodegenBackend { } let output_name = out_filename(sess, crate_type, &outputs, &ongoing_codegen.crate_name.as_str()); - let metadata = &ongoing_codegen.metadata.raw_data; + let mut compressed = ongoing_codegen.metadata_version.clone(); + let metadata = if crate_type == CrateType::CrateTypeDylib { + DeflateEncoder::new(&mut compressed, Compression::fast()) + .write_all(&ongoing_codegen.metadata.raw_data) + .unwrap(); + &compressed + } else { + &ongoing_codegen.metadata.raw_data + }; let mut file = File::create(&output_name).unwrap(); file.write_all(metadata).unwrap(); } diff --git a/src/librustc_codegen_utils/lib.rs b/src/librustc_codegen_utils/lib.rs index c168f26cd17..0298162bbb5 100644 --- a/src/librustc_codegen_utils/lib.rs +++ b/src/librustc_codegen_utils/lib.rs @@ -25,6 +25,7 @@ #![recursion_limit="256"] +extern crate flate2; #[macro_use] extern crate log;