aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--distro/base.scm85
1 files changed, 85 insertions, 0 deletions
diff --git a/distro/base.scm b/distro/base.scm
index 98872a1670..b99eb63477 100644
--- a/distro/base.scm
+++ b/distro/base.scm
@@ -535,6 +535,91 @@ upon and follows the same principles as GNU MPFR.")
(license "LGPLv3+")
(home-page "http://mpc.multiprecision.org/")))
+(define-public gcc-4.7
+ (let ((stripped? #t)) ; TODO: make this a parameter
+ (package
+ (name "gcc")
+ (version "4.7.1")
+ (source (origin
+ (method http-fetch)
+ (uri (string-append "http://ftp.gnu.org/gnu/gcc/gcc-"
+ version "/gcc-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "0vs0v89zzgkngkw2p8kdynyk7j8ky4wf6zyrg3rsschpl1pky28n"))))
+ (build-system gnu-build-system)
+ (inputs `(("libc" ,(nixpkgs-derivation* "glibc"))
+ ("gmp" ,gmp)
+ ("mpfr" ,mpfr)
+ ("mpc" ,mpc))) ; TODO: libelf, ppl, cloog, zlib, etc.
+ (arguments
+ `(#:modules ((guix build utils)
+ (guix build gnu-build-system)
+ (ice-9 regex)) ; we need this one
+ #:out-of-source? #t
+ #:configure-flags
+ `("--enable-plugin"
+ "--enable-languages=c,c++"
+ "--disable-multilib"
+ ,(string-append "--with-native-system-header-dir="
+ (assoc-ref %build-inputs "libc")
+ "/include"))
+ #:make-flags
+ (let ((libc (assoc-ref %build-inputs "libc")))
+ `(,(string-append "LDFLAGS_FOR_BUILD="
+ "-L" libc "/lib "
+ "-Wl,-dynamic-linker "
+ "-Wl," libc "/lib/ld-linux-x86-64.so.2")
+ ,(string-append "BOOT_CFLAGS=-O2 "
+ ,(if stripped? "-g0" "-g"))))
+ #:tests? #f
+ #:phases
+ (alist-cons-before
+ 'configure 'pre-configure
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((libc (assoc-ref inputs "libc")))
+ ;; Fix the dynamic linker's file name.
+ (substitute* "gcc/config/i386/linux64.h"
+ (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
+ (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
+ suffix
+ (string-append libc "/lib/ld-linux-x86-64.so.2"))))
+
+ ;; Tell where to find libc and `?crt*.o', except
+ ;; `crt{begin,end}.o', which come with GCC.
+ (substitute* ("gcc/config/gnu-user.h"
+ "gcc/config/i386/gnu-user.h"
+ "gcc/config/i386/gnu-user64.h")
+ (("#define LIB_SPEC (.*)$" _ suffix)
+ (format #f "#define LIB_SPEC \"-L~a/lib \" ~a~%"
+ libc suffix))
+ (("^.*crt([^\\.])\\.o.*$" line)
+ (regexp-substitute/global #f
+ "([a-zA-Z]?)crt([^\\.])\\.o"
+ (string-append line "\n")
+ 'pre libc "/lib/" 1 "crt" 2 ".o"
+ 'post)))))
+ (alist-replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (zero?
+ (system* "make"
+ ,(if stripped?
+ "install-strip"
+ "install"))))
+ %standard-phases))))
+
+ (properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
+ (description "The GNU Compiler Collection")
+ (long-description
+ "The GNU Compiler Collection includes compiler front ends for C, C++,
+Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well as
+libraries for these languages (libstdc++, libgcj, libgomp,...).
+
+GCC development is a part of the GNU Project, aiming to improve the compiler
+used in the GNU system including the GNU/Linux variant.")
+ (license "GPLv3+")
+ (home-page "http://gcc.gnu.org/"))))
+
(define-public ncurses
(let ((post-install-phase
'(lambda* (#:key outputs #:allow-other-keys)