use crate::compiler::Compiler; use anyhow::{bail, Result}; use std::sync::Arc; use wasmtime_cranelift_shared::isa_builder::IsaBuilder; use wasmtime_environ::{CompilerBuilder, Setting}; use winch_codegen::{isa, TargetIsa}; /// Compiler builder. struct Builder { inner: IsaBuilder>>, } pub fn builder() -> Box { Box::new(Builder { inner: IsaBuilder::new(|triple| isa::lookup(triple).map_err(|e| e.into())), }) } impl CompilerBuilder for Builder { fn triple(&self) -> &target_lexicon::Triple { self.inner.triple() } fn target(&mut self, target: target_lexicon::Triple) -> Result<()> { self.inner.target(target)?; Ok(()) } fn set(&mut self, name: &str, value: &str) -> Result<()> { self.inner.set(name, value) } fn enable(&mut self, name: &str) -> Result<()> { self.inner.enable(name) } fn settings(&self) -> Vec { self.inner.settings() } fn build(&self) -> Result> { let isa = self.inner.build()?; Ok(Box::new(Compiler::new(isa))) } fn enable_incremental_compilation( &mut self, _cache_store: Arc, ) -> Result<()> { bail!("incremental compilation is not supported on this platform"); } } impl std::fmt::Debug for Builder { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "Builder: {{ triple: {:?} }}", self.triple()) } }