diffsl/execution/
module.rs1use 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}