pub trait CodegenBackend {
    // Required methods
    fn locale_resource(&self) -> &'static str;
    fn codegen_crate<'tcx>(
        &self,
        tcx: TyCtxt<'tcx>,
        metadata: EncodedMetadata,
        need_metadata_module: bool
    ) -> Box<dyn Any>;
    fn join_codegen(
        &self,
        ongoing_codegen: Box<dyn Any>,
        sess: &Session,
        outputs: &OutputFilenames
    ) -> Result<(CodegenResults, FxIndexMap<WorkProductId, WorkProduct>), ErrorGuaranteed>;
    fn link(
        &self,
        sess: &Session,
        codegen_results: CodegenResults,
        outputs: &OutputFilenames
    ) -> Result<(), ErrorGuaranteed>;

    // Provided methods
    fn init(&self, _sess: &Session) { ... }
    fn print(
        &self,
        _req: &PrintRequest,
        _out: &mut dyn PrintBackendInfo,
        _sess: &Session
    ) { ... }
    fn target_features(
        &self,
        _sess: &Session,
        _allow_unstable: bool
    ) -> Vec<Symbol> { ... }
    fn print_passes(&self) { ... }
    fn print_version(&self) { ... }
    fn target_override(&self, _opts: &Options) -> Option<Target> { ... }
    fn metadata_loader(&self) -> Box<MetadataLoaderDyn> { ... }
    fn provide(&self, _providers: &mut Providers) { ... }
}

Required Methods§

source

fn locale_resource(&self) -> &'static str

Locale resources for diagnostic messages - a string the content of the Fluent resource. Called before init so that all other functions are able to emit translatable diagnostics.

source

fn codegen_crate<'tcx>( &self, tcx: TyCtxt<'tcx>, metadata: EncodedMetadata, need_metadata_module: bool ) -> Box<dyn Any>

source

fn join_codegen( &self, ongoing_codegen: Box<dyn Any>, sess: &Session, outputs: &OutputFilenames ) -> Result<(CodegenResults, FxIndexMap<WorkProductId, WorkProduct>), ErrorGuaranteed>

This is called on the returned Box<dyn Any> from codegen_backend

Panics

Panics when the passed Box<dyn Any> was not returned by codegen_backend.

This is called on the returned Box<dyn Any> from join_codegen

Panics

Panics when the passed Box<dyn Any> was not returned by join_codegen.

Provided Methods§

source

fn init(&self, _sess: &Session)

source

fn print( &self, _req: &PrintRequest, _out: &mut dyn PrintBackendInfo, _sess: &Session )

source

fn target_features(&self, _sess: &Session, _allow_unstable: bool) -> Vec<Symbol>

source

fn print_passes(&self)

source

fn print_version(&self)

source

fn target_override(&self, _opts: &Options) -> Option<Target>

If this plugin provides additional builtin targets, provide the one enabled by the options here. Be careful: this is called before init() is called.

source

fn metadata_loader(&self) -> Box<MetadataLoaderDyn>

The metadata loader used to load rlib and dylib metadata.

Alternative codegen backends may want to use different rlib or dylib formats than the default native static archives and dynamic libraries.

source

fn provide(&self, _providers: &mut Providers)

Implementors§