{ rustPlatform, rust-riscv32i-crates, binutils-riscv32, rustc, cargo }: rustPlatform.buildRustPackage rec { name = "helloworld"; version = "0.0.0"; src = ./.; cargoSha256 = "0kf2pnfylfmzm0qvi4jfci43qvrnj1v5f037sb9zpvfqyddhdffl"; # HACK - rustc overlay does not update rustPlatform. Find out why. configurePhase = ''echo XXX ${rustPlatform.rust.rustc} ${rustPlatform.rust.cargo}''; buildPhase = '' export CARGO_HOME=$(mktemp -d cargo-home.XXX) export RUSTFLAGS="-L ${rust-riscv32i-crates}/lib/rustlib/riscv32i-unknown-none-elf/lib -C linker=${binutils-riscv32}/bin/riscv32-unknown-elf-ld -C link-arg=-Tlink.x" export RUSTC=${rustc}/bin/rustc ${cargo}/bin/cargo build --release --target riscv32i-unknown-none-elf ''; doCheck = false; installPhase = '' mkdir -p $out cp target/riscv32i-unknown-none-elf/release/helloworld $out ${binutils-riscv32}/bin/riscv32-unknown-elf-objcopy -O binary target/riscv32i-unknown-none-elf/release/helloworld $out/helloworld.bin ''; }