From 1cb7404fee01417eb474a2b687dccb5bbf355683 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Sun, 17 Sep 2023 11:14:24 -0400 Subject: [PATCH] gnu: Add lufa. * gnu/packages/avr-xyz.scm (lufa): New variable. --- gnu/packages/avr-xyz.scm | 83 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/gnu/packages/avr-xyz.scm b/gnu/packages/avr-xyz.scm index e8844b8d43..e0db2e3a0c 100644 --- a/gnu/packages/avr-xyz.scm +++ b/gnu/packages/avr-xyz.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 Artyom V. Poptsov +;;; Copyright © 2023 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,6 +30,7 @@ (define-module (gnu packages avr-xyz) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages avr) + #:use-module (gnu packages documentation) #:use-module (gnu packages elf) #:use-module (gnu packages gl) #:use-module (gnu packages pkg-config) @@ -95,3 +97,84 @@ (define-public simavr in the emulated code using an @code{.elf} section. You can also load multipart HEX files.") (license license:gpl3))) + +(define-public lufa + (package + (name "lufa") + (version "210130") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/abcminiuser/lufa") + (commit (string-append "LUFA-" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0ylr7qsiikcy827k18zj1vdzf0kb8hb0gjmifd75y8krkhhar49g")))) + (outputs '("bootloaders" "demos" "projects" "doc")) + (build-system gnu-build-system) + (arguments + ;; There are tests, but even LUFA's own CI doesn't run them (they are + ;; only built). + (list + #:tests? #f + #:modules '((guix build gnu-build-system) + (guix build utils) + (ice-9 match) + (srfi srfi-26)) + #:make-flags + #~(list (string-append "SHELL="(search-input-file %build-inputs + "bin/sh"))) + #:phases #~(modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'build-documentation + (lambda* (#:key make-flags #:allow-other-keys) + (apply invoke "make" "-j" (number->string + (or (parallel-job-count) + 1)) + "doxygen" + ;; Ignore errors (see: + ;; https://github.com/abcminiuser/lufa/issues/90). + "-i" + make-flags))) + (replace 'install + ;; There is no default install target as the library is + ;; intended to be integrated in source form in a + ;; project. Install the example projects and demos + ;; binaries as well as the documentation. + (lambda _ + (let ((doc (string-append #$output:doc + "/share/doc/lufa/")) + (html-dirs (find-files "." "^html$" + #:directories? #t))) + (for-each (cut install-file <> #$output:bootloaders) + (find-files "Bootloaders" "\\.hex$")) + (for-each (cut install-file <> #$output:demos) + (find-files "Demos" "\\.hex$")) + (for-each (cut install-file <> #$output:projects) + (find-files "Projects" "\\.hex$")) + ;; Install Doxygen generated HTML documentation. + (for-each + (lambda (html) + (let* ((suffix "Documentation/html") + (l (string-length suffix)) + (dest (string-append + doc + (string-drop + (if (string-suffix? suffix html) + (string-drop-right html l) + (error "unexpected path" html)) + 1)))) ;drop leading "." + (mkdir-p dest) + (copy-recursively html dest))) + html-dirs))))))) + (native-inputs (list doxygen (make-avr-toolchain))) + (home-page "https://www.lufa-lib.org/") + (synopsis "Lightweight USB Framework for AVRs") + (description "UFA is a simple to use, lightweight framework which sits +atop the hardware USB controller in specific AVR microcontroller models, and +allows for the quick and easy creation of complex USB devices and hosts. This +package contains the user-submitted projects and bootloaders for use with +compatible microcontroller models, as well as the demos and the +documentation.") + (license license:expat))) ;see LUFA/License.txt