Add (build, clean, run) subcommands for nob

This commit is contained in:
2026-08-25 20:34:56 +03:00
parent cf9058e70a
commit e5c28e0cb5
2 changed files with 56 additions and 19 deletions
+41 -5
View File
@@ -167,19 +167,43 @@ bool build_bootable_image(Nob_Cmd *cmd) {
return true; return true;
} }
bool runQemu(Nob_Cmd *cmd) {
nob_cmd_append(cmd, "qemu-system-i386", "-cdrom", BUILD_FOLDER "kernel.iso");
if (!nob_cmd_run(cmd))
return false;
return true;
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
NOB_GO_REBUILD_URSELF(argc, argv); NOB_GO_REBUILD_URSELF(argc, argv);
const char *program_name = shift(argv, argc);
bool clean = false;
bool run = false; // starts qemu
bool build = false;
while (argc > 0) {
const char *arg = shift(argv, argc);
if (strcmp(arg, "clean") == 0)
clean = true;
if (strcmp(arg, "run") == 0)
run = true;
if (strcmp(arg, "build") == 0)
build = true;
}
if (argc >= 2) { if (clean) {
if (strcmp(argv[1], "clean") == 0) { const char *dir_path = BUILD_FOLDER;
Nob_Dir_Entry dir = {0};
if (!nob_dir_entry_open(dir_path, &dir)) {
nob_log(NOB_INFO, "No build directory to clean. Skipping...");
} else {
if (!clean_dir(BUILD_FOLDER)) if (!clean_dir(BUILD_FOLDER))
return 1; return 1;
} else { nob_delete_file(BUILD_FOLDER);
nob_log(NOB_INFO, "Usage: %s (clean)", argv[0]);
return 1;
} }
} }
if (build) {
if (!nob_mkdir_if_not_exists(BUILD_FOLDER)) if (!nob_mkdir_if_not_exists(BUILD_FOLDER))
return 1; return 1;
@@ -198,6 +222,18 @@ int main(int argc, char **argv) {
return 1; return 1;
if (!build_bootable_image(&cmd)) if (!build_bootable_image(&cmd))
return 1; return 1;
}
if (run) {
Nob_Cmd cmd = {0};
if (!runQemu(&cmd))
return 1;
}
if (!clean && !build && !run) {
nob_log(NOB_INFO, "Usage: %s (build || clean || run)", program_name);
return 1;
}
return 0; return 0;
} }
+1
View File
@@ -8,6 +8,7 @@ pkgs.mkShell {
gdb gdb
grub2 grub2
xorriso xorriso
qemu
]; ];
shellHook = '' shellHook = ''