@@ -29,6 +29,8 @@ use std::sync::{mpsc, Arc};
2929
3030use rustc_data_structures:: owning_ref:: OwningRef ;
3131use rustc_data_structures:: sync:: Lrc ;
32+ use flate2:: Compression ;
33+ use flate2:: write:: DeflateEncoder ;
3234
3335use syntax:: symbol:: Symbol ;
3436use rustc:: hir:: def_id:: LOCAL_CRATE ;
@@ -97,6 +99,7 @@ impl MetadataLoader for NoLlvmMetadataLoader {
9799pub struct MetadataOnlyCodegenBackend ( ( ) ) ;
98100pub struct OngoingCodegen {
99101 metadata : EncodedMetadata ,
102+ metadata_version : Vec < u8 > ,
100103 crate_name : Symbol ,
101104}
102105
@@ -184,6 +187,7 @@ impl CodegenBackend for MetadataOnlyCodegenBackend {
184187
185188 box OngoingCodegen {
186189 metadata : metadata,
190+ metadata_version : tcx. metadata_encoding_version ( ) . to_vec ( ) ,
187191 crate_name : tcx. crate_name ( LOCAL_CRATE ) ,
188192 }
189193 }
@@ -203,7 +207,15 @@ impl CodegenBackend for MetadataOnlyCodegenBackend {
203207 }
204208 let output_name =
205209 out_filename ( sess, crate_type, & outputs, & ongoing_codegen. crate_name . as_str ( ) ) ;
206- let metadata = & ongoing_codegen. metadata . raw_data ;
210+ let mut compressed = ongoing_codegen. metadata_version . clone ( ) ;
211+ let metadata = if crate_type == CrateType :: CrateTypeDylib {
212+ DeflateEncoder :: new ( & mut compressed, Compression :: fast ( ) )
213+ . write_all ( & ongoing_codegen. metadata . raw_data )
214+ . unwrap ( ) ;
215+ & compressed
216+ } else {
217+ & ongoing_codegen. metadata . raw_data
218+ } ;
207219 let mut file = File :: create ( & output_name) . unwrap ( ) ;
208220 file. write_all ( metadata) . unwrap ( ) ;
209221 }
0 commit comments