~ruther/guix-local

9095e10620c775145666f88ff4b0bfdc06645665 — Jean-Pierre De Jesus DIAZ 2 years ago a075ac8
gnu: cross-gcc: Enable multilib for AVR.

* gnu/build/cross-toolchain.scm (patch-multilib-shebang): New procedure.
* gnu/packages/avr.scm (make-avr-gcc): Remove uneeded phases and flags
  for multilib.
* gnu/packages/cross-base (cross-gcc-arguments) <#:configure-flags>
  [target-avr?]: Remove --disable-multilib and add --enable-multilib.

Change-Id: Id68d803057ac898f0a670f10487b08bf0891ab0b
Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
3 files changed, 20 insertions(+), 16 deletions(-)

M gnu/build/cross-toolchain.scm
M gnu/packages/avr.scm
M gnu/packages/cross-base.scm
M gnu/build/cross-toolchain.scm => gnu/build/cross-toolchain.scm +8 -0
@@ 48,6 48,12 @@
  ;; Search path for target headers when cross-compiling.
  (map (cut string-append "CROSS_" <>) %gcc-include-paths))

(define* (patch-genmultilib-shebang #:key inputs native-inputs #:allow-other-keys)
  "Patch-shebang in the gcc/genmultilib file doesn't work as it contains several
scripts inside, each with a #!/bin/sh that needs patching."
  (substitute* "gcc/genmultilib"
    (("#!/bin/sh") (string-append "#!" (which "sh")))))

(define* (make-cross-binutils-visible #:key outputs inputs target
                                      #:allow-other-keys)
  "Create symlinks for 'as', 'nm', and 'ld' in the \"out\" output, under


@@ 173,6 179,8 @@ C_*INCLUDE_PATH."
  "Modify PHASES to include everything needed to build a cross-GCC for TARGET,
a target triplet."
  (modify-phases phases
    (add-after 'unpack 'patch-genmultilib-shebang
      patch-genmultilib-shebang)
    (add-before 'configure 'set-cross-path
      ;; This mingw32 target checking logic should match that of target-mingw?
      ;; in (guix utils), but (guix utils) is too large too copy over to the

M gnu/packages/avr.scm => gnu/packages/avr.scm +1 -12
@@ 77,18 77,7 @@
                    (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))))
                            (getenv "CPLUS_INCLUDE_PATH")))))))))
      (native-search-paths
       (list (search-path-specification
              (variable "CROSS_C_INCLUDE_PATH")

M gnu/packages/cross-base.scm => gnu/packages/cross-base.scm +11 -4
@@ 197,12 197,19 @@ base compiler and using LIBC (which may be either a libc package or #f.)"
                                #~((string-append "--with-toolexeclibdir="
                                                  (assoc-ref %outputs "lib")
                                                  "/" #$target "/lib"))
                                #~())

                         #$@(if (target-avr? target)
                                #~("--enable-multilib")
                                #~()))

                   #$(if libc
                         flags
                         #~(remove (cut string-match "--enable-languages.*" <>)
                                   #$flags))))
                   (remove
                     (lambda (flag)
                       (or (and #$libc
                                (string-prefix? "--enable-languages" flag))
                           (and #$(target-avr? target)
                                (string=? flag "--disable-multilib"))))
                     #$flags)))
        ((#:make-flags flags)
         (if libc
             #~(let ((libc (assoc-ref %build-inputs "libc")))