diff options
-rw-r--r-- | gnu/build/cross-toolchain.scm | 8 | ||||
-rw-r--r-- | gnu/packages/avr.scm | 13 | ||||
-rw-r--r-- | gnu/packages/cross-base.scm | 15 |
3 files changed, 20 insertions, 16 deletions
diff --git a/gnu/build/cross-toolchain.scm b/gnu/build/cross-toolchain.scm index 9746be3e50..1933b3e49a 100644 --- a/gnu/build/cross-toolchain.scm +++ b/gnu/build/cross-toolchain.scm @@ -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 diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm index 23401cd249..e3671399c1 100644 --- a/gnu/packages/avr.scm +++ b/gnu/packages/avr.scm @@ -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") diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 6de1306279..777b5d8761 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -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"))) |