2013-03-27 10:13:25 -04:00
|
|
|
;;; GNU Guix --- Functional package management for GNU
|
2014-03-10 18:58:40 -04:00
|
|
|
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
2013-03-27 10:13:25 -04:00
|
|
|
;;;
|
|
|
|
;;; This file is part of GNU Guix.
|
|
|
|
;;;
|
|
|
|
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
|
|
|
;;; under the terms of the GNU General Public License as published by
|
|
|
|
;;; the Free Software Foundation; either version 3 of the License, or (at
|
|
|
|
;;; your option) any later version.
|
|
|
|
;;;
|
|
|
|
;;; GNU Guix is distributed in the hope that it will be useful, but
|
|
|
|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;;; GNU General Public License for more details.
|
|
|
|
;;;
|
|
|
|
;;; You should have received a copy of the GNU General Public License
|
|
|
|
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
(define-module (gnu packages gcc)
|
2013-04-20 11:47:59 -04:00
|
|
|
#:use-module ((guix licenses)
|
|
|
|
#:select (gpl3+ gpl2+ lgpl2.1+ lgpl2.0+))
|
2013-03-27 10:13:25 -04:00
|
|
|
#:use-module (gnu packages)
|
|
|
|
#:use-module (gnu packages bootstrap)
|
|
|
|
#:use-module (gnu packages compression)
|
|
|
|
#:use-module (gnu packages multiprecision)
|
2013-07-06 12:08:29 -04:00
|
|
|
#:use-module (gnu packages texinfo)
|
2013-12-15 17:27:56 -05:00
|
|
|
#:use-module (gnu packages elf)
|
2013-03-27 10:13:25 -04:00
|
|
|
#:use-module (guix packages)
|
|
|
|
#:use-module (guix download)
|
2013-06-26 17:02:49 -04:00
|
|
|
#:use-module (guix build-system gnu)
|
2013-11-01 16:34:24 -04:00
|
|
|
#:use-module (guix utils)
|
2013-06-26 17:02:49 -04:00
|
|
|
#:use-module (ice-9 regex))
|
2013-03-27 10:13:25 -04:00
|
|
|
|
2013-03-27 10:37:27 -04:00
|
|
|
(define %gcc-infrastructure
|
|
|
|
;; Base URL for GCC's infrastructure.
|
|
|
|
"ftp://gcc.gnu.org/pub/gcc/infrastructure/")
|
|
|
|
|
2013-06-26 17:02:49 -04:00
|
|
|
(define-public (gcc-configure-flags-for-triplet target)
|
|
|
|
"Return a list of additional GCC `configure' flags for TARGET, a GNU triplet.
|
|
|
|
|
|
|
|
The purpose of this procedure is to translate extended GNU triplets---e.g.,
|
|
|
|
where the OS part is overloaded to denote a specific ABI---into GCC
|
|
|
|
`configure' options. We take extended GNU triplets that glibc recognizes."
|
|
|
|
(cond ((string-match "^mips64el.*gnuabin?64$" target)
|
|
|
|
;; Triplets recognized by glibc as denoting the N64 ABI; see
|
|
|
|
;; ports/sysdeps/mips/preconfigure.
|
|
|
|
'("--with-abi=64"))
|
|
|
|
(else
|
|
|
|
;; TODO: Add `armel.*gnueabi', `hf', etc.
|
|
|
|
'())))
|
|
|
|
|
2013-03-27 10:13:25 -04:00
|
|
|
(define-public gcc-4.7
|
2013-06-26 10:51:39 -04:00
|
|
|
(let* ((stripped? #t) ; TODO: make this a parameter
|
|
|
|
(maybe-target-tools
|
|
|
|
(lambda ()
|
|
|
|
;; Return the `_FOR_TARGET' variables that are needed when
|
|
|
|
;; cross-compiling GCC.
|
|
|
|
(let ((target (%current-target-system)))
|
|
|
|
(if target
|
|
|
|
(map (lambda (var tool)
|
|
|
|
(string-append (string-append var "_FOR_TARGET")
|
|
|
|
"=" target "-" tool))
|
|
|
|
'("CC" "CXX" "LD" "AR" "NM" "RANLIB" "STRIP")
|
|
|
|
'("gcc" "g++" "ld" "ar" "nm" "ranlib" "strip"))
|
|
|
|
'()))))
|
|
|
|
(configure-flags
|
|
|
|
(lambda ()
|
|
|
|
;; This is terrible. Since we have two levels of quasiquotation,
|
|
|
|
;; we have to do this convoluted thing just so we can insert the
|
|
|
|
;; contents of (maybe-target-tools).
|
|
|
|
(list 'quasiquote
|
|
|
|
(append
|
|
|
|
'("--enable-plugin"
|
|
|
|
"--enable-languages=c,c++"
|
|
|
|
"--disable-multilib"
|
|
|
|
|
2013-11-14 18:10:10 -05:00
|
|
|
;; No pre-compiled libstdc++ headers, to save space.
|
|
|
|
"--disable-libstdcxx-pch"
|
|
|
|
|
2013-06-26 10:51:39 -04:00
|
|
|
"--with-local-prefix=/no-gcc-local-prefix"
|
|
|
|
|
|
|
|
,(let ((libc (assoc-ref %build-inputs "libc")))
|
|
|
|
(if libc
|
|
|
|
(string-append "--with-native-system-header-dir=" libc
|
|
|
|
"/include")
|
|
|
|
"--without-headers")))
|
|
|
|
|
2013-06-26 17:02:49 -04:00
|
|
|
;; When cross-compiling GCC, pass the right options for the
|
|
|
|
;; target triplet.
|
|
|
|
(or (and=> (%current-target-system)
|
|
|
|
gcc-configure-flags-for-triplet)
|
|
|
|
'())
|
|
|
|
|
2013-06-26 10:51:39 -04:00
|
|
|
(maybe-target-tools))))))
|
2013-03-27 10:13:25 -04:00
|
|
|
(package
|
2013-06-26 10:51:39 -04:00
|
|
|
(name "gcc")
|
|
|
|
(version "4.7.3")
|
|
|
|
(source (origin
|
|
|
|
(method url-fetch)
|
|
|
|
(uri (string-append "mirror://gnu/gcc/gcc-"
|
|
|
|
version "/gcc-" version ".tar.bz2"))
|
|
|
|
(sha256
|
|
|
|
(base32
|
|
|
|
"1hx9h64ivarlzi4hxvq42as5m9vlr5cyzaaq4gzj4i619zmkfz1g"))))
|
|
|
|
(build-system gnu-build-system)
|
|
|
|
(inputs `(("gmp" ,gmp)
|
|
|
|
("mpfr" ,mpfr)
|
|
|
|
("mpc" ,mpc)
|
|
|
|
("isl" ,isl)
|
|
|
|
("cloog" ,cloog)
|
|
|
|
("libelf" ,libelf)
|
|
|
|
("zlib" ,zlib)))
|
2013-07-06 12:08:29 -04:00
|
|
|
|
|
|
|
;; GCC is one of the few packages that doesn't ship .info files.
|
|
|
|
(native-inputs `(("texinfo" ,texinfo)))
|
|
|
|
|
2013-06-26 10:51:39 -04:00
|
|
|
(arguments
|
|
|
|
`(#:out-of-source? #t
|
|
|
|
#:strip-binaries? ,stripped?
|
|
|
|
#:configure-flags ,(configure-flags)
|
|
|
|
#:make-flags
|
2013-11-14 18:10:10 -05:00
|
|
|
(let* ((libc (assoc-ref %build-inputs "libc"))
|
|
|
|
(libc-native (or (assoc-ref %build-inputs "libc-native")
|
|
|
|
libc)))
|
2013-06-26 10:51:39 -04:00
|
|
|
`(,@(if libc
|
|
|
|
(list (string-append "LDFLAGS_FOR_TARGET="
|
|
|
|
"-B" libc "/lib "
|
|
|
|
"-Wl,-dynamic-linker "
|
|
|
|
"-Wl," libc
|
|
|
|
,(glibc-dynamic-linker)))
|
|
|
|
'())
|
2013-11-14 18:10:10 -05:00
|
|
|
|
|
|
|
;; 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))
|
2013-06-26 10:51:39 -04:00
|
|
|
,(string-append "BOOT_CFLAGS=-O2 "
|
|
|
|
,(if stripped? "-g0" "-g"))))
|
|
|
|
|
|
|
|
#:tests? #f
|
|
|
|
#:phases
|
|
|
|
(alist-cons-before
|
|
|
|
'configure 'pre-configure
|
|
|
|
(lambda* (#:key inputs outputs #:allow-other-keys)
|
|
|
|
(let ((out (assoc-ref outputs "out"))
|
|
|
|
(libc (assoc-ref inputs "libc")))
|
|
|
|
(when libc
|
|
|
|
;; The following is not performed for `--without-headers'
|
|
|
|
;; cross-compiler builds.
|
|
|
|
|
|
|
|
;; Fix the dynamic linker's file name.
|
|
|
|
(substitute* (find-files "gcc/config"
|
|
|
|
"^linux(64|-elf)?\\.h$")
|
|
|
|
(("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
|
|
|
|
(format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
|
|
|
|
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"
|
2013-11-14 18:10:10 -05:00
|
|
|
"^gnu-user.*\\.h$")
|
|
|
|
(("#define GNU_USER_TARGET_LIB_SPEC (.*)$" _ suffix)
|
2013-11-18 08:06:47 -05:00
|
|
|
;; 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>.)
|
2013-11-14 18:10:10 -05:00
|
|
|
(format #f "#define GNU_USER_TARGET_LIB_SPEC \
|
2013-11-18 08:06:47 -05:00
|
|
|
\"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib -lgcc_s}} \" ~a"
|
2013-06-26 10:51:39 -04:00
|
|
|
libc libc out out suffix))
|
2013-11-14 18:10:10 -05:00
|
|
|
(("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line)
|
2013-06-26 10:51:39 -04:00
|
|
|
(format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
|
2013-03-27 10:13:25 -04:00
|
|
|
#define STANDARD_STARTFILE_PREFIX_2 \"\"
|
2013-11-14 18:10:10 -05:00
|
|
|
~a"
|
2013-06-26 10:51:39 -04:00
|
|
|
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\";"))))
|
|
|
|
|
|
|
|
(alist-cons-after
|
|
|
|
'configure 'post-configure
|
|
|
|
(lambda _
|
|
|
|
;; Don't store configure flags, to avoid retaining references to
|
2014-03-10 18:58:40 -04:00
|
|
|
;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'.
|
2013-06-26 10:51:39 -04:00
|
|
|
(substitute* "Makefile"
|
|
|
|
(("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
|
|
|
|
"TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))
|
|
|
|
(alist-replace 'install
|
|
|
|
(lambda* (#:key outputs #:allow-other-keys)
|
|
|
|
(zero?
|
|
|
|
(system* "make"
|
|
|
|
,(if stripped?
|
|
|
|
"install-strip"
|
|
|
|
"install"))))
|
|
|
|
%standard-phases)))))
|
|
|
|
|
|
|
|
(native-search-paths
|
|
|
|
(list (search-path-specification
|
|
|
|
(variable "CPATH")
|
|
|
|
(directories '("include")))
|
|
|
|
(search-path-specification
|
|
|
|
(variable "LIBRARY_PATH")
|
|
|
|
(directories '("lib" "lib64")))))
|
|
|
|
|
|
|
|
(properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
|
|
|
|
(synopsis "GNU Compiler Collection")
|
|
|
|
(description
|
Synchronize package descriptions with the Womb.
* gnu/packages/algebra.scm,
gnu/packages/aspell.scm,
gnu/packages/autotools.scm,
gnu/packages/base.scm,
gnu/packages/bash.scm,
gnu/packages/bison.scm,
gnu/packages/cdrom.scm,
gnu/packages/cflow.scm,
gnu/packages/compression.scm,
gnu/packages/cpio.scm,
gnu/packages/cppi.scm,
gnu/packages/ddrescue.scm,
gnu/packages/dejagnu.scm,
gnu/packages/ed.scm,
gnu/packages/emacs.scm,
gnu/packages/fdisk.scm,
gnu/packages/freeipmi.scm,
gnu/packages/gawk.scm,
gnu/packages/gcal.scm,
gnu/packages/gcc.scm,
gnu/packages/gdb.scm,
gnu/packages/gdbm.scm,
gnu/packages/gettext.scm,
gnu/packages/ghostscript.scm,
gnu/packages/global.scm,
gnu/packages/gnunet.scm,
gnu/packages/gnupg.scm,
gnu/packages/gnutls.scm,
gnu/packages/gperf.scm,
gnu/packages/gprolog.scm,
gnu/packages/groff.scm,
gnu/packages/grub.scm,
gnu/packages/gsasl.scm,
gnu/packages/guile.scm,
gnu/packages/gv.scm,
gnu/packages/help2man.scm,
gnu/packages/idutils.scm,
gnu/packages/indent.scm,
gnu/packages/less.scm,
gnu/packages/libidn.scm,
gnu/packages/libsigsegv.scm,
gnu/packages/libunistring.scm,
gnu/packages/lightning.scm,
gnu/packages/linux.scm,
gnu/packages/lsh.scm,
gnu/packages/m4.scm,
gnu/packages/mail.scm,
gnu/packages/maths.scm,
gnu/packages/multiprecision.scm,
gnu/packages/nano.scm,
gnu/packages/ncurses.scm,
gnu/packages/nettle.scm,
gnu/packages/ocrad.scm,
gnu/packages/oggvorbis.scm,
gnu/packages/parted.scm,
gnu/packages/plotutils.scm,
gnu/packages/pth.scm,
gnu/packages/readline.scm,
gnu/packages/recutils.scm,
gnu/packages/rush.scm,
gnu/packages/scheme.scm,
gnu/packages/screen.scm,
gnu/packages/shishi.scm,
gnu/packages/smalltalk.scm,
gnu/packages/system.scm,
gnu/packages/texinfo.scm,
gnu/packages/time.scm,
gnu/packages/unrtf.scm,
gnu/packages/version-control.scm,
gnu/packages/wdiff.scm,
gnu/packages/wget.scm,
gnu/packages/which.scm,
gnu/packages/xnee.scm,
gnu/packages/zile.scm: Change value of the 'description' field to that
of the Womb.
2013-10-09 10:14:23 -04:00
|
|
|
"GCC is the GNU Compiler Collection. It provides compiler front-ends
|
|
|
|
for several languages, including C, C++, Objective-C, Fortran, Java, Ada, and
|
2013-12-01 16:33:23 -05:00
|
|
|
Go. It also includes runtime support libraries for these languages.")
|
2013-06-26 10:51:39 -04:00
|
|
|
(license gpl3+)
|
|
|
|
(home-page "http://gcc.gnu.org/"))))
|
2013-03-27 10:37:27 -04:00
|
|
|
|
2013-04-26 16:51:07 -04:00
|
|
|
(define-public gcc-4.8
|
|
|
|
(package (inherit gcc-4.7)
|
2013-10-28 12:44:26 -04:00
|
|
|
(version "4.8.2")
|
2013-04-26 16:51:07 -04:00
|
|
|
(source (origin
|
|
|
|
(method url-fetch)
|
|
|
|
(uri (string-append "mirror://gnu/gcc/gcc-"
|
|
|
|
version "/gcc-" version ".tar.bz2"))
|
|
|
|
(sha256
|
|
|
|
(base32
|
2013-10-28 12:44:26 -04:00
|
|
|
"1j6dwgby4g3p3lz7zkss32ghr45zpdidrg8xvazvn91lqxv25p09"))))))
|
2013-04-26 16:51:07 -04:00
|
|
|
|
2013-11-01 16:34:24 -04:00
|
|
|
(define (custom-gcc gcc name languages)
|
|
|
|
"Return a custom version of GCC that supports LANGUAGES."
|
|
|
|
(package (inherit gcc)
|
|
|
|
(name name)
|
|
|
|
(arguments
|
|
|
|
(substitute-keyword-arguments `(#:modules ((guix build gnu-build-system)
|
|
|
|
(guix build utils)
|
|
|
|
(ice-9 regex)
|
|
|
|
(srfi srfi-1)
|
|
|
|
(srfi srfi-26))
|
|
|
|
,@(package-arguments gcc))
|
|
|
|
((#:configure-flags flags)
|
|
|
|
`(cons (string-append "--enable-languages="
|
|
|
|
,(string-join languages ","))
|
|
|
|
(remove (cut string-match "--enable-languages.*" <>)
|
|
|
|
,flags)))))))
|
|
|
|
|
|
|
|
(define-public gfortran-4.8
|
|
|
|
(custom-gcc gcc-4.8 "gfortran" '("fortran")))
|
|
|
|
|
|
|
|
(define-public gccgo-4.8
|
|
|
|
(custom-gcc gcc-4.8 "gccgo" '("go")))
|
|
|
|
|
|
|
|
(define-public gcc-objc-4.8
|
|
|
|
(custom-gcc gcc-4.8 "gcc-objc" '("objc")))
|
|
|
|
|
|
|
|
(define-public gcc-objc++-4.8
|
|
|
|
(custom-gcc gcc-4.8 "gcc-objc++" '("obj-c++")))
|
|
|
|
|
2013-03-27 10:37:27 -04:00
|
|
|
(define-public isl
|
|
|
|
(package
|
|
|
|
(name "isl")
|
|
|
|
(version "0.11.1")
|
|
|
|
(source (origin
|
|
|
|
(method url-fetch)
|
|
|
|
(uri (list (string-append
|
2013-09-10 13:05:43 -04:00
|
|
|
"http://isl.gforge.inria.fr/isl-"
|
2013-03-27 10:37:27 -04:00
|
|
|
version
|
|
|
|
".tar.bz2")
|
|
|
|
(string-append %gcc-infrastructure
|
|
|
|
name "-" version ".tar.gz")))
|
|
|
|
(sha256
|
|
|
|
(base32
|
|
|
|
"13d9cqa5rzhbjq0xf0b2dyxag7pqa72xj9dhsa03m8ccr1a4npq9"))))
|
|
|
|
(build-system gnu-build-system)
|
|
|
|
(inputs `(("gmp" ,gmp)))
|
2013-09-10 13:05:43 -04:00
|
|
|
(home-page "http://isl.gforge.inria.fr/")
|
2013-03-27 10:37:27 -04:00
|
|
|
(synopsis
|
|
|
|
"A library for manipulating sets and relations of integer points bounded
|
|
|
|
by linear constraints")
|
|
|
|
(description
|
|
|
|
"isl is a library for manipulating sets and relations of integer points
|
|
|
|
bounded by linear constraints. Supported operations on sets include
|
|
|
|
intersection, union, set difference, emptiness check, convex hull, (integer)
|
|
|
|
affine hull, integer projection, computing the lexicographic minimum using
|
|
|
|
parametric integer programming, coalescing and parametric vertex
|
|
|
|
enumeration. It also includes an ILP solver based on generalized basis
|
|
|
|
reduction, transitive closures on maps (which may encode infinite graphs),
|
|
|
|
dependence analysis and bounds on piecewise step-polynomials.")
|
|
|
|
(license lgpl2.1+)))
|
|
|
|
|
|
|
|
(define-public cloog
|
|
|
|
(package
|
|
|
|
(name "cloog")
|
|
|
|
(version "0.18.0")
|
|
|
|
(source
|
|
|
|
(origin
|
|
|
|
(method url-fetch)
|
|
|
|
(uri (list (string-append
|
|
|
|
"http://www.bastoul.net/cloog/pages/download/count.php3?url=cloog-"
|
|
|
|
version
|
|
|
|
".tar.gz")
|
|
|
|
(string-append %gcc-infrastructure
|
|
|
|
name "-" version ".tar.gz")))
|
|
|
|
(sha256
|
|
|
|
(base32
|
|
|
|
"0a12rwfwp22zd0nlld0xyql11cj390rrq1prw35yjsw8wzfshjhw"))
|
|
|
|
(file-name (string-append name "-" version ".tar.gz"))))
|
|
|
|
(build-system gnu-build-system)
|
|
|
|
(inputs `(("gmp" ,gmp)
|
|
|
|
("isl" ,isl)))
|
|
|
|
(arguments '(#:configure-flags '("--with-isl=system")))
|
|
|
|
(home-page "http://www.cloog.org/")
|
|
|
|
(synopsis "A library to generate code for scanning Z-polyhedra")
|
|
|
|
(description
|
|
|
|
"CLooG is a free software library to generate code for scanning
|
|
|
|
Z-polyhedra. That is, it finds a code (e.g., in C, FORTRAN...) that
|
|
|
|
reaches each integral point of one or more parameterized polyhedra.
|
|
|
|
CLooG has been originally written to solve the code generation problem
|
|
|
|
for optimizing compilers based on the polytope model. Nevertheless it
|
|
|
|
is used now in various area e.g., to build control automata for
|
|
|
|
high-level synthesis or to find the best polynomial approximation of a
|
|
|
|
function. CLooG may help in any situation where scanning polyhedra
|
|
|
|
matters. While the user has full control on generated code quality,
|
|
|
|
CLooG is designed to avoid control overhead and to produce a very
|
|
|
|
effective code.")
|
|
|
|
(license gpl2+)))
|
2013-03-27 10:47:48 -04:00
|
|
|
|