diff options
Diffstat (limited to 'gnu/packages/gcc.scm')
| -rw-r--r-- | gnu/packages/gcc.scm | 398 | 
1 files changed, 208 insertions, 190 deletions
| diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 48d8780212..345fa4c745 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -1,7 +1,7 @@  ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>  ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org> -;;; Copyright © 2014, 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2014, 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>  ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>  ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>  ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com> @@ -139,220 +139,221 @@ where the OS part is overloaded to denote a specific ABI---into GCC                       (gcc-configure-flags-for-triplet triplet))                     (maybe-target-tools)))))) -    (package -      (name "gcc") -      (version "4.7.4") -      (source (origin -               (method url-fetch) -               (uri (string-append "mirror://gnu/gcc/gcc-" -                                   version "/gcc-" version ".tar.bz2")) -               (sha256 -                (base32 -                 "10k2k71kxgay283ylbbhhs51cl55zn2q38vj5pk4k950qdnirrlj")) -               (patches (search-patches "gcc-4-compile-with-gcc-5.patch" -                                        "gcc-fix-texi2pod.patch")))) -      (build-system gnu-build-system) +    (hidden-package +     (package +       (name "gcc") +       (version "4.7.4") +       (source (origin +                 (method url-fetch) +                 (uri (string-append "mirror://gnu/gcc/gcc-" +                                     version "/gcc-" version ".tar.bz2")) +                 (sha256 +                  (base32 +                   "10k2k71kxgay283ylbbhhs51cl55zn2q38vj5pk4k950qdnirrlj")) +                 (patches (search-patches "gcc-4-compile-with-gcc-5.patch" +                                          "gcc-fix-texi2pod.patch")))) +       (build-system gnu-build-system) -      ;; Separate out the run-time support libraries because all the -      ;; dynamic-linked objects depend on it. -      (outputs '("out"                    ;commands, etc. (60+ MiB) -                 "lib"                    ;libgcc_s, libgomp, etc. (15+ MiB) -                 "debug"))                ;debug symbols of run-time libraries +       ;; Separate out the run-time support libraries because all the +       ;; dynamic-linked objects depend on it. +       (outputs '("out"                    ;commands, etc. (60+ MiB) +                  "lib"                    ;libgcc_s, libgomp, etc. (15+ MiB) +                  "debug"))                ;debug symbols of run-time libraries -      (inputs `(("gmp" ,gmp) -                ("mpfr" ,mpfr) -                ("mpc" ,mpc) -                ("libelf" ,libelf) -                ("zlib" ,zlib))) +       (inputs `(("gmp" ,gmp) +                 ("mpfr" ,mpfr) +                 ("mpc" ,mpc) +                 ("libelf" ,libelf) +                 ("zlib" ,zlib))) -      ;; GCC < 5 is one of the few packages that doesn't ship .info files. -      ;; Newer texinfos fail to build the manual, so we use an older one. -      (native-inputs `(("perl" ,perl)   ;for manpages -                       ("texinfo" ,texinfo-5))) +       ;; GCC < 5 is one of the few packages that doesn't ship .info files. +       ;; Newer texinfos fail to build the manual, so we use an older one. +       (native-inputs `(("perl" ,perl)   ;for manpages +                        ("texinfo" ,texinfo-5))) -      (arguments -       `(#:out-of-source? #t -         #:configure-flags ,(configure-flags) -         #:make-flags -         ;; None of the flags below are needed when doing a Canadian cross. -         ;; TODO: Simplify this. -         ,(if (%current-target-system) -              (if stripped? -                  ''("CFLAGS=-g0 -O2") -                  ''()) -              `(let* ((libc        (assoc-ref %build-inputs "libc")) -                      (libc-native (or (assoc-ref %build-inputs "libc-native") -                                       libc))) -                 `(,@(if libc -                         (list (string-append "LDFLAGS_FOR_TARGET=" -                                              "-B" libc "/lib " -                                              "-Wl,-dynamic-linker " -                                              "-Wl," libc -                                              ,(glibc-dynamic-linker))) -                         '()) +       (arguments +        `(#:out-of-source? #t +          #:configure-flags ,(configure-flags) +          #:make-flags +          ;; None of the flags below are needed when doing a Canadian cross. +          ;; TODO: Simplify this. +          ,(if (%current-target-system) +               (if stripped? +                   ''("CFLAGS=-g0 -O2") +                   ''()) +               `(let* ((libc        (assoc-ref %build-inputs "libc")) +                       (libc-native (or (assoc-ref %build-inputs "libc-native") +                                        libc))) +                  `(,@(if libc +                          (list (string-append "LDFLAGS_FOR_TARGET=" +                                               "-B" libc "/lib " +                                               "-Wl,-dynamic-linker " +                                               "-Wl," libc +                                               ,(glibc-dynamic-linker))) +                          '()) -                   ;; Native programs like 'genhooks' also need that right. -                   ,(string-append "LDFLAGS=" -                                   "-Wl,-rpath=" libc-native "/lib " -                                   "-Wl,-dynamic-linker " -                                   "-Wl," libc-native ,(glibc-dynamic-linker)) -                   ,(string-append "BOOT_CFLAGS=-O2 " -                                   ,(if stripped? "-g0" "-g"))))) +                    ;; Native programs like 'genhooks' also need that right. +                    ,(string-append "LDFLAGS=" +                                    "-Wl,-rpath=" libc-native "/lib " +                                    "-Wl,-dynamic-linker " +                                    "-Wl," libc-native ,(glibc-dynamic-linker)) +                    ,(string-append "BOOT_CFLAGS=-O2 " +                                    ,(if stripped? "-g0" "-g"))))) -         #:tests? #f +          #:tests? #f -         #:phases -         (modify-phases %standard-phases -           (add-before 'configure 'pre-configure -             (lambda* (#:key inputs outputs #:allow-other-keys) -               (let ((libdir ,(libdir)) -                     (libc   (assoc-ref inputs "libc"))) -                 (when libc -                       ;; The following is not performed for `--without-headers' -                       ;; cross-compiler builds. +          #:phases +          (modify-phases %standard-phases +            (add-before 'configure 'pre-configure +              (lambda* (#:key inputs outputs #:allow-other-keys) +                (let ((libdir ,(libdir)) +                      (libc   (assoc-ref inputs "libc"))) +                  (when libc +                    ;; The following is not performed for `--without-headers' +                    ;; cross-compiler builds. -                       ;; Join multi-line definitions of GLIBC_DYNAMIC_LINKER* into a -                       ;; single line, to allow the next step to work properly. -                       (for-each -                        (lambda (x) -                          (substitute* (find-files "gcc/config" -                                                   "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$") -                            (("(#define (GLIBC|GNU_USER)_DYNAMIC_LINKER.*)\\\\\n$" _ line) -                             line))) -                        '(1 2 3)) - -                       ;; Fix the dynamic linker's file name. +                    ;; Join multi-line definitions of GLIBC_DYNAMIC_LINKER* into a +                    ;; single line, to allow the next step to work properly. +                    (for-each +                     (lambda (x)                         (substitute* (find-files "gcc/config"                                                  "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$") -                         (("#define (GLIBC|GNU_USER)_DYNAMIC_LINKER([^ \t]*).*$" -                           _ gnu-user suffix) -                          (format #f "#define ~a_DYNAMIC_LINKER~a \"~a\"~%" -                                  gnu-user suffix -                                  (string-append libc ,(glibc-dynamic-linker))))) +                         (("(#define (GLIBC|GNU_USER)_DYNAMIC_LINKER.*)\\\\\n$" _ line) +                          line))) +                     '(1 2 3)) -                       ;; Tell where to find libstdc++, libc, and `?crt*.o', except -                       ;; `crt{begin,end}.o', which come with GCC. -                       (substitute* (find-files "gcc/config" -                                                "^gnu-user.*\\.h$") -                         (("#define GNU_USER_TARGET_LIB_SPEC (.*)$" _ suffix) -                          ;; Help libgcc_s.so be found (see also below.)  Always use -                          ;; '-lgcc_s' so that libgcc_s.so is always found by those -                          ;; programs that use 'pthread_cancel' (glibc dlopens -                          ;; libgcc_s.so when pthread_cancel support is needed, but -                          ;; having it in the application's RUNPATH isn't enough; see -                          ;; <http://sourceware.org/ml/libc-help/2013-11/msg00023.html>.) -                          ;; -                          ;; NOTE: The '-lgcc_s' added below needs to be removed in a -                          ;; later phase of %gcc-static.  If you change the string -                          ;; below, make sure to update the relevant code in -                          ;; %gcc-static package as needed. -                          (format #f "#define GNU_USER_TARGET_LIB_SPEC \ +                    ;; Fix the dynamic linker's file name. +                    (substitute* (find-files "gcc/config" +                                             "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$") +                      (("#define (GLIBC|GNU_USER)_DYNAMIC_LINKER([^ \t]*).*$" +                        _ gnu-user suffix) +                       (format #f "#define ~a_DYNAMIC_LINKER~a \"~a\"~%" +                               gnu-user suffix +                               (string-append libc ,(glibc-dynamic-linker))))) + +                    ;; Tell where to find libstdc++, libc, and `?crt*.o', except +                    ;; `crt{begin,end}.o', which come with GCC. +                    (substitute* (find-files "gcc/config" +                                             "^gnu-user.*\\.h$") +                      (("#define GNU_USER_TARGET_LIB_SPEC (.*)$" _ suffix) +                       ;; Help libgcc_s.so be found (see also below.)  Always use +                       ;; '-lgcc_s' so that libgcc_s.so is always found by those +                       ;; programs that use 'pthread_cancel' (glibc dlopens +                       ;; libgcc_s.so when pthread_cancel support is needed, but +                       ;; having it in the application's RUNPATH isn't enough; see +                       ;; <http://sourceware.org/ml/libc-help/2013-11/msg00023.html>.) +                       ;; +                       ;; NOTE: The '-lgcc_s' added below needs to be removed in a +                       ;; later phase of %gcc-static.  If you change the string +                       ;; below, make sure to update the relevant code in +                       ;; %gcc-static package as needed. +                       (format #f "#define GNU_USER_TARGET_LIB_SPEC \  \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a" -                                  libc libc libdir suffix)) -                         (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line) -                          (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\" +                               libc libc libdir suffix)) +                      (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line) +                       (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"  #define STANDARD_STARTFILE_PREFIX_2 \"\"  ~a" -                                  libc line))) +                               libc line))) -                       ;; The rs6000 (a.k.a. powerpc) config in GCC does not use -                       ;; GNU_USER_* defines.  Do the above for this case. -                       (substitute* -                           "gcc/config/rs6000/sysv4.h" -                         (("#define LIB_LINUX_SPEC (.*)$" _ suffix) -                          (format #f "#define LIB_LINUX_SPEC \ +                    ;; The rs6000 (a.k.a. powerpc) config in GCC does not use +                    ;; GNU_USER_* defines.  Do the above for this case. +                    (substitute* +                        "gcc/config/rs6000/sysv4.h" +                      (("#define LIB_LINUX_SPEC (.*)$" _ suffix) +                       (format #f "#define LIB_LINUX_SPEC \  \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a" -                                  libc libc libdir suffix)) -                         (("#define	STARTFILE_LINUX_SPEC.*$" line) -                          (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\" +                               libc libc libdir suffix)) +                      (("#define	STARTFILE_LINUX_SPEC.*$" line) +                       (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"  #define STANDARD_STARTFILE_PREFIX_2 \"\"  ~a" -                                  libc line)))) +                               libc line)))) -                 ;; Don't retain a dependency on the build-time sed. -                 (substitute* "fixincludes/fixincl.x" -                   (("static char const sed_cmd_z\\[\\] =.*;") -                    "static char const sed_cmd_z[] = \"sed\";")) +                  ;; Don't retain a dependency on the build-time sed. +                  (substitute* "fixincludes/fixincl.x" +                    (("static char const sed_cmd_z\\[\\] =.*;") +                     "static char const sed_cmd_z[] = \"sed\";")) -                 ;; Aarch64 support didn't land in GCC until the 4.8 series. -                 (when (file-exists? "gcc/config/aarch64") -                       ;; Force Aarch64 libdir to be /lib and not /lib64 -                       (substitute* "gcc/config/aarch64/t-aarch64-linux" -                         (("lib64") "lib"))) +                  ;; Aarch64 support didn't land in GCC until the 4.8 series. +                  (when (file-exists? "gcc/config/aarch64") +                    ;; Force Aarch64 libdir to be /lib and not /lib64 +                    (substitute* "gcc/config/aarch64/t-aarch64-linux" +                      (("lib64") "lib"))) -                 (when (file-exists? "libbacktrace") -                       ;; GCC 4.8+ comes with libbacktrace.  By default it builds -                       ;; with -Werror, which fails with a -Wcast-qual error in glibc -                       ;; 2.21's stdlib-bsearch.h.  Remove -Werror. -                       (substitute* "libbacktrace/configure" -                         (("WARN_FLAGS=(.*)-Werror" _ flags) -                          (string-append "WARN_FLAGS=" flags))) +                  (when (file-exists? "libbacktrace") +                    ;; GCC 4.8+ comes with libbacktrace.  By default it builds +                    ;; with -Werror, which fails with a -Wcast-qual error in glibc +                    ;; 2.21's stdlib-bsearch.h.  Remove -Werror. +                    (substitute* "libbacktrace/configure" +                      (("WARN_FLAGS=(.*)-Werror" _ flags) +                       (string-append "WARN_FLAGS=" flags))) -                       (when (file-exists? "libsanitizer/libbacktrace") -                             ;; Same in libsanitizer's bundled copy (!) found in 4.9+. -                             (substitute* "libsanitizer/libbacktrace/Makefile.in" -                               (("-Werror") -                                "")))) +                    (when (file-exists? "libsanitizer/libbacktrace") +                      ;; Same in libsanitizer's bundled copy (!) found in 4.9+. +                      (substitute* "libsanitizer/libbacktrace/Makefile.in" +                        (("-Werror") +                         "")))) -                 ;; Add a RUNPATH to libstdc++.so so that it finds libgcc_s. -                 ;; See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354> -                 ;; and <http://bugs.gnu.org/20358>. -                 (substitute* "libstdc++-v3/src/Makefile.in" -                   (("^OPT_LDFLAGS = ") -                    "OPT_LDFLAGS = -Wl,-rpath=$(libdir) ")) +                  ;; Add a RUNPATH to libstdc++.so so that it finds libgcc_s. +                  ;; See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354> +                  ;; and <http://bugs.gnu.org/20358>. +                  (substitute* "libstdc++-v3/src/Makefile.in" +                    (("^OPT_LDFLAGS = ") +                     "OPT_LDFLAGS = -Wl,-rpath=$(libdir) ")) -                 ;; Move libstdc++*-gdb.py to the "lib" output to avoid a -                 ;; circularity between "out" and "lib".  (Note: -                 ;; --with-python-dir is useless because it imposes $(prefix) as -                 ;; the parent directory.) -                 (substitute* "libstdc++-v3/python/Makefile.in" -                   (("pythondir = .*$") -                    (string-append "pythondir = " libdir "/share" -                                   "/gcc-$(gcc_version)/python\n"))) +                  ;; Move libstdc++*-gdb.py to the "lib" output to avoid a +                  ;; circularity between "out" and "lib".  (Note: +                  ;; --with-python-dir is useless because it imposes $(prefix) as +                  ;; the parent directory.) +                  (substitute* "libstdc++-v3/python/Makefile.in" +                    (("pythondir = .*$") +                     (string-append "pythondir = " libdir "/share" +                                    "/gcc-$(gcc_version)/python\n"))) -                 ;; Avoid another circularity between the outputs: this #define -                 ;; ends up in auto-host.h in the "lib" output, referring to -                 ;; "out".  (This variable is used to augment cpp's search path, -                 ;; but there's nothing useful to look for here.) -                 (substitute* "gcc/config.in" -                   (("PREFIX_INCLUDE_DIR") -                    "PREFIX_INCLUDE_DIR_isnt_necessary_here")) -                 #t))) +                  ;; Avoid another circularity between the outputs: this #define +                  ;; ends up in auto-host.h in the "lib" output, referring to +                  ;; "out".  (This variable is used to augment cpp's search path, +                  ;; but there's nothing useful to look for here.) +                  (substitute* "gcc/config.in" +                    (("PREFIX_INCLUDE_DIR") +                     "PREFIX_INCLUDE_DIR_isnt_necessary_here")) +                  #t))) -           (add-after 'configure 'post-configure -             (lambda _ -               ;; Don't store configure flags, to avoid retaining references to -               ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'. -               (substitute* "Makefile" -                 (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest) -                  "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")) -               #t))))) +            (add-after 'configure 'post-configure +              (lambda _ +                ;; Don't store configure flags, to avoid retaining references to +                ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'. +                (substitute* "Makefile" +                  (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest) +                   "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")) +                #t))))) -      (native-search-paths -       ;; Use the language-specific variables rather than 'CPATH' because they -       ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. -       ;; The intent is to allow headers that are in the search path to be -       ;; treated as "system headers" (headers exempt from warnings) just like -       ;; the typical /usr/include headers on an FHS system. -       (list (search-path-specification -              (variable "C_INCLUDE_PATH") -              (files '("include"))) -             (search-path-specification -              (variable "CPLUS_INCLUDE_PATH") -              (files '("include"))) -             (search-path-specification -              (variable "LIBRARY_PATH") -              (files '("lib" "lib64"))))) +       (native-search-paths +        ;; Use the language-specific variables rather than 'CPATH' because they +        ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. +        ;; The intent is to allow headers that are in the search path to be +        ;; treated as "system headers" (headers exempt from warnings) just like +        ;; the typical /usr/include headers on an FHS system. +        (list (search-path-specification +               (variable "C_INCLUDE_PATH") +               (files '("include"))) +              (search-path-specification +               (variable "CPLUS_INCLUDE_PATH") +               (files '("include"))) +              (search-path-specification +               (variable "LIBRARY_PATH") +               (files '("lib" "lib64"))))) -      (properties `((gcc-libc . ,(assoc-ref inputs "libc")))) -      (synopsis "GNU Compiler Collection") -      (description -       "GCC is the GNU Compiler Collection.  It provides compiler front-ends +       (properties `((gcc-libc . ,(assoc-ref inputs "libc")))) +       (synopsis "GNU Compiler Collection") +       (description +        "GCC is the GNU Compiler Collection.  It provides compiler front-ends  for several languages, including C, C++, Objective-C, Fortran, Java, Ada, and  Go.  It also includes runtime support libraries for these languages.") -      (license gpl3+) -      (supported-systems (delete "aarch64-linux" %supported-systems)) -      (home-page "https://gcc.gnu.org/")))) +       (license gpl3+) +       (supported-systems (delete "aarch64-linux" %supported-systems)) +       (home-page "https://gcc.gnu.org/")))))  (define-public gcc-4.8    (package (inherit gcc-4.7) @@ -519,6 +520,21 @@ It also includes runtime support libraries for these languages.")))                (patches (search-patches "gcc-8-strmov-store-file-names.patch"                                         "gcc-5.0-libvtv-runpath.patch")))))) +(define-public gcc-9 +  (package +   (inherit gcc-8) +   (version "9.1.0") +   (source (origin +            (method url-fetch) +            (uri (string-append "mirror://gnu/gcc/gcc-" +                                version "/gcc-" version ".tar.xz")) +            (sha256 +             (base32 +              "1817nc2bqdc251k0lpc51cimna7v68xjrnvqzvc50q3ax4s6i9kr")) +            (patches (search-patches "gcc-9-strmov-store-file-names.patch" +                                     "gcc-9-asan-fix-limits-include.patch" +                                     "gcc-5.0-libvtv-runpath.patch")))))) +  ;; Note: When changing the default gcc version, update  ;;       the gcc-toolchain-* definitions and the gfortran definition  ;;       accordingly. @@ -598,6 +614,7 @@ as the 'native-search-paths' field."                   (package-outputs gcc)                   (delete "lib" (package-outputs gcc))))      (native-search-paths search-paths) +    (properties (alist-delete 'hidden? (package-properties gcc)))      (arguments       (substitute-keyword-arguments `(#:modules ((guix build gnu-build-system)                                                  (guix build utils) @@ -831,14 +848,15 @@ as the 'native-search-paths' field."                               (let ((out (assoc-ref outputs "out")))                                 (invoke "make"                                         "doc-install-html" -                                       "doc-install-man"))))))))) - -(define-public libstdc++-doc-4.9 -  (make-libstdc++-doc gcc-4.9)) +                                       "doc-install-man"))))))) +    (properties (alist-delete 'hidden? (package-properties gcc)))))  (define-public libstdc++-doc-5    (make-libstdc++-doc gcc-5)) +(define-public libstdc++-doc-9 +  (make-libstdc++-doc gcc-9)) +  (define-public isl    (package      (name "isl") | 
