#[cfg(feature = "clr-assembler")]
pub mod dotnet;
#[cfg(feature = "elf-assembler")]
pub mod elf;
#[cfg(feature = "gcn-assembler")]
pub mod gcn;
#[cfg(feature = "jvm-assembler")]
pub mod jvm;
#[cfg(feature = "llvm-assembler")]
pub mod llvm;
#[cfg(feature = "lua-assembler")]
pub mod lua;
#[cfg(feature = "macho-assembler")]
pub mod macho;
#[cfg(feature = "clr-assembler")]
pub use self::dotnet::msil::ClrBackend;
#[cfg(feature = "msl-assembler")]
pub mod msl;
#[cfg(feature = "nyar-assembler")]
pub mod nyar;
#[cfg(feature = "python-assembler")]
pub mod python;
#[cfg(feature = "sass-assembler")]
pub mod sass;
#[cfg(feature = "spirv-assembler")]
pub mod spirv;
#[cfg(feature = "wasi-assembler")]
pub mod wasi;
#[cfg(any(feature = "pe-assembler", feature = "x86_64-assembler"))]
pub mod windows;
#[cfg(feature = "clr-assembler")]
pub use self::dotnet::DotNetBackend;
#[cfg(feature = "elf-assembler")]
pub use self::elf::ElfBackend;
#[cfg(feature = "gcn-assembler")]
pub use self::gcn::GcnBackend;
#[cfg(feature = "jvm-assembler")]
pub use self::jvm::JvmBackend;
#[cfg(feature = "llvm-assembler")]
pub use self::llvm::LlvmBackend;
#[cfg(feature = "lua-assembler")]
pub use self::lua::LuaBackend;
#[cfg(feature = "macho-assembler")]
pub use self::macho::MachoBackend;
#[cfg(feature = "msl-assembler")]
pub use self::msl::MslBackend;
#[cfg(feature = "nyar-assembler")]
pub use self::nyar::NyarBackend;
#[cfg(feature = "python-assembler")]
pub use self::python::PythonBackend;
#[cfg(feature = "sass-assembler")]
pub use self::sass::SassBackend;
#[cfg(feature = "spirv-assembler")]
pub use self::spirv::SpirvBackend;
#[cfg(feature = "wasi-assembler")]
pub use self::wasi::WasiBackend;
#[cfg(feature = "x86_64-assembler")]
pub use self::windows::x86_64::X64Backend;
#[cfg(feature = "pe-assembler")]
pub use self::windows::WindowsBackend;
use crate::{config::GaiaConfig, program::GaiaModule};
use gaia_types::{
helpers::{ArtifactType, CompilationTarget},
Result,
};
use std::collections::HashMap;
pub trait Backend {
fn name(&self) -> &'static str;
fn primary_target(&self) -> CompilationTarget;
fn artifact_type(&self) -> ArtifactType;
fn match_score(&self, target: &CompilationTarget) -> f32;
fn generate(&self, program: &GaiaModule, config: &GaiaConfig) -> Result<GeneratedFiles>;
}
pub struct GeneratedFiles {
pub artifact_type: ArtifactType,
pub files: HashMap<String, Vec<u8>>,
pub custom: Option<std::sync::Arc<dyn std::any::Any + Send + Sync>>,
pub diagnostics: Vec<gaia_types::GaiaError>,
}