Add (build, clean, run) subcommands for nob
This commit is contained in:
@@ -167,37 +167,73 @@ 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 (!nob_mkdir_if_not_exists(BUILD_FOLDER))
|
if (build) {
|
||||||
return 1;
|
if (!nob_mkdir_if_not_exists(BUILD_FOLDER))
|
||||||
|
return 1;
|
||||||
|
|
||||||
Nob_Cmd cmd = {0};
|
Nob_Cmd cmd = {0};
|
||||||
|
|
||||||
if (!render_clangd_config())
|
if (!render_clangd_config())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!build_assembly(&cmd))
|
if (!build_assembly(&cmd))
|
||||||
return 1;
|
return 1;
|
||||||
if (!build_c(&cmd))
|
if (!build_c(&cmd))
|
||||||
return 1;
|
return 1;
|
||||||
if (!link_everything(&cmd))
|
if (!link_everything(&cmd))
|
||||||
return 1;
|
return 1;
|
||||||
if (!check_kernel(&cmd))
|
if (!check_kernel(&cmd))
|
||||||
return 1;
|
return 1;
|
||||||
if (!build_bootable_image(&cmd))
|
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 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user