25
25
#![ feature( rustc_diagnostic_macros) ]
26
26
#![ feature( set_stdio) ]
27
27
28
- extern crate ar;
29
- extern crate flate2;
30
28
extern crate arena;
31
29
extern crate getopts;
32
30
extern crate graphviz;
@@ -155,173 +153,17 @@ pub fn run<F>(run_compiler: F) -> isize
155
153
}
156
154
157
155
#[ cfg( not( feature="llvm" ) ) ]
158
- pub use trans_metadata_only :: MetadataOnlyTransCrate as DefaultTransCrate ;
156
+ pub use rustc_trans_traits :: MetadataOnlyTransCrate as DefaultTransCrate ;
159
157
#[ cfg( feature="llvm" ) ]
160
158
pub use rustc_trans:: LlvmTransCrate as DefaultTransCrate ;
161
159
162
- mod no_llvm_metadata_loader {
163
- extern crate owning_ref;
164
-
165
- use rustc:: middle:: cstore:: MetadataLoader as MetadataLoaderTrait ;
166
- use rustc_back:: target:: Target ;
167
- use std:: io;
168
- use std:: fs:: File ;
169
- use std:: path:: Path ;
170
-
171
- use ar:: Archive ;
172
- use self :: owning_ref:: { OwningRef , ErasedBoxRef } ;
173
-
174
- pub struct NoLlvmMetadataLoader ;
175
-
176
- impl MetadataLoaderTrait for NoLlvmMetadataLoader {
177
- fn get_rlib_metadata (
178
- & self ,
179
- _: & Target ,
180
- filename : & Path
181
- ) -> Result < ErasedBoxRef < [ u8 ] > , String > {
182
- let file = File :: open ( filename) . map_err ( |e| {
183
- format ! ( "metadata file open err: {:?}" , e)
184
- } ) ?;
185
- let mut archive = Archive :: new ( file) ;
186
-
187
- while let Some ( entry_result) = archive. next_entry ( ) {
188
- let mut entry = entry_result. map_err ( |e| {
189
- format ! ( "metadata section read err: {:?}" , e)
190
- } ) ?;
191
- if entry. header ( ) . identifier ( ) == "rust.metadata.bin" {
192
- let mut buf = Vec :: new ( ) ;
193
- io:: copy ( & mut entry, & mut buf) . unwrap ( ) ;
194
- let buf: OwningRef < Vec < u8 > , [ u8 ] > = OwningRef :: new ( buf) . into ( ) ;
195
- return Ok ( buf. map_owner_box ( ) . erase_owner ( ) ) ;
196
- }
197
- }
198
-
199
- Err ( "Couldnt find metadata section" . to_string ( ) )
200
- }
201
-
202
- fn get_dylib_metadata ( & self ,
203
- _target : & Target ,
204
- _filename : & Path )
205
- -> Result < ErasedBoxRef < [ u8 ] > , String > {
206
- // FIXME: Support reading dylibs from llvm enabled rustc
207
- self . get_rlib_metadata ( _target, _filename)
208
- }
209
- }
210
- }
211
-
212
- mod trans_metadata_only {
213
- use std:: io:: prelude:: * ;
214
- use std:: io:: Cursor ;
215
- use std:: fs:: File ;
216
-
217
- use ar:: { Builder , Header } ;
218
- use flate2:: Compression ;
219
- use flate2:: write:: DeflateEncoder ;
220
-
221
- use syntax:: symbol:: Symbol ;
222
- use rustc:: hir:: def_id:: LOCAL_CRATE ;
223
- use rustc:: session:: Session ;
224
- use rustc:: session:: config:: { OutputFilenames , CrateType } ;
225
- use rustc:: ty:: { TyCtxt , CrateAnalysis } ;
226
- use rustc:: ty:: maps:: Providers ;
227
- use rustc:: middle:: cstore:: { MetadataLoader , EncodedMetadata } ;
228
- use rustc:: dep_graph:: DepGraph ;
229
- use rustc_incremental:: IncrementalHashesMap ;
230
- use rustc_trans_utils:: find_exported_symbols;
231
- use rustc_trans_utils:: link:: { out_filename, build_link_meta} ;
232
- use rustc_trans_traits:: TransCrate ;
233
-
234
- #[ allow( dead_code) ]
235
- pub struct MetadataOnlyTransCrate ;
236
- pub struct OngoingCrateTranslation {
237
- metadata : EncodedMetadata ,
238
- metadata_version : Vec < u8 > ,
239
- crate_name : Symbol ,
240
- }
241
- pub struct TranslatedCrate ( OngoingCrateTranslation ) ;
242
-
243
- impl MetadataOnlyTransCrate {
244
- #[ allow( dead_code) ]
245
- pub fn new ( /*_sess: &Session*/ ) -> Self {
246
- MetadataOnlyTransCrate
247
- }
248
- }
249
-
250
- impl TransCrate for MetadataOnlyTransCrate {
251
- type MetadataLoader = :: no_llvm_metadata_loader:: NoLlvmMetadataLoader ;
252
- type OngoingCrateTranslation = OngoingCrateTranslation ;
253
- type TranslatedCrate = TranslatedCrate ;
254
-
255
- fn metadata_loader ( ) -> Box < MetadataLoader > {
256
- box :: no_llvm_metadata_loader:: NoLlvmMetadataLoader
257
- }
258
-
259
- fn provide ( _providers : & mut Providers ) { }
260
-
261
- fn trans_crate < ' a , ' tcx > (
262
- tcx : TyCtxt < ' a , ' tcx , ' tcx > ,
263
- analysis : CrateAnalysis ,
264
- incr_hashes_map : IncrementalHashesMap ,
265
- _output_filenames : & OutputFilenames
266
- ) -> Self :: OngoingCrateTranslation {
267
- let link_meta = build_link_meta ( & incr_hashes_map) ;
268
- let exported_symbols = find_exported_symbols ( tcx, & analysis. reachable ) ;
269
- let ( metadata, _hashes) = tcx. encode_metadata ( & link_meta, & exported_symbols) ;
270
-
271
- OngoingCrateTranslation {
272
- metadata : metadata,
273
- metadata_version : tcx. metadata_encoding_version ( ) . to_vec ( ) ,
274
- crate_name : tcx. crate_name ( LOCAL_CRATE ) ,
275
- }
276
- }
277
-
278
- fn join_trans (
279
- trans : Self :: OngoingCrateTranslation ,
280
- _sess : & Session ,
281
- _dep_graph : & DepGraph ,
282
- ) -> Self :: TranslatedCrate {
283
- TranslatedCrate ( trans)
284
- }
285
-
286
- fn link_binary ( sess : & Session ,
287
- trans : & Self :: TranslatedCrate ,
288
- outputs : & OutputFilenames ) {
289
- for & crate_type in sess. opts . crate_types . iter ( ) {
290
- if crate_type != CrateType :: CrateTypeRlib &&
291
- crate_type != CrateType :: CrateTypeDylib {
292
- continue ;
293
- }
294
- let output_name =
295
- out_filename ( sess, crate_type, & outputs, & trans. 0 . crate_name . as_str ( ) ) ;
296
- let mut compressed = trans. 0 . metadata_version . clone ( ) ;
297
- let metadata = if crate_type == CrateType :: CrateTypeDylib {
298
- DeflateEncoder :: new ( & mut compressed, Compression :: Fast )
299
- . write_all ( & trans. 0 . metadata . raw_data ) . unwrap ( ) ;
300
- & compressed
301
- } else {
302
- & trans. 0 . metadata . raw_data
303
- } ;
304
- let mut builder = Builder :: new ( File :: create ( & output_name) . unwrap ( ) ) ;
305
- let header = Header :: new (
306
- "rust.metadata.bin" . to_string ( ) ,
307
- metadata. len ( ) as u64
308
- ) ;
309
- builder
310
- . append ( & header, Cursor :: new ( metadata) )
311
- . unwrap ( ) ;
312
- }
313
- }
314
-
315
- fn dump_incremental_data ( _trans : & Self :: TranslatedCrate ) { }
316
- }
317
- }
318
-
319
160
#[ cfg( not( feature="llvm" ) ) ]
320
161
mod rustc_trans {
321
162
use syntax_pos:: symbol:: Symbol ;
322
163
use rustc:: session:: Session ;
323
164
use rustc:: session:: config:: PrintRequest ;
324
- pub use trans_metadata_only:: MetadataOnlyTransCrate as LlvmTransCrate ;
165
+ pub use rustc_trans_traits:: MetadataOnlyTransCrate as LlvmTransCrate ;
166
+ pub use rustc_trans_traits:: TranslatedCrate as CrateTranslation ;
325
167
326
168
pub fn init ( _sess : & Session ) { }
327
169
pub fn enable_llvm_debug ( ) { }
@@ -330,8 +172,6 @@ mod rustc_trans {
330
172
pub fn print ( _req : PrintRequest , _sess : & Session ) { }
331
173
pub fn target_features ( _sess : & Session ) -> Vec < Symbol > { vec ! [ ] }
332
174
333
- pub struct CrateTranslation ( ( ) ) ;
334
-
335
175
pub mod back {
336
176
pub mod write {
337
177
pub const RELOC_MODEL_ARGS : [ ( & ' static str , ( ) ) ; 0 ] = [ ] ;
0 commit comments