summaryrefslogtreecommitdiff
path: root/gnu/packages/gcc.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/gcc.scm')
-rw-r--r--gnu/packages/gcc.scm438
1 files changed, 228 insertions, 210 deletions
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index b9a9583410..c8e993c329 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)
-
- ;; 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)))
-
- ;; 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)))
- '())
-
- ;; 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
-
- #: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.
+ (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
+
+ (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)))
+
+ (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")))))
+
+ #: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.
+
+ ;; 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)))))
-
- ;; 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 \
+ (("(#define (GLIBC|GNU_USER)_DYNAMIC_LINKER.*)\\\\\n$" _ line)
+ line)))
+ '(1 2 3))
+
+ ;; 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)))
-
- ;; 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 \
+ 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 \
\"-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))))
-
- ;; 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")))
-
- (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")
- ""))))
-
- ;; 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")))
-
- ;; 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)))))
-
- (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
+ 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\";"))
+
+ ;; 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? "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) "))
+
+ ;; 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)))
+
+ (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")))))
+
+ (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")