#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(docsrs, feature(doc_cfg))]
extern crate alloc;
pub mod bus;
pub mod core;
pub mod cpu;
pub mod dev;
#[cfg(feature = "fw-pcbios")]
#[cfg_attr(docsrs, doc(cfg(feature = "fw-pcbios")))]
pub mod fw;
pub mod host;
pub mod machine;
#[cfg(feature = "float")]
#[cfg_attr(docsrs, doc(cfg(feature = "float")))]
pub mod float;
#[cfg(feature = "ir")]
#[cfg_attr(docsrs, doc(cfg(feature = "ir")))]
pub mod ir;
#[cfg(feature = "jit")]
#[cfg_attr(docsrs, doc(cfg(feature = "jit")))]
pub mod jit;
#[cfg(feature = "usermode")]
#[cfg_attr(docsrs, doc(cfg(feature = "usermode")))]
pub mod usermode;
#[cfg(feature = "wasm")]
#[cfg_attr(docsrs, doc(cfg(feature = "wasm")))]
pub mod wasm;
pub use crate::core::{Error, Result};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub fn build_info() -> alloc::string::String {
use alloc::string::String;
use alloc::vec::Vec;
let mut features: Vec<&str> = Vec::new();
if cfg!(feature = "std") {
features.push("std");
}
if cfg!(feature = "cli") {
features.push("cli");
}
if cfg!(feature = "gdb") {
features.push("gdb");
}
if cfg!(feature = "vnc") {
features.push("vnc");
}
if cfg!(feature = "wasm") {
features.push("wasm");
}
if cfg!(feature = "cpu-mos6502") {
features.push("cpu-mos6502");
}
if cfg!(feature = "dev-nes-cart") {
features.push("dev-nes-cart");
}
if cfg!(feature = "dev-nes-ppu") {
features.push("dev-nes-ppu");
}
if cfg!(feature = "dev-nes-apu") {
features.push("dev-nes-apu");
}
if cfg!(feature = "machine-nes") {
features.push("machine-nes");
}
if cfg!(feature = "dev-apple1") {
features.push("dev-apple1");
}
if cfg!(feature = "machine-apple1") {
features.push("machine-apple1");
}
if cfg!(feature = "dev-pc") {
features.push("dev-pc");
}
if cfg!(feature = "dev-pc-video") {
features.push("dev-pc-video");
}
if cfg!(feature = "dev-pc-floppy") {
features.push("dev-pc-floppy");
}
if cfg!(feature = "dev-ata-disk") {
features.push("dev-ata-disk");
}
if cfg!(feature = "dev-blk") {
features.push("dev-blk");
}
if cfg!(feature = "dev-pc-ide") {
features.push("dev-pc-ide");
}
if cfg!(feature = "machine-pc-at") {
features.push("machine-pc-at");
}
if cfg!(feature = "jit") {
features.push("jit");
}
if cfg!(feature = "ir") {
features.push("ir");
}
if cfg!(feature = "usermode") {
features.push("usermode");
}
let mut s = String::from("rsemu ");
s.push_str(VERSION);
s.push_str(" [");
s.push_str(&features.join(", "));
s.push(']');
s
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn version_is_not_empty() {
assert!(!VERSION.is_empty());
}
#[test]
fn build_info_names_the_crate_and_its_features() {
let info = build_info();
assert!(info.starts_with("rsemu "));
assert!(info.contains(VERSION));
#[cfg(feature = "std")]
assert!(info.contains("std"));
}
}