From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: 66217@debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Subject: [bug#66217] [PATCH 01/22] gnu: make-avr-toolchain: Add a #:xgcc argument.
Date: Tue, 26 Sep 2023 15:04:24 -0400 [thread overview]
Message-ID: <33c37ede82d69e5976cb50367ed8d4835a6d4ae4.1695754731.git.maxim.cournoyer@gmail.com> (raw)
In-Reply-To: <cover.1695754731.git.maxim.cournoyer@gmail.com>
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.
---
gnu/packages/avr.scm | 212 ++++++++++++++++++++++---------------------
1 file changed, 110 insertions(+), 102 deletions(-)
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index bc583ddff3b..a66abbbd3ad 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -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,115 +59,122 @@ (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))))
- (package
- (inherit xgcc)
- (name "avr-gcc")
- (arguments
- (substitute-keyword-arguments (package-arguments xgcc)
- ((#:phases phases)
- #~(modify-phases #$phases
- (add-after 'set-paths 'augment-CPLUS_INCLUDE_PATH
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((gcc (assoc-ref inputs "gcc")))
- ;; Remove the default compiler from CPLUS_INCLUDE_PATH
- ;; to prevent header conflict with the GCC from
- ;; native-inputs.
- (setenv "CPLUS_INCLUDE_PATH"
- (string-join
- (delete (string-append gcc "/include/c++")
- (string-split (getenv "CPLUS_INCLUDE_PATH")
- #\:))
- ":"))
- (format #t
- "environment variable `CPLUS_INCLUDE_PATH' \
+(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")
+ (arguments
+ (substitute-keyword-arguments (package-arguments xgcc)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'set-paths 'augment-CPLUS_INCLUDE_PATH
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gcc (assoc-ref inputs "gcc")))
+ ;; Remove the default compiler from CPLUS_INCLUDE_PATH
+ ;; to prevent header conflict with the GCC from
+ ;; native-inputs.
+ (setenv "CPLUS_INCLUDE_PATH"
+ (string-join
+ (delete (string-append gcc "/include/c++")
+ (string-split (getenv "CPLUS_INCLUDE_PATH")
+ #\:))
+ ":"))
+ (format #t
+ "environment variable `CPLUS_INCLUDE_PATH' \
changed to ~a~%"
- (getenv "CPLUS_INCLUDE_PATH")))))
- ;; Without a working multilib build, the resulting GCC lacks
- ;; support for nearly every AVR chip.
- (add-after 'unpack 'fix-genmultilib
- (lambda _
- ;; patch-shebang doesn't work here because there are
- ;; actually several scripts inside this script, each with
- ;; a #!/bin/sh that needs patching.
- (substitute* "gcc/genmultilib"
- (("#!/bin/sh") (string-append "#!" (which "sh"))))))))
- ((#:configure-flags flags)
- #~(delete "--disable-multilib" #$flags))))
- (native-search-paths
- (list (search-path-specification
- (variable "CROSS_C_INCLUDE_PATH")
- (files '("avr/include")))
- (search-path-specification
- (variable "CROSS_CPLUS_INCLUDE_PATH")
- (files '("avr/include")))
- (search-path-specification
- (variable "CROSS_OBJC_INCLUDE_PATH")
- (files '("avr/include")))
- (search-path-specification
- (variable "CROSS_OBJCPLUS_INCLUDE_PATH")
- (files '("avr/include")))
- (search-path-specification
- (variable "CROSS_LIBRARY_PATH")
- (files '("avr/lib")))))
- (native-inputs
- `(("gcc" ,gcc)
- ,@(package-native-inputs xgcc)))))))
+ (getenv "CPLUS_INCLUDE_PATH")))))
+ ;; Without a working multilib build, the resulting GCC lacks
+ ;; support for nearly every AVR chip.
+ (add-after 'unpack 'fix-genmultilib
+ (lambda _
+ ;; patch-shebang doesn't work here because there are
+ ;; actually several scripts inside this script, each with
+ ;; a #!/bin/sh that needs patching.
+ (substitute* "gcc/genmultilib"
+ (("#!/bin/sh") (string-append "#!" (which "sh"))))))))
+ ((#:configure-flags flags)
+ #~(delete "--disable-multilib" #$flags))))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "CROSS_C_INCLUDE_PATH")
+ (files '("avr/include")))
+ (search-path-specification
+ (variable "CROSS_CPLUS_INCLUDE_PATH")
+ (files '("avr/include")))
+ (search-path-specification
+ (variable "CROSS_OBJC_INCLUDE_PATH")
+ (files '("avr/include")))
+ (search-path-specification
+ (variable "CROSS_OBJCPLUS_INCLUDE_PATH")
+ (files '("avr/include")))
+ (search-path-specification
+ (variable "CROSS_LIBRARY_PATH")
+ (files '("avr/lib")))))
+ (native-inputs
+ `(("gcc" ,gcc)
+ ,@(package-native-inputs xgcc))))))
+
+(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")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://savannah//avr-libc/avr-libc-"
+ version ".tar.bz2"))
+ (sha256
+ (base32
+ "15svr2fx8j6prql2il2fc0ppwlv50rpmyckaxx38d3gxxv97zpdj"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:out-of-source? #t
+ #:configure-flags '("--host=avr")))
+ (native-inputs `(("avr-binutils" ,(make-avr-binutils))
+ ("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.")
+ (license
+ (license:non-copyleft "http://www.nongnu.org/avr-libc/LICENSE.txt"))))
(define make-avr-libc
- (mlambda ()
- (package
- (name "avr-libc")
- (version "2.0.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://savannah//avr-libc/avr-libc-"
- version ".tar.bz2"))
- (sha256
- (base32
- "15svr2fx8j6prql2il2fc0ppwlv50rpmyckaxx38d3gxxv97zpdj"))))
- (build-system gnu-build-system)
- (arguments
- '(#:out-of-source? #t
- #:configure-flags '("--host=avr")))
- (native-inputs `(("avr-binutils" ,(make-avr-binutils))
- ("avr-gcc" ,(make-avr-gcc))))
- (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.")
- (license
- (license:non-copyleft "http://www.nongnu.org/avr-libc/LICENSE.txt")))))
+ (memoize make-avr-libc/implementation))
-(define make-avr-toolchain
- (mlambda ()
- (let ((avr-binutils (make-avr-binutils))
- (avr-libc (make-avr-libc))
- (avr-gcc (make-avr-gcc)))
- ;; 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.
- (package
- (name "avr-toolchain")
- (version (package-version avr-gcc))
- (source #f)
- (build-system trivial-build-system)
- (arguments '(#:builder (begin (mkdir %output) #t)))
- (propagated-inputs
- `(("avrdude" ,avrdude)
- ("binutils" ,avr-binutils)
- ("gcc" ,avr-gcc)
- ("libc" ,avr-libc)))
- (synopsis "Complete GCC tool chain for AVR microcontroller development")
- (description "This package provides a complete GCC tool chain for AVR
+(define* (make-avr-toolchain/implementation #:key (xgcc gcc))
+ (let ((avr-binutils (make-avr-binutils))
+ (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.
+ (package
+ (name "avr-toolchain")
+ (version (package-version avr-gcc))
+ (source #f)
+ (build-system trivial-build-system)
+ (arguments '(#:builder (begin (mkdir %output) #t)))
+ (propagated-inputs
+ `(("avrdude" ,avrdude)
+ ("binutils" ,avr-binutils)
+ ("gcc" ,avr-gcc)
+ ("libc" ,avr-libc)))
+ (synopsis "Complete GCC tool chain for AVR microcontroller development")
+ (description "This package provides a complete GCC tool chain for AVR
microcontroller development. This includes the GCC AVR cross compiler and
avrdude for firmware flashing. The supported programming languages are C and
C++.")
- (home-page (package-home-page avr-libc))
- (license (package-license avr-gcc))))))
+ (home-page (package-home-page avr-libc))
+ (license (package-license avr-gcc)))))
+
+(define make-avr-toolchain
+ (memoize make-avr-toolchain/implementation))
(define-public microscheme
(package
--
2.41.0
next prev parent reply other threads:[~2023-09-26 19:59 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-26 18:59 [bug#66217] [PATCH 00/22] Add ErgoDox firmware packages Maxim Cournoyer
2023-09-26 19:04 ` Maxim Cournoyer [this message]
2023-09-26 19:04 ` [bug#66217] [PATCH 02/22] gnu: qmk: Style Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 03/22] gnu: qmk: Avoid propagating inputs Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 04/22] gnu: qmk: Use GCC 8 for the AVR toolchain Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 05/22] gnu: qmk: Add many missing inputs and add more commands to PATH Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 06/22] gnu: Add lufa Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 07/22] gnu: embedded: Do not use a prefix on the (gnu packages base) module Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 08/22] gnu: Add qmk-firmware-ergodox-ez-default Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 09/22] gnu: Add qmk-firmware-ergodox-ez-dvorak-42-key Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 10/22] gnu: Add qmk-udev-rules Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 11/22] gnu: Add qmk-firmware-ergodox-ez-hacker-dvorak Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 12/22] gnu: Add qmk-firmware-ergodox-ez-dvorak Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 13/22] gnu: Add qmk-firmware-ergodox-ez-dvorak-emacs Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 14/22] gnu: Add qmk-firmware-ergodox-ez-dvorak-emacs-software Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 15/22] gnu: Add ergodox-firmware-colemak-jc-mod Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 16/22] gnu: Add ergodox-firmware-colemak-symbol-mod Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 17/22] gnu: Add ergodox-firmware-dvorak-kinesis-mod Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 18/22] gnu: Add ergodox-firmware-qwerty-kinesis-mod Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 19/22] gnu: Add ergodox-firmware-workman-p-kinesis-mod Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 20/22] gnu: teensy-loader-cli: Use gexps Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 21/22] gnu: teensy-loader-cli: Fix license Maxim Cournoyer
2023-09-26 19:04 ` [bug#66217] [PATCH 22/22] gnu: Add teensy-udev-rules Maxim Cournoyer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=33c37ede82d69e5976cb50367ed8d4835a6d4ae4.1695754731.git.maxim.cournoyer@gmail.com \
--to=maxim.cournoyer@gmail.com \
--cc=66217@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.