pub struct CompileConfig {Show 13 fields
pub opt_level: u8,
pub target: TargetSpec,
pub bounds_check: bool,
pub safety_bounds: SafetyBounds,
pub hardware: String,
pub no_optimize: bool,
pub loom_compat: bool,
pub num_imports: u32,
pub func_arg_counts: Vec<u32>,
pub type_arg_counts: Vec<u32>,
pub relocatable: bool,
pub native_pointer_abi: bool,
pub linear_memory_bytes: u32,
}Expand description
Configuration for a compilation run
Fields§
§opt_level: u8Optimization level (0 = none, 1 = fast, 2 = default, 3 = aggressive)
target: TargetSpecTarget specification
bounds_check: boolLegacy: enable software bounds checking for memory operations.
Deprecated in favor of safety_bounds. When set, equivalent to
SafetyBounds::Software. Kept for backwards compatibility with
callers that haven’t migrated yet.
safety_bounds: SafetyBoundsPhase-1 unified safety-bounds knob. If bounds_check is true and
this is None, the legacy field wins (back-compat). If both are set,
safety_bounds wins.
hardware: StringHardware profile name (e.g. “nrf52840”, “stm32f407”)
no_optimize: boolSkip optimization passes (direct instruction selection)
loom_compat: boolUse Loom-compatible optimization preset
num_imports: u32Number of imported functions (calls to indices below this use Meld dispatch)
func_arg_counts: Vec<u32>AAPCS integer-argument count per function, indexed by full WASM function
index (imports first, then locals). Lets Call marshal the right number
of operand-stack values into R0–R3 (issue #195). Empty = pass no args
(pre-#195 behaviour).
type_arg_counts: Vec<u32>AAPCS integer-argument count per function type, indexed by type index.
Used by call_indirect (issue #195).
relocatable: boolProduce relocatable (ET_REL) host-link output. When set, the backend
uses the direct instruction selector (select_with_stack) rather than
the optimized path: the optimizer materializes an absolute linear-
memory base (0x20000100) and does not preserve caller-saved registers
across calls, both wrong for a host-linked object where the linmem base
is supplied via fp at runtime and callees follow AAPCS. Imports are
also emitted as direct func_N BLs (resolved to the wasm field name)
instead of __meld_dispatch_import. (#197 — follow-up to #188/#171.)
native_pointer_abi: bool#237: emit wasm function-static data as a base-independent .data
section (__synth_wasm_data) addressed via MOVW/MOVT symbol relocations,
so a host-pointer drop-in (linmem base = 0 for native *ptr derefs)
doesn’t mis-resolve the statics. Off by default — only the leaves’
base-relative [R11+const] path is used unless explicitly requested.
linear_memory_bytes: u32#237: wasm linear-memory minimum size in bytes — the full static-data
extent (initialized (data) segments plus the zero-init/BSS region).
Under native_pointer_abi, a const memory address below this is a wasm
static → symbol-relative; any address beyond it is a runtime host pointer
→ [R11=0 + addr].
Implementations§
Source§impl CompileConfig
impl CompileConfig
Sourcepub fn effective_safety_bounds(&self) -> SafetyBounds
pub fn effective_safety_bounds(&self) -> SafetyBounds
Resolve the effective safety-bounds setting, honouring the legacy
bounds_check field as a fallback. Used by backends to pick the
inline-check shape.
Trait Implementations§
Source§impl Clone for CompileConfig
impl Clone for CompileConfig
Source§fn clone(&self) -> CompileConfig
fn clone(&self) -> CompileConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more