Files
arduino-sketch-builder-nix/arduino-env.nix
2023-12-03 18:20:06 +01:00

80 lines
1.8 KiB
Nix

{ lib, pkgs }:
let
mkArduinoEnv = {
packages ? []
, libraries ? []
, runtimeInputs ? []
}: let
arduino-cli = pkgs.wrapArduinoCLI {
inherit packages libraries;
};
in pkgs.stdenvNoCC.mkDerivation (finalAttrs: {
name = "arduino-env";
buildInputs = [ pkgs.makeWrapper ];
phases = ["buildPhase"];
buildPhase = ''
mkdir -p $out
makeWrapper ${arduino-cli}/bin/arduino-cli $out/bin/arduino-cli \
--prefix PATH : ${lib.makeBinPath runtimeInputs}
'';
passthru = {
buildArduinoSketch = buildArduinoSketch finalAttrs.finalPackage;
};
});
buildArduinoSketch = arduinoEnv: {
name
, src
, fqbn
}: let
in pkgs.stdenvNoCC.mkDerivation (finalAttrs: {
inherit name src;
buildPhase = ''
${arduinoEnv}/bin/arduino-cli compile --log --output-dir=out --fqbn=${fqbn}
'';
installPhase = ''
mkdir -p $out
cp -R out/* $out
'';
passthru = {
uploadArduinoSketch = uploadArduinoSketch arduinoEnv {
inherit fqbn;
arduinoSketch = (finalAttrs.finalPackage);
};
binaryTarball = binaryTarball {
inherit name;
arduinoSketch = (finalAttrs.finalPackage);
};
};
});
uploadArduinoSketch = arduinoEnv: {
arduinoSketch
, fqbn
}: pkgs.writeScriptBin "upload-arduino-sketch" ''
${arduinoEnv}/bin/arduino-cli upload --log --input-dir=${arduinoSketch} --fqbn=${fqbn} "$@"
'';
binaryTarball = {
arduinoSketch
, name
}: pkgs.runCommand "binary-tarball" {} ''
mkdir -p $out
cd ${arduinoSketch}
${pkgs.gnutar}/bin/tar -czf $out/${name}.tar.gz *
mkdir -p $out/nix-support
echo "file binary-dist $out/${name}.tar.gz" > $out/nix-support/hydra-build-products
'';
in
mkArduinoEnv