Overview
oboromi uses Cargo as its primary build system with a workspace structure. The project includes native dependencies that require CMake, Ninja, and a C++ compiler.Building oboromi requires both Rust and C++ toolchains due to the Unicorn Engine dependency used for ARM64 CPU emulation.
System Requirements
Minimum Requirements
- OS: Linux, macOS, or Windows 10/11
- RAM: 4GB (8GB recommended for debug builds)
- Disk Space: 2GB for source code and build artifacts
- Display: GPU with Vulkan 1.3 support (for GUI)
Required Tools
- Linux
- macOS
- Windows
Ubuntu/Debian:Fedora:Arch Linux:
Cargo Workspace Structure
oboromi uses a Cargo workspace defined in the rootCargo.toml:
Cargo.toml
Core Library (core/)
The main emulation engine:
core/Cargo.toml
- unicorn-engine: Provides ARMv8 CPU emulation via QEMU’s TCG backend
- ash: Vulkan 1.3 bindings for GPU rendering
- memmap2: Efficient memory-mapped I/O for filesystem emulation
GUI Frontend (gui/)
The eframe/egui-based interface:
gui/Cargo.toml
Building
Build in debug mode
Debug builds include symbols and assertions:This compiles:
core/→target/debug/liboboromi_core.rlibgui/→target/debug/oboromi(oroboromi.exeon Windows)
Build Features
Trace Feature
Enable instruction-level tracing for debugging:core/src/cpu/unicorn_interface.rs and shows:
- Every ARM64 instruction executed
- Register states after each instruction
- System call interception
- Memory access patterns
Custom Feature Combinations
Build Output Structure
Development Builds
Quick Iteration
For fast rebuilds during development:Check Without Building
Verify code compiles without full build:Format Code
Lint Code
Per
CONTRIBUTING.md, it’s currently normal for cargo clippy to report warnings. The project is in early development.Testing
Run Tests
As noted in
CONTRIBUTING.md, the test suite is still under development. The GUI provides a “Run CPU Tests” button that executes oboromi_core::tests::run::run_tests().Test Specific Modules
Build Troubleshooting
error: linking with `cc` failed
error: linking with `cc` failed
Cause: Missing C++ compiler or linker.Linux: Install build-essentialmacOS: Install Xcode Command Line ToolsWindows: Ensure MSVC is in PATH via Developer Command Prompt
CMake error: Could not find Ninja
CMake error: Could not find Ninja
Cause: Ninja build system not found.Install Ninja:
unicorn-engine build fails
unicorn-engine build fails
Cause: Unicorn Engine requires CMake ≥3.16 and a C compiler.Solution: Ensure CMake and a C compiler are installed and in PATH:On Windows, use Visual Studio’s Developer Command Prompt.
error: failed to run custom build command for `ash`
error: failed to run custom build command for `ash`
Cause: Missing Vulkan SDK or headers.Linux:macOS: MoltenVK should install automatically, but you can manually install:Windows: Install the Vulkan SDK
Out of memory during build
Out of memory during build
Cause: Rust debug builds can use significant RAM.Solution: Build in release mode or limit parallel jobs:
edition 2024 is unstable
edition 2024 is unstable
Cause: Rust Edition 2024 requires nightly Rust.Solution: Install nightly toolchain:Or wait for Edition 2024 to stabilize and use Edition 2021 in
Cargo.toml.Cross-Compilation
Linux → Windows
macOS → Linux
Build Performance Tips
-
Use
sccachefor faster rebuilds: -
Increase parallel jobs (if you have RAM):
-
Use
lldlinker for faster linking:.cargo/config.toml -
Split debuginfo to reduce link time:
Cargo.toml
Next Steps
Running the Emulator
Learn how to run oboromi and use the GUI
Architecture Overview
Understand the codebase structure
Contributing
Start contributing to development
CPU Emulation
Deep dive into ARM64 emulation
