Files
oxidos/package.nix
2025-08-01 07:24:40 -04:00

77 lines
1.7 KiB
Nix

{
callPackage,
grub2,
naersk,
nasm,
qemu,
rust-bin,
xorriso,
...
}: let
nightly = rust-bin.nightly.latest.default.override {
extensions = ["rust-src"];
};
naersk' = callPackage naersk {
cargo = nightly;
rustc = nightly;
};
target = builtins.readFile ./x86_64-oxidos.json;
in
naersk'.buildPackage {
name = "oxidos";
src = ./.;
copyBins = false;
release = true;
cargoBuildOptions = x: x ++ ["-Z" "build-std=core,compiler_builtins,alloc" "-Z" "build-std-features=compiler-builtins-mem" "--target=x86_64-oxidos.json"];
buildInputs = [
qemu
];
nativeBuildInputs = [
grub2
nasm
xorriso
];
preBuild = ''
cat << EOF > x86_64-oxidos.json
${target}
EOF
'';
postInstall = ''
nasm -f elf64 asm/multiboot_header.asm -o multiboot_header.asm.o
nasm -f elf64 asm/long_mode_init.asm -o long_mode_init.asm.o
nasm -f elf64 asm/boot.asm -o boot.asm.o
ld -n -o kernel.bin\
--gc-sections\
-T link-cfg/linker.ld\
multiboot_header.asm.o\
long_mode_init.asm.o\
boot.asm.o\
target/x86_64-oxidos/release/liboxidos.a
mkdir isofiles/boot/grub -p
cp kernel.bin isofiles/boot/kernel.bin
cp link-cfg/grub.cfg isofiles/boot/grub/grub.cfg
grub-mkrescue -o os.iso isofiles
echo "#!/usr/bin/env bash" > oxidos
echo "${qemu}/bin/qemu-system-x86_64 -cdrom $(echo $out)/os.iso" >> oxidos
chmod +x oxidos
mkdir $out/bin -p
cp oxidos $out/bin/oxidos
cp kernel.bin $out/kernel.bin
cp os.iso $out/os.iso
'';
meta = {
mainProgram = "oxidos";
homepage = "https://mtgmonkey.net";
};
}