]> git.lizzy.rs Git - rust.git/blob - src/librustc_codegen_utils/codegen_backend.rs
Rollup merge of #67546 - oli-obk:slice_pattern_ice, r=varkor
[rust.git] / src / librustc_codegen_utils / codegen_backend.rs
1 //! The Rust compiler.
2 //!
3 //! # Note
4 //!
5 //! This API is completely unstable and subject to change.
6
7 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
8
9 use std::any::Any;
10
11 use rustc::dep_graph::DepGraph;
12 use rustc::middle::cstore::{EncodedMetadata, MetadataLoaderDyn};
13 use rustc::session::config::{OutputFilenames, PrintRequest};
14 use rustc::session::Session;
15 use rustc::ty::query::Providers;
16 use rustc::ty::TyCtxt;
17 use rustc::util::common::ErrorReported;
18 use syntax::symbol::Symbol;
19
20 pub use rustc_data_structures::sync::MetadataRef;
21
22 pub trait CodegenBackend {
23     fn init(&self, _sess: &Session) {}
24     fn print(&self, _req: PrintRequest, _sess: &Session) {}
25     fn target_features(&self, _sess: &Session) -> Vec<Symbol> {
26         vec![]
27     }
28     fn print_passes(&self) {}
29     fn print_version(&self) {}
30
31     fn metadata_loader(&self) -> Box<MetadataLoaderDyn>;
32     fn provide(&self, _providers: &mut Providers<'_>);
33     fn provide_extern(&self, _providers: &mut Providers<'_>);
34     fn codegen_crate<'tcx>(
35         &self,
36         tcx: TyCtxt<'tcx>,
37         metadata: EncodedMetadata,
38         need_metadata_module: bool,
39     ) -> Box<dyn Any>;
40
41     /// This is called on the returned `Box<dyn Any>` from `codegen_backend`
42     ///
43     /// # Panics
44     ///
45     /// Panics when the passed `Box<dyn Any>` was not returned by `codegen_backend`.
46     fn join_codegen_and_link(
47         &self,
48         ongoing_codegen: Box<dyn Any>,
49         sess: &Session,
50         dep_graph: &DepGraph,
51         outputs: &OutputFilenames,
52     ) -> Result<(), ErrorReported>;
53 }