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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user