Skip to main content

chipi_core/backend/
ida.rs

1//! IDA Pro processor module backend.
2//!
3//! Generates a Python (IDAPython) processor module for IDA Pro 9.x
4//! from a validated `.chipi` definition.
5
6use crate::codegen_ida;
7use crate::config::GenTarget;
8use crate::tree;
9use crate::types::ValidatedDef;
10
11use super::{CodegenBackend, CodegenError};
12
13/// The IDA Pro code generation backend.
14pub struct IdaBackend;
15
16impl CodegenBackend for IdaBackend {
17    fn lang(&self) -> &str {
18        "ida"
19    }
20
21    fn generate(&self, ir: &ValidatedDef, config: &GenTarget) -> Result<String, CodegenError> {
22        let tree = tree::build_tree(ir);
23        let opts = config
24            .lang_options
25            .as_ida()
26            .ok_or_else(|| CodegenError::Internal("IDA backend requires IDA options".into()))?;
27        Ok(codegen_ida::generate_ida_code(
28            ir,
29            &tree,
30            opts,
31            &config.type_map,
32        ))
33    }
34
35    fn formatter_command(&self) -> Option<&[&str]> {
36        Some(&["ruff", "format"])
37    }
38}