gnu: make-avr-toolchain: Add a #:xgcc argument.

This allows generating an AVR toolchain for any version of GCC.

* gnu/packages/avr.scm (make-avr-gcc): Add a #:xgcc argument; use memoize
instead of mlambda.
(make-avr-libc): Likewise.  Provide it to the 'make-avr-gcc' call.
(make-avr-toolchain): Add a #:xgcc argument; use memoize instead of mlambda.
Provide the xgcc argument to the 'make-avr-libc' and 'make-avr-gcc'
procedures.
This commit is contained in:
Maxim Cournoyer 2023-09-13 16:04:37 -04:00
parent 53fd3989d3
commit 4af820b9ef
No known key found for this signature in database
GPG key ID: 1260E46482E63562

View file

@ -6,6 +6,7 @@
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -58,9 +59,9 @@ (define make-avr-binutils
(inherit (cross-binutils "avr"))
(name "avr-binutils"))))
(define make-avr-gcc
(mlambda ()
(let ((xgcc (cross-gcc "avr" #:xbinutils (make-avr-binutils))))
(define* (make-avr-gcc/implementation #:key (xgcc gcc))
"Return a XGCC-base cross-compiler for the AVR target."
(let ((xgcc (cross-gcc "avr" #:xgcc xgcc #:xbinutils (make-avr-binutils))))
(package
(inherit xgcc)
(name "avr-gcc")
@ -113,10 +114,12 @@ (define make-avr-gcc
(files '("avr/lib")))))
(native-inputs
`(("gcc" ,gcc)
,@(package-native-inputs xgcc)))))))
,@(package-native-inputs xgcc))))))
(define make-avr-libc
(mlambda ()
(define make-avr-gcc
(memoize make-avr-gcc/implementation))
(define* (make-avr-libc/implementation #:key (xgcc gcc))
(package
(name "avr-libc")
(version "2.0.0")
@ -132,20 +135,22 @@ (define make-avr-libc
'(#:out-of-source? #t
#:configure-flags '("--host=avr")))
(native-inputs `(("avr-binutils" ,(make-avr-binutils))
("avr-gcc" ,(make-avr-gcc))))
("avr-gcc" ,(make-avr-gcc #:xgcc xgcc))))
(home-page "https://www.nongnu.org/avr-libc/")
(synopsis "The AVR C Library")
(description
"AVR Libc is a project whose goal is to provide a high quality C
library for use with GCC on Atmel AVR microcontrollers.")
"AVR Libc is a project whose goal is to provide a high quality C library
for use with GCC on Atmel AVR microcontrollers.")
(license
(license:non-copyleft "http://www.nongnu.org/avr-libc/LICENSE.txt")))))
(license:non-copyleft "http://www.nongnu.org/avr-libc/LICENSE.txt"))))
(define make-avr-toolchain
(mlambda ()
(define make-avr-libc
(memoize make-avr-libc/implementation))
(define* (make-avr-toolchain/implementation #:key (xgcc gcc))
(let ((avr-binutils (make-avr-binutils))
(avr-libc (make-avr-libc))
(avr-gcc (make-avr-gcc)))
(avr-libc (make-avr-libc #:xgcc xgcc))
(avr-gcc (make-avr-gcc #:xgcc xgcc)))
;; avr-libc checks the compiler version and passes "--enable-device-lib"
;; for avr-gcc > 5.1.0. It wouldn't install the library for atmega32u4
;; etc if we didn't use the corret avr-gcc.
@ -166,7 +171,10 @@ (define make-avr-toolchain
avrdude for firmware flashing. The supported programming languages are C and
C++.")
(home-page (package-home-page avr-libc))
(license (package-license avr-gcc))))))
(license (package-license avr-gcc)))))
(define make-avr-toolchain
(memoize make-avr-toolchain/implementation))
(define-public microscheme
(package