diff --git a/machine/rust-bindings/cartesi-machine/src/config/machine.rs b/machine/rust-bindings/cartesi-machine/src/config/machine.rs index 4b4315c..e599ed6 100644 --- a/machine/rust-bindings/cartesi-machine/src/config/machine.rs +++ b/machine/rust-bindings/cartesi-machine/src/config/machine.rs @@ -6,276 +6,219 @@ use std::path::PathBuf; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct MachineConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub processor: Option, + pub processor: ProcessorConfig, pub ram: RAMConfig, - #[serde(skip_serializing_if = "Option::is_none")] - pub dtb: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub flash_drive: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub tlb: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub clint: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub plic: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub htif: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub uarch: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub cmio: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub virtio: Option, + pub dtb: DTBConfig, + pub flash_drive: FlashDriveConfigs, + pub tlb: TLBConfig, + pub clint: CLINTConfig, + pub plic: PLICConfig, + pub htif: HTIFConfig, + pub uarch: UarchConfig, + pub cmio: CmioConfig, + pub virtio: VirtIOConfigs, } -impl Default for MachineConfig { - fn default() -> Self { - crate::machine::Machine::default_config().expect("failed to get default config") +impl MachineConfig { + pub fn new_with_ram(ram: RAMConfig) -> Self { + Self { + processor: ProcessorConfig::default(), + ram, + dtb: DTBConfig::default(), + flash_drive: FlashDriveConfigs::default(), + tlb: TLBConfig::default(), + clint: CLINTConfig::default(), + plic: PLICConfig::default(), + htif: HTIFConfig::default(), + uarch: UarchConfig::default(), + cmio: CmioConfig::default(), + virtio: VirtIOConfigs::default(), + } + } + + pub fn processor(mut self, processor: ProcessorConfig) -> Self { + self.processor = processor; + self } + + pub fn dtb(mut self, dtb: DTBConfig) -> Self { + self.dtb = dtb; + self + } + + pub fn add_flash_drive(mut self, flash_drive: MemoryRangeConfig) -> Self { + self.flash_drive.push(flash_drive); + self + } + + pub fn tlb(mut self, tlb: TLBConfig) -> Self { + self.tlb = tlb; + self + } + + pub fn clint(mut self, clint: CLINTConfig) -> Self { + self.clint = clint; + self + } + + pub fn plic(mut self, plic: PLICConfig) -> Self { + self.plic = plic; + self + } + + pub fn htif(mut self, htif: HTIFConfig) -> Self { + self.htif = htif; + self + } + + pub fn uarch(mut self, uarch: UarchConfig) -> Self { + self.uarch = uarch; + self + } + + pub fn cmio(mut self, cmio: CmioConfig) -> Self { + self.cmio = cmio; + self + } + + pub fn add_virtio(mut self, virtio_config: VirtIODeviceConfig) -> Self { + self.virtio.push(virtio_config); + self + } +} + +fn default_config() -> MachineConfig { + crate::machine::Machine::default_config().expect("failed to get default config") } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct ProcessorConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub x0: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x1: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x2: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x3: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x4: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x5: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x6: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x7: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x8: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x9: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x10: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x11: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x12: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x13: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x14: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x15: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x16: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x17: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x18: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x19: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x20: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x21: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x22: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x23: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x24: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x25: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x26: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x27: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x28: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x29: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x30: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x31: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f0: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f1: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f2: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f3: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f4: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f5: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f6: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f7: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f8: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f9: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f10: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f11: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f12: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f13: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f14: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f15: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f16: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f17: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f18: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f19: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f20: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f21: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f22: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f23: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f24: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f25: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f26: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f27: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f28: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f29: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f30: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub f31: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub pc: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub fcsr: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mvendorid: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub marchid: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mimpid: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mcycle: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub icycleinstret: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mstatus: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mtvec: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mscratch: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mepc: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mcause: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mtval: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub misa: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mie: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mip: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub medeleg: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mideleg: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub mcounteren: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub menvcfg: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub stvec: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub sscratch: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub sepc: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub scause: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub stval: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub satp: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub scounteren: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub senvcfg: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub ilrsc: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub iprv: Option, + pub x0: u64, + pub x1: u64, + pub x2: u64, + pub x3: u64, + pub x4: u64, + pub x5: u64, + pub x6: u64, + pub x7: u64, + pub x8: u64, + pub x9: u64, + pub x10: u64, + pub x11: u64, + pub x12: u64, + pub x13: u64, + pub x14: u64, + pub x15: u64, + pub x16: u64, + pub x17: u64, + pub x18: u64, + pub x19: u64, + pub x20: u64, + pub x21: u64, + pub x22: u64, + pub x23: u64, + pub x24: u64, + pub x25: u64, + pub x26: u64, + pub x27: u64, + pub x28: u64, + pub x29: u64, + pub x30: u64, + pub x31: u64, + pub f0: u64, + pub f1: u64, + pub f2: u64, + pub f3: u64, + pub f4: u64, + pub f5: u64, + pub f6: u64, + pub f7: u64, + pub f8: u64, + pub f9: u64, + pub f10: u64, + pub f11: u64, + pub f12: u64, + pub f13: u64, + pub f14: u64, + pub f15: u64, + pub f16: u64, + pub f17: u64, + pub f18: u64, + pub f19: u64, + pub f20: u64, + pub f21: u64, + pub f22: u64, + pub f23: u64, + pub f24: u64, + pub f25: u64, + pub f26: u64, + pub f27: u64, + pub f28: u64, + pub f29: u64, + pub f30: u64, + pub f31: u64, + pub pc: u64, + pub fcsr: u64, + pub mvendorid: u64, + pub marchid: u64, + pub mimpid: u64, + pub mcycle: u64, + pub icycleinstret: u64, + pub mstatus: u64, + pub mtvec: u64, + pub mscratch: u64, + pub mepc: u64, + pub mcause: u64, + pub mtval: u64, + pub misa: u64, + pub mie: u64, + pub mip: u64, + pub medeleg: u64, + pub mideleg: u64, + pub mcounteren: u64, + pub menvcfg: u64, + pub stvec: u64, + pub sscratch: u64, + pub sepc: u64, + pub scause: u64, + pub stval: u64, + pub satp: u64, + pub scounteren: u64, + pub senvcfg: u64, + pub ilrsc: u64, + pub iprv: u64, #[serde(rename = "iflags_X")] - #[serde(skip_serializing_if = "Option::is_none")] - pub iflags_x: Option, + pub iflags_x: u64, #[serde(rename = "iflags_Y")] - #[serde(skip_serializing_if = "Option::is_none")] - pub iflags_y: Option, + pub iflags_y: u64, #[serde(rename = "iflags_H")] - #[serde(skip_serializing_if = "Option::is_none")] - pub iflags_h: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub iunrep: Option, + pub iflags_h: u64, + pub iunrep: u64, } impl Default for ProcessorConfig { fn default() -> Self { - MachineConfig::default() - .processor - .expect("`processor` field should not be empty") + default_config().processor } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct RAMConfig { pub length: u64, - #[serde(skip_serializing_if = "Option::is_none")] - pub image_filename: Option, -} - -impl Default for RAMConfig { - fn default() -> Self { - MachineConfig::default().ram - } + pub image_filename: PathBuf, } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct DTBConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub bootargs: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub init: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub entrypoint: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub image_filename: Option, + pub bootargs: String, + pub init: String, + pub entrypoint: String, + pub image_filename: PathBuf, } impl Default for DTBConfig { fn default() -> Self { - MachineConfig::default() - .dtb - .expect("`dtb` field should not be empty") + default_config().dtb } } @@ -285,32 +228,23 @@ pub struct MemoryRangeConfig { pub start: Option, #[serde(skip_serializing_if = "Option::is_none")] pub length: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub image_filename: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub shared: Option, + pub image_filename: PathBuf, + pub shared: bool, } #[derive(Clone, Debug, Default, Serialize, Deserialize)] pub struct CmioBufferConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub image_filename: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub shared: Option, + pub image_filename: PathBuf, + pub shared: bool, } #[derive(Clone, Debug, Default, Serialize, Deserialize)] pub struct VirtIOHostfwd { - #[serde(skip_serializing_if = "Option::is_none")] - pub is_udp: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub host_ip: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub guest_ip: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub host_port: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub guest_port: Option, + pub is_udp: bool, + pub host_ip: u64, + pub guest_ip: u64, + pub host_port: u64, + pub guest_port: u64, } pub type VirtIOHostfwdArray = Vec; @@ -330,165 +264,105 @@ pub enum VirtIODeviceType { #[derive(Clone, Debug, Default, Serialize, Deserialize)] pub struct VirtIODeviceConfig { pub r#type: VirtIODeviceType, - #[serde(skip_serializing_if = "Option::is_none")] - pub tag: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub host_directory: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub hostfwd: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub iface: Option, + pub tag: String, + pub host_directory: String, + pub hostfwd: VirtIOHostfwdArray, + pub iface: String, } pub type FlashDriveConfigs = Vec; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct TLBConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub image_filename: Option, + pub image_filename: PathBuf, } impl Default for TLBConfig { fn default() -> Self { - MachineConfig::default() - .tlb - .expect("`tlb` field should not be empty") + default_config().tlb } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CLINTConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub mtimecmp: Option, + pub mtimecmp: u64, } impl Default for CLINTConfig { fn default() -> Self { - MachineConfig::default() - .clint - .expect("`clint` field should not be empty") + default_config().clint } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct PLICConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub girqpend: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub girqsrvd: Option, + pub girqpend: u64, + pub girqsrvd: u64, } impl Default for PLICConfig { fn default() -> Self { - MachineConfig::default() - .plic - .expect("`plic` field should not be empty") + default_config().plic } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct HTIFConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub fromhost: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub tohost: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub console_getchar: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub yield_manual: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub yield_automatic: Option, + pub fromhost: u64, + pub tohost: u64, + pub console_getchar: bool, + pub yield_manual: bool, + pub yield_automatic: bool, } impl Default for HTIFConfig { fn default() -> Self { - MachineConfig::default() - .htif - .expect("`htif` field should not be empty") + default_config().htif } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct UarchProcessorConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub x0: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x1: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x2: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x3: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x4: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x5: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x6: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x7: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x8: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x9: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x10: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x11: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x12: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x13: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x14: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x15: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x16: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x17: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x18: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x19: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x20: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x21: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x22: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x23: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x24: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x25: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x26: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x27: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x28: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x29: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x30: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub x31: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub pc: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub cycle: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub halt_flag: Option, + pub x0: u64, + pub x1: u64, + pub x2: u64, + pub x3: u64, + pub x4: u64, + pub x5: u64, + pub x6: u64, + pub x7: u64, + pub x8: u64, + pub x9: u64, + pub x10: u64, + pub x11: u64, + pub x12: u64, + pub x13: u64, + pub x14: u64, + pub x15: u64, + pub x16: u64, + pub x17: u64, + pub x18: u64, + pub x19: u64, + pub x20: u64, + pub x21: u64, + pub x22: u64, + pub x23: u64, + pub x24: u64, + pub x25: u64, + pub x26: u64, + pub x27: u64, + pub x28: u64, + pub x29: u64, + pub x30: u64, + pub x31: u64, + pub pc: u64, + pub cycle: u64, + pub halt_flag: bool, } impl Default for UarchProcessorConfig { fn default() -> Self { - MachineConfig::default() - .uarch - .expect("`uarch` field should not be empty") - .processor - .expect("`uarch.processor` field should not be empty") + default_config().uarch.processor } } @@ -496,49 +370,36 @@ impl Default for UarchProcessorConfig { pub struct UarchRAMConfig { #[serde(skip_serializing_if = "Option::is_none")] pub length: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub image_filename: Option, + pub image_filename: PathBuf, } impl Default for UarchRAMConfig { fn default() -> Self { - MachineConfig::default() - .uarch - .expect("`uarch` field should not be empty") - .ram - .expect("`uarch.ram` field should not be empty") + default_config().uarch.ram } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct UarchConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub processor: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub ram: Option, + pub processor: UarchProcessorConfig, + pub ram: UarchRAMConfig, } impl Default for UarchConfig { fn default() -> Self { - MachineConfig::default() - .uarch - .expect("`uarch` field should not be empty") + default_config().uarch } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CmioConfig { - #[serde(skip_serializing_if = "Option::is_none")] - pub rx_buffer: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub tx_buffer: Option, + pub rx_buffer: CmioBufferConfig, + pub tx_buffer: CmioBufferConfig, } impl Default for CmioConfig { fn default() -> Self { - MachineConfig::default() - .cmio - .expect("`plic` field should not be empty") + default_config().cmio } } @@ -550,9 +411,8 @@ mod tests { #[test] fn test_default_configs() { - MachineConfig::default(); + default_config(); ProcessorConfig::default(); - RAMConfig::default(); DTBConfig::default(); TLBConfig::default(); CLINTConfig::default(); diff --git a/machine/rust-bindings/cartesi-machine/src/machine.rs b/machine/rust-bindings/cartesi-machine/src/machine.rs index 49a3abe..de5e3d9 100644 --- a/machine/rust-bindings/cartesi-machine/src/machine.rs +++ b/machine/rust-bindings/cartesi-machine/src/machine.rs @@ -644,7 +644,7 @@ mod tests { use crate::{ config::{ - machine::{MachineConfig, MemoryRangeConfig}, + machine::{DTBConfig, MachineConfig, MemoryRangeConfig, RAMConfig}, runtime::RuntimeConfig, }, constants, @@ -653,43 +653,36 @@ mod tests { }; fn make_basic_machine_config() -> MachineConfig { - MachineConfig { - dtb: Some(crate::config::machine::DTBConfig { - entrypoint: Some("echo Hello from inside!".to_string()), - ..Default::default() - }), - flash_drive: Some(vec![MemoryRangeConfig { - image_filename: Some("../../../test/programs/rootfs.ext2".into()), - ..Default::default() - }]), - ram: crate::config::machine::RAMConfig { - length: 134217728, - image_filename: Some("../../../test/programs/linux.bin".into()), - }, + MachineConfig::new_with_ram(RAMConfig { + length: 134217728, + image_filename: "../../../test/programs/linux.bin".into(), + }) + .dtb(DTBConfig { + entrypoint: "echo Hello from inside!".to_string(), ..Default::default() - } + }) + .add_flash_drive(MemoryRangeConfig { + image_filename: "../../../test/programs/rootfs.ext2".into(), + ..Default::default() + }) } fn make_cmio_machine_config() -> MachineConfig { - MachineConfig { - dtb: Some(crate::config::machine::DTBConfig { - entrypoint: Some( - "echo '{\"domain\":16,\"id\":\"'$(echo -n Hello from inside! | hex --encode)'\"}' \ + MachineConfig::new_with_ram(RAMConfig { + length: 134217728, + image_filename: "../../../test/programs/linux.bin".into(), + }) + .dtb(DTBConfig { + entrypoint: + "echo '{\"domain\":16,\"id\":\"'$(echo -n Hello from inside! | hex --encode)'\"}' \ | rollup gio | grep -Eo '0x[0-9a-f]+' | tr -d '\\n' | hex --decode; echo" - .to_string(), - ), - ..Default::default() - }), - flash_drive: Some(vec![MemoryRangeConfig { - image_filename: Some("../../../test/programs/rootfs.ext2".into()), - ..Default::default() - }]), - ram: crate::config::machine::RAMConfig { - length: 134217728, - image_filename: Some("../../../test/programs/linux.bin".into()), - }, + .to_string(), ..Default::default() - } + }) + .add_flash_drive(MemoryRangeConfig { + image_filename: "../../../test/programs/rootfs.ext2".into(), + ..Default::default() + }) } fn create_machine(config: &MachineConfig) -> Result { @@ -946,10 +939,6 @@ mod tests { let val_via_read_reg2 = machine.read_reg(reg)?; assert_eq!(val_via_read_reg2, new_reg_value); - // let another_value: u64 = 0xDEAD_BEEF_0000_0001; - // let data_bytes = another_value.to_le_bytes(); - // machine.write_memory(reg_phys_addr, &data_bytes)?; - Ok(()) } }