diff --git a/.cargo/config.toml b/.cargo/config.toml index 6cea5ca..bda5800 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,2 @@ [alias] -repbuild = "run --manifest-path ./repbuild/Cargo.toml --" \ No newline at end of file +repbuild = "run --manifest-path ./repbuild/Cargo.toml -r --" diff --git a/Cargo.lock b/Cargo.lock index 4bdf159..5fd4713 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,8 +45,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "const-random", - "getrandom", "once_cell", "version_check", "zerocopy 0.7.34", @@ -193,26 +191,6 @@ dependencies = [ "toml 0.5.9", ] -[[package]] -name = "const-random" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" -dependencies = [ - "const-random-macro", -] - -[[package]] -name = "const-random-macro" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" -dependencies = [ - "getrandom", - "once_cell", - "tiny-keccak", -] - [[package]] name = "convert_case" version = "0.4.0" @@ -254,12 +232,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - [[package]] name = "derive_more" version = "0.99.17" @@ -455,26 +427,37 @@ dependencies = [ ] [[package]] -name = "hbasm" +name = "hbbytecode" version = "0.1.0" source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#e494785f93dad2722ebd9e5d81c2bcb3c471cc07" -dependencies = [ - "paste", - "rhai", - "with_builtin_macros", -] [[package]] name = "hbbytecode" version = "0.1.0" source = "git+https://git.ablecorp.us/ableos/holey-bytes#e494785f93dad2722ebd9e5d81c2bcb3c471cc07" +[[package]] +name = "hblang" +version = "0.1.0" +source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#e494785f93dad2722ebd9e5d81c2bcb3c471cc07" +dependencies = [ + "hbvm 0.1.0 (git+https://git.ablecorp.us/AbleOS/holey-bytes.git)", +] + +[[package]] +name = "hbvm" +version = "0.1.0" +source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#e494785f93dad2722ebd9e5d81c2bcb3c471cc07" +dependencies = [ + "hbbytecode 0.1.0 (git+https://git.ablecorp.us/AbleOS/holey-bytes.git)", +] + [[package]] name = "hbvm" version = "0.1.0" source = "git+https://git.ablecorp.us/ableos/holey-bytes#e494785f93dad2722ebd9e5d81c2bcb3c471cc07" dependencies = [ - "hbbytecode", + "hbbytecode 0.1.0 (git+https://git.ablecorp.us/ableos/holey-bytes)", ] [[package]] @@ -598,15 +581,6 @@ dependencies = [ "hashbrown 0.12.3", ] -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - [[package]] name = "ipnet" version = "2.9.0" @@ -638,7 +612,7 @@ dependencies = [ "derive_more", "embedded-graphics", "hashbrown 0.14.2", - "hbvm", + "hbvm 0.1.0 (git+https://git.ablecorp.us/ableos/holey-bytes)", "kiam", "limine", "log", @@ -832,7 +806,7 @@ dependencies = [ "derive_more", "error-stack", "fatfs", - "hbasm", + "hblang", "reqwest", "str-reader", "toml 0.5.11", @@ -878,34 +852,6 @@ dependencies = [ "winreg", ] -[[package]] -name = "rhai" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7d88770120601ba1e548bb6bc2a05019e54ff01b51479e38e64ec3b59d4759" -dependencies = [ - "ahash 0.8.11", - "bitflags 2.4.1", - "instant", - "num-traits", - "once_cell", - "rhai_codegen", - "smallvec", - "smartstring", - "thin-vec", -] - -[[package]] -name = "rhai_codegen" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59aecf17969c04b9c0c5d21f6bc9da9fec9dd4980e64d1871443a476589d8c86" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - [[package]] name = "ring" version = "0.17.5" @@ -1058,23 +1004,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "smartstring" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" -dependencies = [ - "autocfg", - "static_assertions", - "version_check", -] - [[package]] name = "socket2" version = "0.4.10" @@ -1104,12 +1033,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "str-reader" version = "0.1.2" @@ -1159,21 +1082,6 @@ dependencies = [ "libc", ] -[[package]] -name = "thin-vec" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38c90d48152c236a3ab59271da4f4ae63d678c5d7ad6b7714d7cb9760be5e4b" - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -1562,26 +1470,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "with_builtin_macros" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a59d55032495429b87f9d69954c6c8602e4d3f3e0a747a12dea6b0b23de685da" -dependencies = [ - "with_builtin_macros-proc_macros", -] - -[[package]] -name = "with_builtin_macros-proc_macros" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bd7679c15e22924f53aee34d4e448c45b674feb6129689af88593e129f8f42" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "x2apic" version = "0.4.3" diff --git a/repbuild/Cargo.toml b/repbuild/Cargo.toml index aabe054..c9c209b 100644 --- a/repbuild/Cargo.toml +++ b/repbuild/Cargo.toml @@ -9,8 +9,8 @@ derive_more = "0.99" error-stack = "0.4" fatfs = "0.3" toml = "0.5.2" -hbasm.git = "https://git.ablecorp.us/AbleOS/holey-bytes.git" -# hblang.git = "https://git.ablecorp.us/AbleOS/holey-bytes.git" +# hbasm.git = "https://git.ablecorp.us/AbleOS/holey-bytes.git" +hblang.git = "https://git.ablecorp.us/AbleOS/holey-bytes.git" [dependencies.reqwest] version = "0.11" diff --git a/repbuild/src/dev.rs b/repbuild/src/dev.rs index 6dc50f1..e779c56 100644 --- a/repbuild/src/dev.rs +++ b/repbuild/src/dev.rs @@ -1,6 +1,16 @@ -use std::process::exit; +use std::{ + fs::{read_to_string, File}, + io::{BufWriter, Write}, + process::exit, +}; + +use error_stack::Report; + +use crate::Error; pub struct Package { - name: String, + name: String, + binaries: Vec, + build_cmd: String, } impl Package { @@ -20,13 +30,71 @@ impl Package { use toml::Value; let mut data: Value = toml::from_str(&contents).unwrap(); - let name = data + let mut name = data .get("package") .unwrap() .get("name") .unwrap() .to_string(); + name.pop(); + name.remove(0); - Self { name } + let dependants = data.get("dependants").unwrap(); + let bin_table = dependants.get("binaries").unwrap().as_table().unwrap(); + let mut binaries = vec![]; + + for (count, (name, table)) in bin_table.into_iter().enumerate() { + // if count != 0 { + println!("{}", name); + binaries.push(name.clone()); + // } + } + let build_table = data.get("build").unwrap(); + + let mut build_cmd: String = build_table.get("command").unwrap().as_str().unwrap().into(); + build_cmd.remove(0); + // build_cmd.pop(); + + Self { + name, + binaries, + build_cmd, + } + } + pub fn build(&self) { + if self.binaries.contains(&"hblang".to_string()) { + let file_order = self.build_cmd.split_ascii_whitespace(); + let mut files = vec![]; + for (count, file) in file_order.enumerate() { + if count != 0 { + println!("{}", file); + files.push(file); + } + } + let mut bundle = vec![]; + for file in files { + let contents = read_to_string(file).unwrap(); + bundle.push((file, contents)); + } + + use hblang::{codegen, parser}; + let mut codegen = codegen::Codegen::default(); + for (path, content) in bundle.iter() { + println!("A"); + codegen.files = vec![parser::Ast::new(&path, &content, &parser::no_loader)]; + codegen.generate(); + } + let mut buf = BufWriter::new(Vec::new()); + codegen.dump(&mut buf); + let bytes = buf.into_inner().unwrap(); + match std::fs::create_dir("target/programs") { + Ok(_) => (), + Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => (), + Err(e) => panic!(), + } + let path = format!("target/test-programs/{}.hbf", self.name); + let mut file = File::create(path).unwrap(); + file.write_all(&bytes).unwrap(); + } } } diff --git a/repbuild/src/main.rs b/repbuild/src/main.rs index 0944f3c..191d544 100644 --- a/repbuild/src/main.rs +++ b/repbuild/src/main.rs @@ -117,8 +117,8 @@ fn assemble() -> Result<(), Error> { .map_err(Report::from) .change_context(Error::Io)?; - hbasm::assembler(&mut out, |engine| engine.run_file(entry.path())) - .map_err(|e| report!(Error::Assembler).attach_printable(e.to_string()))?; + // hbasm::assembler(&mut out, |engine| engine.run_file(entry.path())) + // .map_err(|e| report!(Error::Assembler).attach_printable(e.to_string()))?; } Ok(()) @@ -139,9 +139,9 @@ fn get_fs() -> Result, io::Error> { let fs = FileSystem::new(img, FsOptions::new())?; - let p = Package::load_from_file( - "/home/able/Projects/ableos/sysdata/programs/tests/meta.toml".to_owned(), - ); + // TODO: Do not hard code these here + let p = Package::load_from_file("sysdata/programs/tests/meta.toml".to_owned()); + p.build(); // Read the contents of the file using a `match` block // to return the `data: Ok(c)` as a `String` diff --git a/sysdata/libraries/stn/src/lib.hb b/sysdata/libraries/stn/src/lib.hb index bab8d98..09bb90f 100644 --- a/sysdata/libraries/stn/src/lib.hb +++ b/sysdata/libraries/stn/src/lib.hb @@ -1,6 +1,4 @@ -/* -Refer to the spec in "spec/Logging Service spec.md" -*/ +char := struct {} log := fn(log_level: int, message: ^char, message_length: int): int { @@ -26,4 +24,8 @@ debug := fn(message: ^char, message_length: int): int { trace := fn(message: ^char, message_length: int): int { log(4, message, message_length) +} + +main := fn(): int { + return 0; } \ No newline at end of file diff --git a/sysdata/programs/tests/meta.toml b/sysdata/programs/tests/meta.toml index 3b6cd03..a4396a5 100644 --- a/sysdata/programs/tests/meta.toml +++ b/sysdata/programs/tests/meta.toml @@ -8,4 +8,4 @@ authors = ["able"] hblang.version = "1.0.0" [build] -command = "hblang libraries/stn/src/lib.hb src/main.hbl" +command = "hblang sysdata/libraries/stn/src/lib.hb sysdata/programs/tests/src/main.hb" diff --git a/sysdata/programs/tests/src/main.hb b/sysdata/programs/tests/src/main.hb index e69de29..cd84536 100644 --- a/sysdata/programs/tests/src/main.hb +++ b/sysdata/programs/tests/src/main.hb @@ -0,0 +1,3 @@ +main := fn(): int { + return 0; +} \ No newline at end of file diff --git a/sysdata/system_config.toml b/sysdata/system_config.toml index 2a3fc4c..8b2a190 100644 --- a/sysdata/system_config.toml +++ b/sysdata/system_config.toml @@ -17,32 +17,6 @@ resolution = "1024x768x24" [boot.limine.ableos.modules] -# [boot.limine.ableos.modules.failure] -# path = "boot:///failure.hbf" - -# [boot.limine.ableos.modules.ecall] -# path = "boot:///ecall.hbf" - -# [boot.limine.ableos.modules.sds_test] -# path = "boot:///sds_test.hbf" - -# [boot.limine.ableos.modules.main] -# path = "boot:///main.hbf" - -# [boot.limine.ableos.modules.keyboard_driver] -# path = "boot:///keyboard_driver.hbf" -# cmd_line = "arch=${ARCH}" - -# [boot.limine.ableos.modules.vfs_test] -# path = "boot:///vfs_test.hbf" - -[boot.limine.ableos.modules.bin] -path = "boot:///bin.hbf" - -# [boot.limine.ableos.modules.limine_framebuffer_driver] -# path = "boot:///limine_framebuffer_driver.hbf" -# cmd_line = "height=10 width=10 arch=${ARCH}" - -# [boot.limine.ableos.modules.serial_driver] -# path = "boot:///serial_driver.hbf" -# cmd_line = "arch=${ARCH}" +[boot.limine.ableos.modules.tests] +# TODO: Pull from the programs included here +path = "boot:///tests.hbf"