Skip to content

Commit 097de53

Browse files
committed
Fix metadata_only metadata encoding
1 parent d7bc293 commit 097de53

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

src/librustc_codegen_utils/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ crate-type = ["dylib"]
1010
test = false
1111

1212
[dependencies]
13+
flate2 = "1.0"
1314
log = "0.4"
1415

1516
syntax = { path = "../libsyntax" }

src/librustc_codegen_utils/codegen_backend.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ use std::sync::{mpsc, Arc};
2929

3030
use rustc_data_structures::owning_ref::OwningRef;
3131
use rustc_data_structures::sync::Lrc;
32+
use flate2::Compression;
33+
use flate2::write::DeflateEncoder;
3234

3335
use syntax::symbol::Symbol;
3436
use rustc::hir::def_id::LOCAL_CRATE;
@@ -97,6 +99,7 @@ impl MetadataLoader for NoLlvmMetadataLoader {
9799
pub struct MetadataOnlyCodegenBackend(());
98100
pub 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
}

src/librustc_codegen_utils/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#![recursion_limit="256"]
2727

28+
extern crate flate2;
2829
#[macro_use]
2930
extern crate log;
3031

0 commit comments

Comments
 (0)