env_scripts = [ ''' #!@duckscript if eq ${TARGET} "x86_64-unknown-none" set_env QEMUCOMMAND "qemu-system-x86_64" set_env LIMINEBIN "BOOTX64.EFI" else if eq ${TARGET} "aarch64-unknown-none" set_env QEMUCOMMAND "qemu-system-aarch64" set_env LIMINEBIN "BOOTAA64.EFI" else if eq ${TARGET} "riscv64gc-unknown-none-elf" set_env QEMUCOMMAND "qemu-system-riscv64" set_env LIMINEBIN "BOOTRISCV64.EFI" else if eq ${TARGET} "loongarch64-unknown-none" set_env QEMUCOMMAND "qemu-system-loongarch64" set_env LIMINEBIN "BOOTLOONGARCH64.EFI" end ''' ] [env] LIMINEDIR = "/usr/share/limine" TARGET = "x86_64-unknown-none" [env.development] PROFILE = "dev" TARGETDIR = "debug" [env.release] PROFILE = "release" TARGETDIR = "release" [tasks.default] alias = "run" [tasks.clean] dependencies = ["cleaniso"] command = "cargo" args = ["clean"] [tasks.prepare] script = "rustup install nightly; rustup target add ${TARGET}" [tasks.cleaniso] command = "rm" args = ["-rf", "build"] [tasks.lib] condition = { files_modified = { input = ["./src/lib/**/*.rs"], output = ["./target/${TARGET}/${TARGETDIR}/libgila.rlib"] }, fail_message = "(inputs unchanged)"} dependencies = ["prepare"] command = "cargo" args = ["build", "--lib"] [tasks.kernel] condition = { files_modified = { input = ["./src/kernel/**/*.rs", "./src/kernel/**/*.ld", "./target/${TARGET}/${TARGETDIR}/libgila.rlib"], output = ["./target/${TARGET}/${TARGETDIR}/kernel"] }, fail_message = "(inputs unchanged)"} dependencies = ["lib"] command = "cargo" args = ["build", "--profile", "${PROFILE}", "--bin", "kernel"] [tasks.iso] condition = { files_modified = { input = [ "./target/${TARGET}/${TARGETDIR}/kernel", "./limine.conf", "${LIMINEDIR}/limine-bios.sys", "${LIMINEDIR}/limine-bios-cd.bin", "${LIMINEDIR}/limine-uefi-cd.bin", "${LIMINEDIR}/${LIMINEBIN}" ], output = ["./build/gila.iso"] }, fail_message = "(inputs unchanged)" } dependencies = ["kernel"] script = ''' #!@shell mkdir -p build/iso/boot/limine mkdir -p build/iso/EFI/BOOT cp -f ./limine.conf build/iso/ cp -f ${LIMINEDIR}/limine-bios.sys build/iso/boot/limine/ cp -f ${LIMINEDIR}/limine-bios-cd.bin build/iso/boot/limine/ cp -f ${LIMINEDIR}/limine-uefi-cd.bin build/iso/boot/limine/ cp -f ${LIMINEDIR}/${LIMINEBIN} build/iso/EFI/BOOT cp -f target/${TARGET}/${TARGETDIR}/kernel build/iso/boot/ mkdir -p build/iso/system/bin mkdir -p build/iso/system/tmp mkdir -p build/iso/system/cfg xorriso -as mkisofs \ -b boot/limine/limine-bios-cd.bin \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ --efi-boot boot/limine/limine-uefi-cd.bin \ -efi-boot-part \ --efi-boot-image \ --protective-msdos-label build/iso \ -o build/gila.iso limine bios-install build/gila.iso ''' [tasks.run] dependencies = ["iso"] command = "${QEMUCOMMAND}" args = ["-drive", "file=build/gila.iso,format=raw,index=0,media=disk"]