]> git.proxmox.com Git - rustc.git/blame - src/test/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs
New upstream version 1.55.0+dfsg1
[rustc.git] / src / test / run-make-fulldeps / hotplug_codegen_backend / the_backend.rs
CommitLineData
2c00a5a8 1#![feature(rustc_private)]
17df50a5 2#![deny(warnings)]
2c00a5a8 3
ba9703b0
XL
4extern crate rustc_codegen_ssa;
5extern crate rustc_errors;
6extern crate rustc_middle;
532ac7d7 7extern crate rustc_data_structures;
416331ca 8extern crate rustc_driver;
ba9703b0
XL
9extern crate rustc_hir;
10extern crate rustc_session;
dfeec247 11extern crate rustc_span;
ba9703b0
XL
12extern crate rustc_symbol_mangling;
13extern crate rustc_target;
2c00a5a8 14
ba9703b0 15use rustc_codegen_ssa::traits::CodegenBackend;
29967ef6
XL
16use rustc_codegen_ssa::{CodegenResults, CrateInfo};
17use rustc_data_structures::fx::FxHashMap;
ba9703b0 18use rustc_errors::ErrorReported;
29967ef6 19use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
17df50a5 20use rustc_middle::middle::cstore::EncodedMetadata;
ba9703b0
XL
21use rustc_middle::ty::TyCtxt;
22use rustc_session::config::OutputFilenames;
23use rustc_session::Session;
ba9703b0 24use std::any::Any;
532ac7d7
XL
25
26struct TheBackend;
2c00a5a8 27
94b46f34 28impl 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 78pub fn __rustc_codegen_backend() -> Box<dyn CodegenBackend> {
532ac7d7 79 Box::new(TheBackend)
2c00a5a8 80}