lemurs-8080 0.5.2

An emulator for the Intel 8080 microprocessor
Documentation
#![feature(path_file_prefix)]

use std::path::PathBuf;
use cc::Build;

#[allow(dead_code)]
fn compile<F : FnOnce(&mut Build)> (file: PathBuf, process: Option<F>) -> Result<cc::Build, PathBuf> {
	if file.extension() == Some("cpp".as_ref()) {
		let Some(name) = file.file_prefix() else { return Err(file) };
		let mut job = Build::new();
		job
			.cpp(true)
			.std("c++14")
			.file(file.clone())
	    	.include("include");
		if let Some(process) = process {
			process(&mut job);
		}
		job.compile(name.to_string_lossy().as_ref());
		Ok(job)
	} else {
		Err(file)
	}

}

fn main() {
	#[cfg(feature="_cpp")]
	{
		let debug = if std::env::var("DEBUG") == Ok(String::from("true")) { Some( |job: &mut Build| {
			if job.get_compiler().is_like_msvc() {
				job.flag("-MDd");
			}
			job
					.flag_if_supported("-fms-runtime-lib=dll_dbg")
				.define("_ITERATOR_DEBUG_LEVEL", "2");
		})
		} else { None };
		std::fs::read_dir("src").map(
			|dir| {
				for source in dir.flatten() {
					let _ = compile(source.path(), debug);
				}
			}
		).ok();
	}
}