let mozillaOverlay = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz); pkgs = import {overlays = [mozillaOverlay];}; in with pkgs; let migen = callPackage ./nix/migen.nix {}; openocd = callPackage ./nix/openocd.nix {}; rustPlatform = callPackage ./nix/rustPlatform.nix {}; itm = callPackage ./nix/itm.nix {inherit rustPlatform;}; runOpenOcdBlock = writeShellScriptBin "run-openocd-block" '' openocd -f openocd/openocd.cfg ''; openocdFlash = writeShellScriptBin "openocd-flash" '' openocd -f openocd/openocd.cfg -f openocd/main.cfg ''; publishMqtt = writeShellScriptBin "publish-mqtt" '' mosquitto_pub -h localhost -t $1 -m "$2" -d ''; openOCDFlashCustomised = writeShellScriptBin "openocd-flash-customised" '' IFS='.|/' read -r a b c d e <<< $1 ((ip = (a << 32) + (b << 24) + (c << 16) + (d << 8) + e)) IFS=':' read -r a b c d e f <<< $2 ((mac = (16#$a << 40) + (16#$b << 32) + (16#$c << 24) + (16#$d << 16) + (16#$e << 8) + 16#$f)) IFS='.' read -r a b c d <<< $3 ((broker_ip = (a << 24) + (b << 16) + (c << 8) + d)) touch temp_name printf "%s\x04" "$4" > temp_name openocd -f openocd/openocd.cfg \ -c "init reset init halt stm32h7x mass_erase 1 flash write_image erase target/thumbv7em-none-eabihf/release/humpback-dds flash filld 0x08100000 $ip 1 flash filld 0x08100020 $mac 1 flash fillw 0x08100040 $broker_ip 1 flash write_image temp_name 0x08100060 bin reset run shutdown" rm temp_name ''; in stdenv.mkDerivation { name = "Humpback-DDS"; buildInputs = with rustPlatform.rust; [ (pkgs.python3.withPackages(ps: [ migen ])) pkgs.yosys pkgs.nextpnr pkgs.icestorm pkgs.gdb pkgs.mosquitto openocd rustc cargo itm runOpenOcdBlock openocdFlash publishMqtt openOCDFlashCustomised ]; }