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
+55 -19
View File
@@ -167,37 +167,73 @@ bool build_bootable_image(Nob_Cmd *cmd) {
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) {
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 (strcmp(argv[1], "clean") == 0) {
if (clean) {
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))
return 1;
} else {
nob_log(NOB_INFO, "Usage: %s (clean)", argv[0]);
return 1;
nob_delete_file(BUILD_FOLDER);
}
}
if (!nob_mkdir_if_not_exists(BUILD_FOLDER))
return 1;
if (build) {
if (!nob_mkdir_if_not_exists(BUILD_FOLDER))
return 1;
Nob_Cmd cmd = {0};
Nob_Cmd cmd = {0};
if (!render_clangd_config())
return 1;
if (!render_clangd_config())
return 1;
if (!build_assembly(&cmd))
return 1;
if (!build_c(&cmd))
return 1;
if (!link_everything(&cmd))
return 1;
if (!check_kernel(&cmd))
return 1;
if (!build_bootable_image(&cmd))
if (!build_assembly(&cmd))
return 1;
if (!build_c(&cmd))
return 1;
if (!link_everything(&cmd))
return 1;
if (!check_kernel(&cmd))
return 1;
if (!build_bootable_image(&cmd))
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;
}
+1
View File
@@ -8,6 +8,7 @@ pkgs.mkShell {
gdb
grub2
xorriso
qemu
];
shellHook = ''