Fix metadata_only metadata encoding

This commit is contained in:
bjorn3 2018-06-18 18:13:00 +02:00
parent d7bc293746
commit 097de536e4
3 changed files with 15 additions and 1 deletions

View File

@ -10,6 +10,7 @@ crate-type = ["dylib"]
test = false
[dependencies]
flate2 = "1.0"
log = "0.4"
syntax = { path = "../libsyntax" }

View File

@ -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();
}

View File

@ -25,6 +25,7 @@
#![recursion_limit="256"]
extern crate flate2;
#[macro_use]
extern crate log;