gnu: Add lufa.

* gnu/packages/avr-xyz.scm (lufa): New variable.
This commit is contained in:
Maxim Cournoyer 2023-09-17 11:14:24 -04:00
parent 45be44bf3d
commit 1cb7404fee
No known key found for this signature in database
GPG key ID: 1260E46482E63562

View file

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com> ;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; ;;;
;;; This file is part of GNU Guix. ;;; 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 base)
#:use-module (gnu packages bash) #:use-module (gnu packages bash)
#:use-module (gnu packages avr) #:use-module (gnu packages avr)
#:use-module (gnu packages documentation)
#:use-module (gnu packages elf) #:use-module (gnu packages elf)
#:use-module (gnu packages gl) #:use-module (gnu packages gl)
#:use-module (gnu packages pkg-config) #: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 in the emulated code using an @code{.elf} section. You can also load
multipart HEX files.") multipart HEX files.")
(license license:gpl3))) (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