Fix metadata_only metadata encoding
This commit is contained in:
parent
d7bc293746
commit
097de536e4
3 changed files with 15 additions and 1 deletions
|
@ -10,6 +10,7 @@ crate-type = ["dylib"]
|
||||||
test = false
|
test = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
flate2 = "1.0"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
|
||||||
syntax = { path = "../libsyntax" }
|
syntax = { path = "../libsyntax" }
|
||||||
|
|
|
@ -29,6 +29,8 @@ use std::sync::{mpsc, Arc};
|
||||||
|
|
||||||
use rustc_data_structures::owning_ref::OwningRef;
|
use rustc_data_structures::owning_ref::OwningRef;
|
||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
|
use flate2::Compression;
|
||||||
|
use flate2::write::DeflateEncoder;
|
||||||
|
|
||||||
use syntax::symbol::Symbol;
|
use syntax::symbol::Symbol;
|
||||||
use rustc::hir::def_id::LOCAL_CRATE;
|
use rustc::hir::def_id::LOCAL_CRATE;
|
||||||
|
@ -97,6 +99,7 @@ impl MetadataLoader for NoLlvmMetadataLoader {
|
||||||
pub struct MetadataOnlyCodegenBackend(());
|
pub struct MetadataOnlyCodegenBackend(());
|
||||||
pub struct OngoingCodegen {
|
pub struct OngoingCodegen {
|
||||||
metadata: EncodedMetadata,
|
metadata: EncodedMetadata,
|
||||||
|
metadata_version: Vec<u8>,
|
||||||
crate_name: Symbol,
|
crate_name: Symbol,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,6 +187,7 @@ impl CodegenBackend for MetadataOnlyCodegenBackend {
|
||||||
|
|
||||||
box OngoingCodegen {
|
box OngoingCodegen {
|
||||||
metadata: metadata,
|
metadata: metadata,
|
||||||
|
metadata_version: tcx.metadata_encoding_version().to_vec(),
|
||||||
crate_name: tcx.crate_name(LOCAL_CRATE),
|
crate_name: tcx.crate_name(LOCAL_CRATE),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -203,7 +207,15 @@ impl CodegenBackend for MetadataOnlyCodegenBackend {
|
||||||
}
|
}
|
||||||
let output_name =
|
let output_name =
|
||||||
out_filename(sess, crate_type, &outputs, &ongoing_codegen.crate_name.as_str());
|
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();
|
let mut file = File::create(&output_name).unwrap();
|
||||||
file.write_all(metadata).unwrap();
|
file.write_all(metadata).unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#![recursion_limit="256"]
|
#![recursion_limit="256"]
|
||||||
|
|
||||||
|
extern crate flate2;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log;
|
extern crate log;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue