2525#![ feature( rustc_diagnostic_macros) ]
2626#![ feature( set_stdio) ]
2727
28- extern crate ar;
29- extern crate flate2;
3028extern crate arena;
3129extern crate getopts;
3230extern crate graphviz;
@@ -155,173 +153,17 @@ pub fn run<F>(run_compiler: F) -> isize
155153}
156154
157155#[ cfg( not( feature="llvm" ) ) ]
158- pub use trans_metadata_only :: MetadataOnlyTransCrate as DefaultTransCrate ;
156+ pub use rustc_trans_traits :: MetadataOnlyTransCrate as DefaultTransCrate ;
159157#[ cfg( feature="llvm" ) ]
160158pub use rustc_trans:: LlvmTransCrate as DefaultTransCrate ;
161159
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-
319160#[ cfg( not( feature="llvm" ) ) ]
320161mod rustc_trans {
321162 use syntax_pos:: symbol:: Symbol ;
322163 use rustc:: session:: Session ;
323164 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 ;
325167
326168 pub fn init ( _sess : & Session ) { }
327169 pub fn enable_llvm_debug ( ) { }
@@ -330,8 +172,6 @@ mod rustc_trans {
330172 pub fn print ( _req : PrintRequest , _sess : & Session ) { }
331173 pub fn target_features ( _sess : & Session ) -> Vec < Symbol > { vec ! [ ] }
332174
333- pub struct CrateTranslation ( ( ) ) ;
334-
335175 pub mod back {
336176 pub mod write {
337177 pub const RELOC_MODEL_ARGS : [ ( & ' static str , ( ) ) ; 0 ] = [ ] ;
0 commit comments