unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
blob 111547ef8728fde7b9b683bee15c2fddae7b8ca4 7430 bytes (raw)
name: gnu/packages/avr.scm 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
 
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
;;; Copyright © 2015, 2017, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016 David Thompson <davet@gnu.org>
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;; 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.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages avr)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix gexp)
  #:use-module (guix memoization)
  #:use-module (guix utils)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix packages)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system trivial)
  #:use-module (gnu packages check)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages cross-base)
  #:use-module (gnu packages flashing-tools)
  #:use-module (gnu packages gcc)
  #:use-module (gnu packages llvm)
  #:use-module (gnu packages vim)
  #:export (make-avr-toolchain))

;;; Commentary:
;;;
;;; This module defines a procedure that can be used to create a complete
;;; avr-toolchain package.  The procedure must not be used at the top level,
;;; to avoid cyclic module dependencies caused by the (gnu packages
;;; cross-base) module referring to top level bindings from (gnu packages
;;; gcc).
;;;
;;; It also contains packages for working with or targeting the AVR system.
;;;

(define make-avr-binutils
  (mlambda ()
    (package
      (inherit (cross-binutils "avr"))
      (name "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")
      (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))))))

(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
  (memoize make-avr-libc/implementation))

(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)))))

(define make-avr-toolchain
  (memoize make-avr-toolchain/implementation))

debug log:

solving 111547ef87 ...
found 111547ef87 in https://yhetil.org/guix-patches/20231128113510.11214-5-jean@foundationdevices.com/
found a66abbbd3a in https://git.savannah.gnu.org/cgit/guix.git
preparing index
index prepared:
100644 a66abbbd3add80c039e59dfa958432c7231fce88	gnu/packages/avr.scm

applying [1/1] https://yhetil.org/guix-patches/20231128113510.11214-5-jean@foundationdevices.com/
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index a66abbbd3a..111547ef87 100644

Checking patch gnu/packages/avr.scm...
Applied patch gnu/packages/avr.scm cleanly.

index at:
100644 111547ef8728fde7b9b683bee15c2fddae7b8ca4	gnu/packages/avr.scm

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).