diff options
Diffstat (limited to 'gnu/packages/gcc.scm')
-rw-r--r-- | gnu/packages/gcc.scm | 176 |
1 files changed, 79 insertions, 97 deletions
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 493ff2659f..4a5f8f0886 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014, 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr> @@ -47,6 +47,7 @@ #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) + #:use-module (guix gexp) #:use-module (guix utils) #:use-module (srfi srfi-1) #:use-module (ice-9 regex)) @@ -80,6 +81,11 @@ where the OS part is overloaded to denote a specific ABI---into GCC ;; Cilk has been removed from GCC 8 anyway. '("--disable-libcilkrts")) + ;; glibc needs the 128-bit long double type on these architectures. + ((or (string-prefix? "powerpc64le-" target) + (string-prefix? "powerpc-" target)) + '("--with-long-double-128")) + (else ;; TODO: Add `arm.*-gnueabi', etc. '()))) @@ -275,13 +281,10 @@ where the OS part is overloaded to denote a specific ABI---into GCC ~a" libc line)))) - ;; TODO: Make this unconditional in core-updates. - ,@(if (target-powerpc?) - `((when (file-exists? "gcc/config/rs6000") - ;; Force powerpc libdir to be /lib and not /lib64 - (substitute* (find-files "gcc/config/rs6000") - (("/lib64") "/lib")))) - `()) + (when (file-exists? "gcc/config/rs6000") + ;; Force powerpc libdir to be /lib and not /lib64 + (substitute* (find-files "gcc/config/rs6000") + (("/lib64") "/lib"))) ;; Don't retain a dependency on the build-time sed. (substitute* "fixincludes/fixincl.x" @@ -330,8 +333,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC ;; but there's nothing useful to look for here.) (substitute* "gcc/config.in" (("PREFIX_INCLUDE_DIR") - "PREFIX_INCLUDE_DIR_isnt_necessary_here")) - #t))) + "PREFIX_INCLUDE_DIR_isnt_necessary_here"))))) (add-after 'configure 'post-configure (lambda _ @@ -339,8 +341,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'. (substitute* "Makefile" (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest) - "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")) - #t))))) + "TOPLEVEL_CONFIGURE_ARGUMENTS=\n"))))))) (native-search-paths ;; Use the language-specific variables rather than 'CPATH' because they @@ -388,15 +389,13 @@ Go. It also includes runtime support libraries for these languages.") ;; This is required for building with glibc-2.26. ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712 (snippet - '(begin - (for-each - (lambda (dir) - (substitute* (string-append "libgcc/config/" - dir "/linux-unwind.h") - (("struct ucontext") "ucontext_t"))) - '("aarch64" "alpha" "bfin" "i386" "m68k" - "pa" "sh" "tilepro" "xtensa")) - #t)))) + '(for-each + (lambda (dir) + (substitute* (string-append "libgcc/config/" + dir "/linux-unwind.h") + (("struct ucontext") "ucontext_t"))) + '("aarch64" "alpha" "bfin" "i386" "m68k" + "pa" "sh" "tilepro" "xtensa"))))) (supported-systems %supported-systems) (inputs `(("isl" ,isl-0.11) @@ -424,15 +423,13 @@ Go. It also includes runtime support libraries for these languages.") ;; This is required for building with glibc-2.26. ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712 (snippet - '(begin - (for-each - (lambda (dir) - (substitute* (string-append "libgcc/config/" - dir "/linux-unwind.h") - (("struct ucontext") "ucontext_t"))) - '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2" - "pa" "sh" "tilepro" "xtensa")) - #t)))) + '(for-each + (lambda (dir) + (substitute* (string-append "libgcc/config/" + dir "/linux-unwind.h") + (("struct ucontext") "ucontext_t"))) + '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2" + "pa" "sh" "tilepro" "xtensa"))))) ;; Override inherited texinfo-5 with latest version. (native-inputs `(("perl" ,perl) ;for manpages ("texinfo" ,texinfo))) @@ -460,8 +457,18 @@ Go. It also includes runtime support libraries for these languages.") ":")) (format #t "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%" - (getenv "CPLUS_INCLUDE_PATH")) - #t)))))))))) + (getenv "CPLUS_INCLUDE_PATH")))))))))))) + +(define gcc-canadian-cross-objdump-snippet + ;; Fix 'libcc1/configure' error when cross-compiling GCC. Without that, + ;; 'libcc1/configure' wrongfully determines that '-rdynamic' support is + ;; missing because $gcc_cv_objdump is empty: + ;; + ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590 + ;; http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077 + #~(substitute* "libcc1/configure" + (("\\$gcc_cv_objdump -T") + "$OBJDUMP_FOR_TARGET -T"))) (define-public gcc-5 ;; Note: GCC >= 5 ships with .info files but 'make install' fails to install @@ -485,19 +492,7 @@ Go. It also includes runtime support libraries for these languages.") "gcc-fix-texi2pod.patch" "gcc-5-hurd.patch")) (modules '((guix build utils))) - (snippet - ;; Fix 'libcc1/configure' error when cross-compiling GCC. - ;; Without that, 'libcc1/configure' wrongfully determines that - ;; '-rdynamic' support is missing because $gcc_cv_objdump is - ;; empty: - ;; - ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590 - ;; http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077 - '(begin - (substitute* "libcc1/configure" - (("\\$gcc_cv_objdump -T") - "$OBJDUMP_FOR_TARGET -T")) - #t)))) + (snippet gcc-canadian-cross-objdump-snippet))) (inputs `(;; GCC5 needs <isl/band.h> which is removed in later versions. ("isl" ,isl-0.18) @@ -565,7 +560,9 @@ It also includes runtime support libraries for these languages."))) "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k")) (patches (search-patches "gcc-8-strmov-store-file-names.patch" "gcc-5.0-libvtv-runpath.patch" - "gcc-8-sort-libtool-find-output.patch")))))) + "gcc-8-sort-libtool-find-output.patch")) + (modules '((guix build utils))) + (snippet gcc-canadian-cross-objdump-snippet))))) (define-public gcc-9 (package @@ -580,7 +577,9 @@ It also includes runtime support libraries for these languages."))) "13l3p6g2krilaawbapmn9zmmrh3zdwc36mfr3msxfy038hps6pf9")) (patches (search-patches "gcc-9-strmov-store-file-names.patch" "gcc-9-asan-fix-limits-include.patch" - "gcc-5.0-libvtv-runpath.patch")))))) + "gcc-5.0-libvtv-runpath.patch")) + (modules '((guix build utils))) + (snippet gcc-canadian-cross-objdump-snippet))))) (define-public gcc-10 (package @@ -594,7 +593,9 @@ It also includes runtime support libraries for these languages."))) (base32 "0i6378ig6h397zkhd7m4ccwjx5alvzrf2hm27p1pzwjhlv0h9x34")) (patches (search-patches "gcc-9-strmov-store-file-names.patch" - "gcc-5.0-libvtv-runpath.patch")))))) + "gcc-5.0-libvtv-runpath.patch")) + (modules '((guix build utils))) + (snippet gcc-canadian-cross-objdump-snippet))))) (define-public gcc-11 (package @@ -608,11 +609,13 @@ It also includes runtime support libraries for these languages."))) (base32 "12zs6vd2rapp42x154m479hg3h3lsafn3xhg06hp5hsldd9xr3nh")) (patches (search-patches "gcc-9-strmov-store-file-names.patch" - "gcc-5.0-libvtv-runpath.patch")))))) + "gcc-5.0-libvtv-runpath.patch")) + (modules '((guix build utils))) + (snippet gcc-canadian-cross-objdump-snippet))))) ;; Note: When changing the default gcc version, update ;; the gcc-toolchain-* definitions. -(define-public gcc gcc-7) +(define-public gcc gcc-10) (define-public (make-libstdc++ gcc) "Return a libstdc++ package based on GCC. The primary use case is when @@ -623,25 +626,16 @@ using compilers other than GCC." (arguments `(#:out-of-source? #t #:phases - ;; TODO: Use the target-powerpc arm for everyone. - ,(if (target-powerpc?) - `(modify-phases %standard-phases - ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64. - (add-before 'chdir 'fix-rs6000-libdir - (lambda _ - (when (file-exists? "gcc/config/rs6000") - (substitute* (find-files "gcc/config/rs6000") - (("/lib64") "/lib"))) - #t)) - (add-before 'configure 'chdir - (lambda _ - (chdir "libstdc++-v3") - #t))) - `(alist-cons-before 'configure 'chdir - (lambda _ - (chdir "libstdc++-v3") - #t) - %standard-phases)) + (modify-phases %standard-phases + ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64. + (add-before 'chdir 'fix-rs6000-libdir + (lambda _ + (when (file-exists? "gcc/config/rs6000") + (substitute* (find-files "gcc/config/rs6000") + (("/lib64") "/lib"))))) + (add-before 'configure 'chdir + (lambda _ + (chdir "libstdc++-v3")))) #:configure-flags `("--disable-libstdcxx-pch" ,(string-append "--with-gxx-include-dir=" @@ -692,16 +686,14 @@ using compilers other than GCC." (modify-phases %standard-phases (add-before 'configure 'chdir (lambda _ - (chdir "libiberty") - #t)) + (chdir "libiberty"))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (lib (string-append out "/lib/")) (include (string-append out "/include/"))) (install-file "libiberty.a" lib) - (install-file "../include/libiberty.h" include)) - #t))))) + (install-file "../include/libiberty.h" include))))))) (inputs '()) (outputs '("out")) (native-inputs '()) @@ -741,10 +733,10 @@ as the 'native-search-paths' field." `(modify-phases ,phases (add-after 'install 'remove-broken-or-conflicting-files (lambda* (#:key outputs #:allow-other-keys) - (for-each delete-file - (find-files (string-append (assoc-ref outputs "out") "/bin") - ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)")) - #t)))))))) + (for-each + delete-file + (find-files (string-append (assoc-ref outputs "out") "/bin") + ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$")))))))))) (define* (custom-gcc-gccgo gcc name languages #:optional @@ -796,12 +788,7 @@ as the 'native-search-paths' field." (define-public gfortran (hidden-package - (custom-gcc (package - (inherit gcc) - ;; XXX: Remove LIBSTDC++-HEADERS from the inputs just to - ;; avoid a rebuild of all the GFORTRAN dependents. - ;; TODO: Remove this hack on the next rebuild cycle. - (inputs (alist-delete "libstdc++" (package-inputs gcc)))) + (custom-gcc gcc "gfortran" '("fortran") %generic-search-paths))) @@ -839,8 +826,7 @@ as the 'native-search-paths' field." (lambda* (#:key outputs #:allow-other-keys) (for-each delete-file (find-files (string-append (assoc-ref outputs "out") "/bin") - ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)")) - #t)))))) + ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)")))))))) (synopsis "GCC library generating machine code on-the-fly at runtime") (description "This package is part of the GNU Compiler Collection and provides an @@ -946,7 +932,7 @@ provides the GNU compiler for the Go programming language.")) (custom-gcc gcc-10 "gcc-objc" '("objc") %objc-search-paths)) -(define-public gcc-objc gcc-objc-7) +(define-public gcc-objc gcc-objc-10) (define %objc++-search-paths (list (search-path-specification @@ -988,7 +974,7 @@ provides the GNU compiler for the Go programming language.")) (custom-gcc gcc-10 "gcc-objc++" '("obj-c++") %objc++-search-paths)) -(define-public gcc-objc++ gcc-objc++-7) +(define-public gcc-objc++ gcc-objc++-10) (define (make-libstdc++-doc gcc) "Return a package with the libstdc++ documentation for GCC." @@ -1013,8 +999,7 @@ provides the GNU compiler for the Go programming language.")) #:phases (modify-phases %standard-phases (add-before 'configure 'chdir (lambda _ - (chdir "libstdc++-v3") - #t)) + (chdir "libstdc++-v3"))) (add-before 'configure 'set-xsl-directory (lambda* (#:key inputs #:allow-other-keys) (let ((docbook (assoc-ref inputs "docbook-xsl"))) @@ -1023,8 +1008,7 @@ provides the GNU compiler for the Go programming language.")) (("@XSL_STYLE_DIR@") (string-append docbook "/xml/xsl/" - (strip-store-file-name docbook)))) - #t))) + (strip-store-file-name docbook))))))) (replace 'build (lambda _ ;; XXX: There's also a 'doc-info' target, but it @@ -1051,7 +1035,7 @@ provides the GNU compiler for the Go programming language.")) (define-public isl (package (name "isl") - (version "0.22.1") + (version "0.23") (source (origin (method url-fetch) (uri (list (string-append @@ -1062,7 +1046,7 @@ provides the GNU compiler for the Go programming language.")) name "-" version ".tar.bz2"))) (sha256 (base32 - "1kf54jib0nind1pvakblnfhimmwzm0y1llz8470ag0di5vwqwrhs")))) + "0k91zck10zxs9sk3yrbb92y1j3w981w3fbwkfwd7kl779b0j52f5")))) (build-system gnu-build-system) (outputs '("out" "static")) (arguments @@ -1081,8 +1065,7 @@ provides the GNU compiler for the Go programming language.")) ;; libtool looks for it in the usual locations. (substitute* (string-append out "/lib/libisl.la") (("^old_library=.*") - "old_library=''\n")) - #t)))))) + "old_library=''\n")))))))) (inputs `(("gmp" ,gmp))) (home-page "http://isl.gforge.inria.fr/") (synopsis @@ -1208,8 +1191,7 @@ effective code.") (copy-file file (string-append html "/" file))) - (find-files "." "\\.html$")) - #t)))))) + (find-files "." "\\.html$")))))))) (synopsis "Reference manual for the C programming language") (description "This is a reference manual for the C programming language, as |