]>
Commit | Line | Data |
---|---|---|
2c00a5a8 | 1 | #![feature(rustc_private)] |
17df50a5 | 2 | #![deny(warnings)] |
2c00a5a8 | 3 | |
ba9703b0 XL |
4 | extern crate rustc_codegen_ssa; |
5 | extern crate rustc_errors; | |
6 | extern crate rustc_middle; | |
532ac7d7 | 7 | extern crate rustc_data_structures; |
416331ca | 8 | extern crate rustc_driver; |
ba9703b0 XL |
9 | extern crate rustc_hir; |
10 | extern crate rustc_session; | |
dfeec247 | 11 | extern crate rustc_span; |
ba9703b0 XL |
12 | extern crate rustc_symbol_mangling; |
13 | extern crate rustc_target; | |
2c00a5a8 | 14 | |
ba9703b0 | 15 | use rustc_codegen_ssa::traits::CodegenBackend; |
29967ef6 XL |
16 | use rustc_codegen_ssa::{CodegenResults, CrateInfo}; |
17 | use rustc_data_structures::fx::FxHashMap; | |
ba9703b0 | 18 | use rustc_errors::ErrorReported; |
29967ef6 | 19 | use rustc_middle::dep_graph::{WorkProduct, WorkProductId}; |
17df50a5 | 20 | use rustc_middle::middle::cstore::EncodedMetadata; |
ba9703b0 XL |
21 | use rustc_middle::ty::TyCtxt; |
22 | use rustc_session::config::OutputFilenames; | |
23 | use rustc_session::Session; | |
ba9703b0 | 24 | use std::any::Any; |
532ac7d7 XL |
25 | |
26 | struct TheBackend; | |
2c00a5a8 | 27 | |
94b46f34 | 28 | impl CodegenBackend for TheBackend { |
94b46f34 | 29 | fn codegen_crate<'a, 'tcx>( |
2c00a5a8 | 30 | &self, |
dc9dc135 | 31 | tcx: TyCtxt<'tcx>, |
29967ef6 | 32 | metadata: EncodedMetadata, |
48663c56 | 33 | _need_metadata_module: bool, |
e74abb32 | 34 | ) -> Box<dyn Any> { |
29967ef6 | 35 | Box::new(CodegenResults { |
29967ef6 XL |
36 | modules: vec![], |
37 | allocator_module: None, | |
38 | metadata_module: None, | |
39 | metadata, | |
136023e0 | 40 | crate_info: CrateInfo::new(tcx, "fake_target_cpu".to_string()), |
29967ef6 | 41 | }) |
2c00a5a8 XL |
42 | } |
43 | ||
74b04a01 | 44 | fn join_codegen( |
2c00a5a8 | 45 | &self, |
e74abb32 | 46 | ongoing_codegen: Box<dyn Any>, |
74b04a01 | 47 | _sess: &Session, |
29967ef6 XL |
48 | ) -> Result<(CodegenResults, FxHashMap<WorkProductId, WorkProduct>), ErrorReported> { |
49 | let codegen_results = ongoing_codegen | |
50 | .downcast::<CodegenResults>() | |
51 | .expect("in join_codegen: ongoing_codegen is not a CodegenResults"); | |
52 | Ok((*codegen_results, FxHashMap::default())) | |
74b04a01 XL |
53 | } |
54 | ||
55 | fn link( | |
56 | &self, | |
57 | sess: &Session, | |
29967ef6 | 58 | codegen_results: CodegenResults, |
2c00a5a8 | 59 | outputs: &OutputFilenames, |
532ac7d7 | 60 | ) -> Result<(), ErrorReported> { |
ba9703b0 | 61 | use rustc_session::{config::CrateType, output::out_filename}; |
2c00a5a8 | 62 | use std::io::Write; |
17df50a5 | 63 | let crate_name = codegen_results.crate_info.local_crate_name; |
2c00a5a8 | 64 | for &crate_type in sess.opts.crate_types.iter() { |
b7449926 | 65 | if crate_type != CrateType::Rlib { |
2c00a5a8 XL |
66 | sess.fatal(&format!("Crate type is {:?}", crate_type)); |
67 | } | |
ba9703b0 | 68 | let output_name = out_filename(sess, crate_type, &outputs, &*crate_name.as_str()); |
2c00a5a8 | 69 | let mut out_file = ::std::fs::File::create(output_name).unwrap(); |
0531ce1d | 70 | write!(out_file, "This has been \"compiled\" successfully.").unwrap(); |
2c00a5a8 XL |
71 | } |
72 | Ok(()) | |
73 | } | |
74 | } | |
75 | ||
94b46f34 | 76 | /// This is the entrypoint for a hot plugged rustc_codegen_llvm |
2c00a5a8 | 77 | #[no_mangle] |
e74abb32 | 78 | pub fn __rustc_codegen_backend() -> Box<dyn CodegenBackend> { |
532ac7d7 | 79 | Box::new(TheBackend) |
2c00a5a8 | 80 | } |