Build bootable image
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ pkgs.mkShell {
|
||||
pkgsCross.i686-embedded.buildPackages.binutils
|
||||
gdb
|
||||
grub2
|
||||
xorriso
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
menuentry "kernel" {
|
||||
multiboot /boot/kernel
|
||||
}
|
||||
Reference in New Issue
Block a user