about summary refs log tree commit diff
path: root/src/librustc_codegen_utils/codegen_backend.rs
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2018-06-18 18:13:00 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2018-07-07 10:52:15 +0200
commit097de536e43e0040e5966ee8e4c75e84c973b2e0 (patch)
treef5b729033ce52ce9e88cfaf1efc7f1030d7a51ff /src/librustc_codegen_utils/codegen_backend.rs
parentd7bc2937464b760d69ae8fc1146b660dc867e802 (diff)
downloadrust-097de536e43e0040e5966ee8e4c75e84c973b2e0.tar.gz
rust-097de536e43e0040e5966ee8e4c75e84c973b2e0.zip
Fix metadata_only metadata encoding
Diffstat (limited to 'src/librustc_codegen_utils/codegen_backend.rs')
-rw-r--r--src/librustc_codegen_utils/codegen_backend.rs14
1 files changed, 13 insertions, 1 deletions
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<u8>,
     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();
         }