import nake import os, osproc, strutils let standardOptions = """--skipCfg -d:version:"""" & execProcess("git rev-parse HEAD").strip() & """" kernel.nim""" outputFile = "myos.bin" task "clean", "Removes build files.": removeFile("boot.o") removeFile("serial.log") removeDir("nimcache") removeFile(outputFile) echo "Done." task "bootloader", "Builds the bootloader.": echo "Building bootloader." direShell "nasm -felf32 kernel/arch/i386/boot.s -o boot.o" echo "Done." task "build", "Builds the operating system.": runTask("clean") runTask("bootloader") echo "Compiling and linking." withDir("kernel"): direShell "nim cc -o:", "../" & outputFile, standardOptions runTask("checkMultiboot") echo "Done." task "build-release", "Builds the operating system, release mode.": runTask("clean") runTask("bootloader") echo "Compiling and linking (release mode)." withDir("kernel"): direShell "nim cc -d:release -o:", "../" & outputFile, standardOptions runTask("checkMultiboot") echo "Done." task "checkMultiboot", "Checks the grub multiboot header.": echo "Checking multiboot." direShell "grub-file --is-x86-multiboot", outputFile echo "Multibook check successful." task "debug", "Runs the operating system using QEMU with debug build and flags.": runTask("build") echo "Running in Qemu." direShell "qemu-system-i386 -kernel", outputFile ,"-serial stdio -no-reboot -no-shutdown -d int,cpu_reset" task "run", "Runs the operating system using QEMU.": runTask("build-release") echo "Running in Qemu." direShell "qemu-system-i386 -kernel", outputFile ,"-serial stdio"