147 lines
3.9 KiB
TOML
147 lines
3.9 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]
|
|
# Directory for Limine binaries
|
|
LIMINEDIR = "/usr/share/limine"
|
|
# Compile target
|
|
TARGET = "x86_64-unknown-none"
|
|
# Binaries included in the OS initramfs
|
|
BINS = []
|
|
|
|
[env.development]
|
|
PROFILE = "dev"
|
|
PROFILEDIR = "debug"
|
|
ARTIFACTDIR = "target/${TARGET}/${PROFILEDIR}"
|
|
|
|
[env.release]
|
|
PROFILE = "release"
|
|
PROFILEDIR = "release"
|
|
ARTIFACTDIR = "target/${TARGET}/${PROFILEDIR}"
|
|
|
|
[tasks.default]
|
|
alias = "run"
|
|
|
|
|
|
|
|
|
|
|
|
[tasks.clean]
|
|
dependencies = ["clean_iso", "clean_initramfs"]
|
|
command = "cargo"
|
|
args = ["clean"]
|
|
|
|
[tasks.prepare]
|
|
script = "rustup install nightly; rustup target add ${TARGET}"
|
|
|
|
[tasks.clean_iso]
|
|
command = "rm"
|
|
args = ["-rf", "build/iso", "build/gila.iso"]
|
|
|
|
[tasks.clean_initramfs]
|
|
command = "rm"
|
|
args = ["-rf", "build/initramfs", "build/initramfs.tar.lzma"]
|
|
|
|
[tasks.lib]
|
|
condition = { files_modified = { input = ["src/lib/**/*.rs"], output = ["${ARTIFACTDIR}/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",
|
|
"${ARTIFACTDIR}/libgila.rlib"
|
|
], output = ["${ARTIFACTDIR}/kernel"] }, fail_message = "(inputs unchanged)" }
|
|
dependencies = ["lib"]
|
|
command = "cargo"
|
|
args = ["build", "--profile", "${PROFILE}", "--bin", "kernel"]
|
|
|
|
[tasks.bins]
|
|
dependencies = []
|
|
|
|
|
|
|
|
|
|
|
|
[tasks.initramfs]
|
|
condition = { files_modified = { input = [
|
|
# This will not depend on *every* binary we build.
|
|
# If we mount a disk later in boot we can store other binaries there.
|
|
], output = ["build/initramfs.tar.lzma"] }, fail_message = "(inputs unchanged)" }
|
|
dependencies = ["bins"]
|
|
script = '''
|
|
mkdir -p build/initramfs/system/bin
|
|
mkdir -p build/initramfs/system/cfg
|
|
|
|
for bin in $(echo ${BINS} | tr ";" " ")
|
|
do
|
|
cp ${ARTIFACTDIR}/$bin build/initramfs/system/bin/
|
|
done
|
|
cp server_config.toml build/initramfs/system/cfg/
|
|
|
|
tar -c --lzma -f build/initramfs.tar.lzma build/initramfs
|
|
'''
|
|
|
|
[tasks.iso]
|
|
condition = { files_modified = { input = [
|
|
"${ARTIFACTDIR}/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", "initramfs"]
|
|
script = '''
|
|
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 build/initramfs.tar.lzma build/iso/boot/
|
|
|
|
cp -f ${ARTIFACTDIR}/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", "-serial", "stdio"] |