{ 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<$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 ''; })