]> git.lizzy.rs Git - rust.git/blobdiff - src/metadata.rs
Add custom driver
[rust.git] / src / metadata.rs
index 052d7e4a27cced7eded77fa8a8db63ea3bcf674f..93cff5711d937ec4234ac44efb01bce1847ba33a 100644 (file)
@@ -1,13 +1,15 @@
+//! Reading and writing of the rustc metadata for rlibs and dylibs
+
 use std::convert::TryFrom;
 use std::fs::File;
 use std::path::Path;
 
-use rustc_middle::middle::cstore::{EncodedMetadata, MetadataLoader};
-use rustc_session::config;
-use rustc_middle::ty::TyCtxt;
 use rustc_codegen_ssa::METADATA_FILENAME;
 use rustc_data_structures::owning_ref::{self, OwningRef};
 use rustc_data_structures::rustc_erase_owner;
+use rustc_middle::middle::cstore::{EncodedMetadata, MetadataLoader};
+use rustc_middle::ty::TyCtxt;
+use rustc_session::config;
 use rustc_target::spec::Target;
 
 use crate::backend::WriteMetadata;
@@ -27,7 +29,7 @@ fn get_rlib_metadata(
             if entry.header().identifier() == METADATA_FILENAME.as_bytes() {
                 let mut buf = Vec::with_capacity(
                     usize::try_from(entry.header().size())
-                        .expect("Rlib metadata file too big to load into memory.")
+                        .expect("Rlib metadata file too big to load into memory."),
                 );
                 ::std::io::copy(&mut entry, &mut buf).map_err(|e| format!("{:?}", e))?;
                 let buf: OwningRef<Vec<u8>, [u8]> = OwningRef::new(buf).into();
@@ -59,9 +61,11 @@ fn get_dylib_metadata(
 }
 
 // Adapted from https://github.com/rust-lang/rust/blob/da573206f87b5510de4b0ee1a9c044127e409bd3/src/librustc_codegen_llvm/base.rs#L47-L112
-pub(crate) fn write_metadata<P: WriteMetadata>(tcx: TyCtxt<'_>, product: &mut P) -> EncodedMetadata {
-    use flate2::write::DeflateEncoder;
-    use flate2::Compression;
+pub(crate) fn write_metadata<P: WriteMetadata>(
+    tcx: TyCtxt<'_>,
+    product: &mut P,
+) -> EncodedMetadata {
+    use snap::write::FrameEncoder;
     use std::io::Write;
 
     #[derive(PartialEq, Eq, PartialOrd, Ord)]
@@ -98,7 +102,7 @@ enum MetadataKind {
 
     assert!(kind == MetadataKind::Compressed);
     let mut compressed = tcx.metadata_encoding_version();
-    DeflateEncoder::new(&mut compressed, Compression::fast())
+    FrameEncoder::new(&mut compressed)
         .write_all(&metadata.raw_data)
         .unwrap();