Files
stm32_rust/flake.nix
2025-10-21 11:28:07 +02:00

67 lines
1.8 KiB
Nix

{
description = "STM32U575ZI-Q Rust Embedded Development Environment";
inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; };
outputs = { self, nixpkgs }: let
system = "x86_64-linux";
pkgs = import nixpkgs { inherit system; };
rust = pkgs.rust-bin.stable.latest.default.override {
targets = [ "thumbv8m.main-none-eabihf" ];
extensions = [ "rust-src" "rustfmt" "clippy" ];
};
in {
devShells.${system}.default = pkgs.mkShell {
packages = with pkgs; [
# Base toolchain
rustup
llvm
gcc
gnumake
cmake
pkg-config
python3
git
curl
wget
unzip
# ARM embedded cross toolchain
gcc-arm-embedded
# Flashing / Debug
openocd
probe-rs
cargo-binutils
cargo-generate
flip-link
];
shellHook = ''
echo ">>> STM32 DevShell"
export PATH=${pkgs.rust-analyzer}/bin:$PATH
export PATH=$HOME/.cargo/bin:$PATH
rustup default stable
rustup component add rust-src rustfmt clippy 2>/dev/null || true
rustup target add thumbv8m.main-none-eabihf 2>/dev/null || true
export RUST_TARGET=thumbv8m.main-none-eabihf
export CARGO_TARGET_DIR=target
export DEFMT_LOG=info
export PATH=$PATH:${pkgs.gcc-arm-embedded}/bin
export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/library"
rustc --version
arm-none-eabi-gcc --version | head -n1
echo "cargo build --release --target thumbv8m.main-none-eabihf"
echo "cargo flash --release --chip STM32U575ZI"
echo "cargo run --bin main"
echo "probe-rs run --chip STM32U575ZITxQ target/thumbv8m.main-none-eabihf/release/main"
echo "target/**/build/embassy-stm32-*/out/_generated.rs"
'';
};
};
}