97 lines
2.6 KiB
TOML
97 lines
2.6 KiB
TOML
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.kernel]
|
|
condition = { files_modified = { input = ["./src/**/*.rs", "./src/**/*.ld"], output = ["./target/${TARGET}/${TARGETDIR}/kernel"] }, fail_message = "(inputs unchanged)"}
|
|
dependencies = ["prepare"]
|
|
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 ./limine.conf build/iso/
|
|
cp ${LIMINEDIR}/limine-bios.sys build/iso/boot/limine/
|
|
cp ${LIMINEDIR}/limine-bios-cd.bin build/iso/boot/limine/
|
|
cp ${LIMINEDIR}/limine-uefi-cd.bin build/iso/boot/limine/
|
|
cp ${LIMINEDIR}/${LIMINEBIN} build/iso/EFI/BOOT
|
|
|
|
cp 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"] |