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>
This commit is contained in:
Jean-Pierre De Jesus DIAZ 2023-11-28 12:34:50 +01:00 committed by Efraim Flashner
parent a075ac8854
commit 9095e10620
No known key found for this signature in database
GPG key ID: 41AAE7DCCA3D8351
3 changed files with 20 additions and 16 deletions

View file

@ -48,6 +48,12 @@ (define %gcc-cross-include-paths
;; 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 @@ (define* (cross-gcc-build-phases target
"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

View file

@ -77,18 +77,7 @@ (define* (make-avr-gcc/implementation #:key (xgcc gcc))
(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")

View file

@ -197,12 +197,19 @@ (define (cross-gcc-arguments target xgcc libc)
#~((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")))