Files
bootler/bootle/package.nix
2026-03-06 20:33:51 +01:00

69 lines
1.4 KiB
Nix

{
callPackage,
rust-bin,
naersk,
bootler,
qemu,
...
}: let
rust-toolchain = rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
naersk' = callPackage naersk {
cargo = rust-toolchain;
rustc = rust-toolchain;
clippy = rust-toolchain;
};
in (naersk'.buildPackage {
src = ./.;
# deps for rust-src
additionalCargoLock = "${rust-toolchain.availableComponents.rust-src}/lib/rustlib/src/rust/library/Cargo.lock";
# just library build
copyBins = false;
copyLibs = true;
release = true;
# build std
cargoBuildOptions = x:
x
++ [
"-Zbuild-std"
];
postInstall = ''
ld --oformat binary \
-o kernel.bin \
-T src/linker.ld \
-e _start \
target/x86_64-unknown-none/release/libbootle.a
dd if=/dev/zero of=disk bs=512 count=2
dd if=${bootler}/bin/boot.bin of=disk conv=notrunc
dd if=kernel.bin of=disk bs=512 seek=1 conv=notrunc
mkdir -p $out/lib
mkdir -p $out/bin
cat<<EOF>$out/bin/bootle
#!/usr/bin/env bash
mkdir -p ./.bootle
cp $(echo $out)/bin/disk ./.bootle/disk
chmod a+w ./.bootle/disk
${qemu}/bin/qemu-system-x86_64 \
-nographic \
-drive file=./.bootle/disk,format=raw,index=0,media=disk
rm ./.bootle -r
EOF
chmod +x $out/bin/bootle
cp target/x86_64-unknown-none/release/libbootle.a $out/lib
cp kernel.bin $out/bin
cp disk $out/bin
'';
})