33extern crate rustc_codegen_ssa;
44extern crate rustc_errors;
55extern crate rustc_middle;
6- #[ macro_use]
76extern crate rustc_data_structures;
87extern crate rustc_driver;
98extern crate rustc_hir;
@@ -12,17 +11,19 @@ extern crate rustc_span;
1211extern crate rustc_symbol_mangling;
1312extern crate rustc_target;
1413
14+ use rustc_codegen_ssa:: back:: linker:: LinkerInfo ;
1515use rustc_codegen_ssa:: traits:: CodegenBackend ;
16- use rustc_data_structures:: owning_ref:: OwningRef ;
16+ use rustc_codegen_ssa:: { CodegenResults , CrateInfo } ;
17+ use rustc_data_structures:: fx:: FxHashMap ;
1718use rustc_data_structures:: sync:: MetadataRef ;
1819use rustc_errors:: ErrorReported ;
1920use rustc_middle:: dep_graph:: DepGraph ;
21+ use rustc_middle:: dep_graph:: { WorkProduct , WorkProductId } ;
2022use rustc_middle:: middle:: cstore:: { EncodedMetadata , MetadataLoader , MetadataLoaderDyn } ;
2123use rustc_middle:: ty:: query:: Providers ;
2224use rustc_middle:: ty:: TyCtxt ;
2325use rustc_session:: config:: OutputFilenames ;
2426use rustc_session:: Session ;
25- use rustc_span:: symbol:: Symbol ;
2627use rustc_target:: spec:: Target ;
2728use std:: any:: Any ;
2829use std:: path:: Path ;
@@ -31,14 +32,11 @@ pub struct NoLlvmMetadataLoader;
3132
3233impl MetadataLoader for NoLlvmMetadataLoader {
3334 fn get_rlib_metadata ( & self , _: & Target , filename : & Path ) -> Result < MetadataRef , String > {
34- let buf =
35- std:: fs:: read ( filename) . map_err ( |e| format ! ( "metadata file open err: {:?}" , e) ) ?;
36- let buf: OwningRef < Vec < u8 > , [ u8 ] > = OwningRef :: new ( buf) ;
37- Ok ( rustc_erase_owner ! ( buf. map_owner_box( ) ) )
35+ unreachable ! ( "some_crate.rs shouldn't depend on any external crates" ) ;
3836 }
3937
4038 fn get_dylib_metadata ( & self , target : & Target , filename : & Path ) -> Result < MetadataRef , String > {
41- self . get_rlib_metadata ( target , filename )
39+ unreachable ! ( "some_crate.rs shouldn't depend on any external crates" ) ;
4240 }
4341}
4442
@@ -49,53 +47,49 @@ impl CodegenBackend for TheBackend {
4947 Box :: new ( NoLlvmMetadataLoader )
5048 }
5149
52- fn provide ( & self , providers : & mut Providers ) {
53- rustc_symbol_mangling:: provide ( providers) ;
54-
55- providers. supported_target_features = |tcx, _cnum| {
56- Default :: default ( ) // Just a dummy
57- } ;
58- providers. is_reachable_non_generic = |_tcx, _defid| true ;
59- providers. exported_symbols = |_tcx, _crate| & [ ] ;
60- }
61-
62- fn provide_extern ( & self , providers : & mut Providers ) {
63- providers. is_reachable_non_generic = |_tcx, _defid| true ;
64- }
50+ fn provide ( & self , providers : & mut Providers ) { }
51+ fn provide_extern ( & self , providers : & mut Providers ) { }
6552
6653 fn codegen_crate < ' a , ' tcx > (
6754 & self ,
6855 tcx : TyCtxt < ' tcx > ,
69- _metadata : EncodedMetadata ,
56+ metadata : EncodedMetadata ,
7057 _need_metadata_module : bool ,
7158 ) -> Box < dyn Any > {
7259 use rustc_hir:: def_id:: LOCAL_CRATE ;
7360
74- Box :: new ( tcx. crate_name ( LOCAL_CRATE ) as Symbol )
61+ Box :: new ( CodegenResults {
62+ crate_name : tcx. crate_name ( LOCAL_CRATE ) ,
63+ modules : vec ! [ ] ,
64+ allocator_module : None ,
65+ metadata_module : None ,
66+ metadata,
67+ windows_subsystem : None ,
68+ linker_info : LinkerInfo :: new ( tcx) ,
69+ crate_info : CrateInfo :: new ( tcx) ,
70+ } )
7571 }
7672
7773 fn join_codegen (
7874 & self ,
7975 ongoing_codegen : Box < dyn Any > ,
8076 _sess : & Session ,
81- _dep_graph : & DepGraph ,
82- ) -> Result < Box < dyn Any > , ErrorReported > {
83- let crate_name = ongoing_codegen
84- . downcast :: < Symbol > ( )
85- . expect ( "in join_codegen: ongoing_codegen is not a Symbol" ) ;
86- Ok ( crate_name)
77+ ) -> Result < ( CodegenResults , FxHashMap < WorkProductId , WorkProduct > ) , ErrorReported > {
78+ let codegen_results = ongoing_codegen
79+ . downcast :: < CodegenResults > ( )
80+ . expect ( "in join_codegen: ongoing_codegen is not a CodegenResults" ) ;
81+ Ok ( ( * codegen_results, FxHashMap :: default ( ) ) )
8782 }
8883
8984 fn link (
9085 & self ,
9186 sess : & Session ,
92- codegen_results : Box < dyn Any > ,
87+ codegen_results : CodegenResults ,
9388 outputs : & OutputFilenames ,
9489 ) -> Result < ( ) , ErrorReported > {
9590 use rustc_session:: { config:: CrateType , output:: out_filename} ;
9691 use std:: io:: Write ;
97- let crate_name =
98- codegen_results. downcast :: < Symbol > ( ) . expect ( "in link: codegen_results is not a Symbol" ) ;
92+ let crate_name = codegen_results. crate_name ;
9993 for & crate_type in sess. opts . crate_types . iter ( ) {
10094 if crate_type != CrateType :: Rlib {
10195 sess. fatal ( & format ! ( "Crate type is {:?}" , crate_type) ) ;
0 commit comments