Skip to main content

diffsl/execution/
module.rs

1use std::collections::HashMap;
2
3use anyhow::Result;
4use target_lexicon::Triple;
5
6use crate::{
7    discretise::DiscreteModel,
8    execution::{compiler::CompilerOptions, scalar::RealType},
9};
10
11pub trait CodegenModule: Sized + Send + Sync + 'static {}
12
13pub trait CodegenModuleCompile: CodegenModule {
14    fn from_discrete_model(
15        model: &DiscreteModel,
16        options: CompilerOptions,
17        triple: Option<Triple>,
18        real_type: RealType,
19        code: Option<&str>,
20    ) -> Result<Self>;
21}
22
23pub trait CodegenModuleLink: CodegenModule {
24    fn from_object(buffer: &[u8]) -> Result<Self>;
25}
26
27pub trait CodegenModuleJit: CodegenModule {
28    fn jit(&mut self) -> Result<HashMap<String, *const u8>>;
29}
30
31pub trait CodegenModuleEmit: CodegenModule {
32    fn to_object(&self) -> Result<Vec<u8>>;
33}