73 lines
2.3 KiB
Nix
73 lines
2.3 KiB
Nix
{
|
|
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
|
outputs = {
|
|
nixpkgs,
|
|
self,
|
|
...
|
|
}: let
|
|
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
|
src = pkgs.fetchzip {
|
|
url = "https://github.com/cpq/mdk/archive/e2c1d4e4bd9b152dfa32b48a7c0ae5f5a8b8276d.zip";
|
|
sha256 = "sha256-IBlM/c75KscqxKccGbiiiyjcxyLvUQb+ycHFGEpFAn8=";
|
|
};
|
|
esp32c3example = {exampleName}: (pkgs.callPackage ({
|
|
pkgsCross,
|
|
gitMinimal,
|
|
fetchzip,
|
|
esputil,
|
|
lib,
|
|
...
|
|
}:
|
|
pkgsCross.riscv64-embedded.stdenv.mkDerivation {
|
|
pname = "esp32c3-${exampleName}";
|
|
version = "0.0.2";
|
|
inherit src;
|
|
MDK = "/build/source"; # so it jumps to build directory for
|
|
ARCH = "esp32c3";
|
|
TOOLCHAIN = "riscv64-none-elf";
|
|
nativeBuildInputs = [
|
|
gitMinimal
|
|
];
|
|
patchPhase = ''
|
|
cp ${esputil}/bin/esputil esputil
|
|
'';
|
|
buildPhase = ''
|
|
git init
|
|
echo $ESPUTIL
|
|
make -C examples/${exampleName} build
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
cp ./examples/${exampleName}/firmware.{bin,elf} $out/bin/
|
|
cat<<EOF>$out/bin/esp32c3-${exampleName}
|
|
#!/usr/bin/env bash
|
|
${esputil}/bin/esputil flash 0 $(echo $out)/bin/firmware.bin
|
|
EOF
|
|
chmod +x $out/bin/esp32c3-${exampleName}
|
|
'';
|
|
}) {esputil = self.packages.x86_64-linux.esputil;});
|
|
in {
|
|
packages.x86_64-linux.esputil = pkgs.callPackage ({
|
|
stdenv,
|
|
fetchzip,
|
|
...
|
|
}:
|
|
stdenv.mkDerivation {
|
|
pname = "esputil";
|
|
version = "1.0.1";
|
|
src = fetchzip {
|
|
url = "https://github.com/cpq/esputil/archive/refs/tags/1.0.1.zip";
|
|
sha256 = "sha256-yP/JPmk+5X7Ok89rOjqtiyQmIryxTiLZ0/Eil0XJHLA=";
|
|
};
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
cp ./esputil $out/bin/esputil -r
|
|
'';
|
|
}) {};
|
|
packages.x86_64-linux.esp32c3-blinky = esp32c3example {exampleName = "blinky";};
|
|
packages.x86_64-linux.esp32c3-bme280 = esp32c3example {exampleName = "bme280";};
|
|
packages.x86_64-linux.esp32c3-button = esp32c3example {exampleName = "button";};
|
|
packages.x86_64-linux.esp32c3-ws2812 = esp32c3example {exampleName = "ws2812";};
|
|
};
|
|
}
|