From d8c5492e6cfe08a246eb2f1396c28866f96b4c42 Mon Sep 17 00:00:00 2001 From: ImagineHaxing Date: Tue, 25 Aug 2026 19:49:03 +0300 Subject: [PATCH] Build bootable image --- nob.c | 29 +++++++++++++++++++++++++++-- shell.nix | 1 + src/grub.cfg | 3 +++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/grub.cfg diff --git a/nob.c b/nob.c index 2201a18..653356c 100644 --- a/nob.c +++ b/nob.c @@ -106,8 +106,8 @@ bool clean_dir(const char *dir_path) { const char *full_path = nob_temp_sprintf("%s/%s", dir_path, name); if (!nob_delete_file(full_path)) { - nob_log(NOB_ERROR, "could not delete %s", full_path); - ok = false; + clean_dir(full_path); + nob_delete_file(full_path); } } @@ -115,6 +115,29 @@ bool clean_dir(const char *dir_path) { return ok; } +bool build_bootable_image(Nob_Cmd *cmd) { + if (!nob_mkdir_if_not_exists(BUILD_FOLDER "isodir")) + return false; + if (!nob_mkdir_if_not_exists(BUILD_FOLDER "isodir/boot")) + return false; + if (!nob_mkdir_if_not_exists(BUILD_FOLDER "isodir/boot/grub")) + return false; + + nob_cmd_append(cmd, "cp", BUILD_FOLDER "kernel", BUILD_FOLDER "isodir/boot/kernel"); + if (!nob_cmd_run(cmd)) + return false; + + nob_cmd_append(cmd, "cp", SRC_FOLDER "grub.cfg", BUILD_FOLDER "isodir/boot/grub/grub.cfg"); + if (!nob_cmd_run(cmd)) + return false; + + nob_cmd_append(cmd, "grub-mkrescue", "-o", BUILD_FOLDER "kernel.iso", BUILD_FOLDER "isodir"); + if (!nob_cmd_run(cmd)) + return false; + + return true; +} + int main(int argc, char **argv) { NOB_GO_REBUILD_URSELF(argc, argv); @@ -144,6 +167,8 @@ int main(int argc, char **argv) { return 1; if (!check_kernel(&cmd)) return 1; + if (!build_bootable_image(&cmd)) + return 1; return 0; } diff --git a/shell.nix b/shell.nix index fc7ed7c..3215af9 100644 --- a/shell.nix +++ b/shell.nix @@ -7,6 +7,7 @@ pkgs.mkShell { pkgsCross.i686-embedded.buildPackages.binutils gdb grub2 + xorriso ]; shellHook = '' diff --git a/src/grub.cfg b/src/grub.cfg new file mode 100644 index 0000000..7b99635 --- /dev/null +++ b/src/grub.cfg @@ -0,0 +1,3 @@ +menuentry "kernel" { + multiboot /boot/kernel +} \ No newline at end of file