1 #![feature(rustc_private)]
4 extern crate rustc_codegen_ssa
;
5 extern crate rustc_errors
;
6 extern crate rustc_middle
;
7 extern crate rustc_data_structures
;
8 extern crate rustc_driver
;
9 extern crate rustc_hir
;
10 extern crate rustc_session
;
11 extern crate rustc_span
;
12 extern crate rustc_symbol_mangling
;
13 extern crate rustc_target
;
15 use rustc_codegen_ssa
::back
::linker
::LinkerInfo
;
16 use rustc_codegen_ssa
::traits
::CodegenBackend
;
17 use rustc_codegen_ssa
::{CodegenResults, CrateInfo}
;
18 use rustc_data_structures
::fx
::FxHashMap
;
19 use rustc_errors
::ErrorReported
;
20 use rustc_middle
::dep_graph
::{WorkProduct, WorkProductId}
;
21 use rustc_middle
::middle
::cstore
::EncodedMetadata
;
22 use rustc_middle
::ty
::TyCtxt
;
23 use rustc_session
::config
::OutputFilenames
;
24 use rustc_session
::Session
;
29 impl CodegenBackend
for TheBackend
{
30 fn codegen_crate
<'a
, 'tcx
>(
33 metadata
: EncodedMetadata
,
34 _need_metadata_module
: bool
,
36 Box
::new(CodegenResults
{
38 allocator_module
: None
,
39 metadata_module
: None
,
41 linker_info
: LinkerInfo
::new(tcx
, "fake_target_cpu".to_string()),
42 crate_info
: CrateInfo
::new(tcx
),
48 ongoing_codegen
: Box
<dyn Any
>,
50 ) -> Result
<(CodegenResults
, FxHashMap
<WorkProductId
, WorkProduct
>), ErrorReported
> {
51 let codegen_results
= ongoing_codegen
52 .downcast
::<CodegenResults
>()
53 .expect("in join_codegen: ongoing_codegen is not a CodegenResults");
54 Ok((*codegen_results
, FxHashMap
::default()))
60 codegen_results
: CodegenResults
,
61 outputs
: &OutputFilenames
,
62 ) -> Result
<(), ErrorReported
> {
63 use rustc_session
::{config::CrateType, output::out_filename}
;
65 let crate_name
= codegen_results
.crate_info
.local_crate_name
;
66 for &crate_type
in sess
.opts
.crate_types
.iter() {
67 if crate_type
!= CrateType
::Rlib
{
68 sess
.fatal(&format
!("Crate type is {:?}", crate_type
));
70 let output_name
= out_filename(sess
, crate_type
, &outputs
, &*crate_name
.as_str());
71 let mut out_file
= ::std
::fs
::File
::create(output_name
).unwrap();
72 write
!(out_file
, "This has been \"compiled\" successfully.").unwrap();
78 /// This is the entrypoint for a hot plugged rustc_codegen_llvm
80 pub fn __rustc_codegen_backend() -> Box
<dyn CodegenBackend
> {