Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

avrdude: updates and enablement of compile-time features #303276

Merged
merged 8 commits into from
Apr 20, 2024
52 changes: 39 additions & 13 deletions pkgs/development/embedded/avrdude/default.nix
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
{ lib, stdenv, fetchFromGitHub, cmake, bison, flex, libusb-compat-0_1, libelf
, libftdi1, readline, libserialport
# documentation building is broken on darwin
, docSupport ? (!stdenv.isDarwin), texliveMedium, texinfo, texi2html, unixtools }:
{ lib, callPackage, stdenv, fetchFromGitHub, cmake, bison, flex, libusb1, elfutils
, libftdi1, readline, hidapi, libserialport
# Documentation building doesn't work on Darwin. It fails with:
# Undefined subroutine &Locale::Messages::dgettext called in ... texi2html
#
# https://github.com/NixOS/nixpkgs/issues/224761
, docSupport ? (!stdenv.hostPlatform.isDarwin), texliveMedium, texinfo, texi2html, unixtools }:

stdenv.mkDerivation rec {
let
useElfutils = lib.meta.availableOn stdenv.hostPlatform elfutils;
in

stdenv.mkDerivation (finalAttrs: {
pname = "avrdude";
version = "7.3";

src = fetchFromGitHub {
owner = "avrdudes";
repo = pname;
rev = "v${version}";
repo = "avdude";
rev = "v${finalAttrs.version}";
sha256 = "sha256-JqW3AOMmAfcy+PQRcqviWlxA6GoMSEfzIFt1pRYY7Dw=";
};

Expand All @@ -21,17 +28,36 @@ stdenv.mkDerivation rec {
texi2html
];

buildInputs = [ libusb-compat-0_1 libelf libftdi1 libserialport readline ];

cmakeFlags = lib.optionals docSupport [
"-DBUILD_DOC=ON"
buildInputs = [
(if useElfutils then elfutils else finalAttrs.finalPackage.passthru.libelf)
hidapi
libusb1
libftdi1
libserialport
readline
];

postPatch = lib.optionalString (!useElfutils) ''
# vendored libelf is a static library
sed -i "s/PREFERRED_LIBELF elf/PREFERRED_LIBELF libelf.a elf/" CMakeLists.txt
'';

# Not used:
# -DHAVE_LINUXGPIO=ON because it's incompatible with libgpiod 2.x
cmakeFlags = lib.optionals docSupport [ "-DBUILD_DOC=ON" ]
++ lib.optionals stdenv.hostPlatform.isLinux [ "-DHAVE_LINUXSPI=ON" "-DHAVE_PARPORT=ON" ];

# dvips output references texlive in comments, resulting in a huge closure
postInstall = lib.optionalString docSupport ''
rm $out/share/doc/${pname}/*.ps
rm $out/share/doc/avrdude/*.ps
'';

passthru = {
# Vendored and mutated copy of libelf for avrdudes use.
# Produces a static library only.
libelf = callPackage ./libelf.nix { };
};

meta = with lib; {
description = "Command-line tool for programming Atmel AVR microcontrollers";
mainProgram = "avrdude";
Expand All @@ -45,4 +71,4 @@ stdenv.mkDerivation rec {
platforms = with platforms; linux ++ darwin;
maintainers = [ maintainers.bjornfor ];
};
}
})
36 changes: 36 additions & 0 deletions pkgs/development/embedded/avrdude/libelf.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
lib,
stdenv,
cmake,
fetchFromGitHub,
}:

stdenv.mkDerivation {
pname = "libelf";
version = "0.8.13-unstable-2023-01-14";

src = fetchFromGitHub {
owner = "avrdudes";
repo = "libelf";
rev = "0c55bfe1d3020a20bddf6ce57c0d9d98ccb12586";
hash = "sha256-jz7Ef0Eg673IJVZvVNklY40s13LCuMVAc7FGrRI7scQ=";
};

nativeBuildInputs = [ cmake ];

installPhase = ''
runHook preInstall
mkdir -p $out/lib
cp liblibelf.a $out/lib/libelf.a
cp -r $src/include $out/include
runHook postInstall
'';

meta = {
description = "ELF object file access library (vendored by avrdudes)";
homepage = "https://github.com/avrdudes/libelf";
license = lib.licenses.lgpl2Plus;
platforms = lib.platforms.all;
philiptaron marked this conversation as resolved.
Show resolved Hide resolved
maintainers = [ lib.maintainers.bjornfor ];
};
}