2017-11-17 00:46:57 +00:00
|
|
|
import nake
|
|
|
|
import os
|
|
|
|
|
|
|
|
const
|
2017-11-17 00:53:53 +00:00
|
|
|
standardOptions = """--skipCfg --forceBuild --cc:clang --deadCodeElim:on --gc:regions --boundChecks:on --path:"kernel/arch/i386" --cpu:i386 --os:standalone --passC:"-ffreestanding -nostdlib --target=i386-pc-none-elf -march=i386" --passL:"-ffreestanding -target i386 -nostdlib" kernel/kernel.nim"""
|
2017-11-17 00:46:57 +00:00
|
|
|
outputFile = "myos.bin"
|
|
|
|
|
|
|
|
task "clean", "Removes build files.":
|
|
|
|
removeFile("boot.o")
|
|
|
|
removeFile("serial.log")
|
|
|
|
removeDir("nimcache")
|
2017-11-17 00:53:53 +00:00
|
|
|
removeFile(outputFile)
|
2017-11-17 00:46:57 +00:00
|
|
|
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."
|
2017-11-17 01:17:04 +00:00
|
|
|
direShell "nim cc -o:", outputFile, standardOptions
|
2017-11-17 00:46:57 +00:00
|
|
|
runTask("checkMultiboot")
|
|
|
|
echo "Done."
|
|
|
|
|
|
|
|
task "build-release", "Builds the operating system, release mode.":
|
|
|
|
runTask("clean")
|
|
|
|
runTask("bootloader")
|
|
|
|
echo "Compiling and linking (release mode)."
|
2017-11-17 00:53:53 +00:00
|
|
|
direShell "nim cc --skipCfg -d:release -o:", outputFile, standardOptions
|
2017-11-17 00:46:57 +00:00
|
|
|
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."
|
2017-11-17 01:17:04 +00:00
|
|
|
direShell "qemu-system-i386 -kernel", outputFile ,"-serial stdio -no-reboot -d int,cpu_reset"
|
2017-11-17 00:46:57 +00:00
|
|
|
|
|
|
|
task "run", "Runs the operating system using QEMU.":
|
|
|
|
runTask("build-release")
|
|
|
|
echo "Running in Qemu."
|
|
|
|
direShell "qemu-system-i386 -kernel", outputFile ,"-serial stdio"
|