aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Karetnikov <nikita@karetnikov.org>2012-10-16 23:24:58 +0000
committerLudovic Courtès <ludo@gnu.org>2012-10-17 23:25:25 +0200
commita52e429f76282080c58444ce2ac82a1968d5f29d (patch)
tree88591895ecc8bdada2033a64cc104b6c8263460d
parent124b17673b71b7427714ea2acafc867cf93c367f (diff)
downloadgnu-guix-a52e429f76282080c58444ce2ac82a1968d5f29d.tar
gnu-guix-a52e429f76282080c58444ce2ac82a1968d5f29d.tar.gz
distro: Add i686 support.
* distro/packages/base.scm (gcc-4.7): Turn `arguments' into a lambda. Use `glibc-dynamic-linker' instead of the hard-coded linker name.
-rw-r--r--distro/packages/base.scm164
1 files changed, 83 insertions, 81 deletions
diff --git a/distro/packages/base.scm b/distro/packages/base.scm
index 0413d9fec1..3a22b65f13 100644
--- a/distro/packages/base.scm
+++ b/distro/packages/base.scm
@@ -1,5 +1,6 @@
;;; Guix --- Nix package management from Guile. -*- coding: utf-8 -*-
;;; Copyright (C) 2012 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright (C) 2012 Nikita Karetnikov <nikita@karetnikov.org>
;;;
;;; This file is part of Guix.
;;;
@@ -704,9 +705,9 @@ BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc.")
(define (glibc-dynamic-linker system)
"Return the name of Glibc's dynamic linker for SYSTEM."
- (if (string=? system "x86_64-linux")
- "ld-linux-x86-64.so.2"
- (error "dynamic linker name not known for this system" system)))
+ (cond ((string=? system "x86_64-linux") "/lib/ld-linux-x86-64.so.2")
+ ((string=? system "i686-linux") "/lib/ld-linux.so.2")
+ (else (error "dynamic linker name not known for this system" system))))
(define-public gcc-4.7
(let ((stripped? #t)) ; TODO: make this a parameter
@@ -725,83 +726,84 @@ BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc.")
("mpfr" ,mpfr)
("mpc" ,mpc))) ; TODO: libelf, ppl, cloog, zlib, etc.
(arguments
- `(#:out-of-source? #t
- #:strip-binaries? ,stripped?
- #:configure-flags
- `("--enable-plugin"
- "--enable-languages=c,c++"
- "--disable-multilib"
- ,(let ((libc (assoc-ref %build-inputs "libc")))
- (if libc
- (string-append "--with-native-system-header-dir=" libc
- "/include")
- "--without-headers")))
- #:make-flags
- (let ((libc (assoc-ref %build-inputs "libc")))
- `(,@(if libc
- (list (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 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* "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 libstdc++, libc, and `?crt*.o', except
- ;; `crt{begin,end}.o', which come with GCC.
-
- ;; XXX: For crt*.o, use `STANDARD_STARTFILE_PREFIX' instead? See
- ;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/gcc-pass1.html>.
- (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 -rpath=~a/lib \
+ (lambda (system)
+ `(#:out-of-source? #t
+ #:strip-binaries? ,stripped?
+ #:configure-flags
+ `("--enable-plugin"
+ "--enable-languages=c,c++"
+ "--disable-multilib"
+ ,(let ((libc (assoc-ref %build-inputs "libc")))
+ (if libc
+ (string-append "--with-native-system-header-dir=" libc
+ "/include")
+ "--without-headers")))
+ #:make-flags
+ (let ((libc (assoc-ref %build-inputs "libc")))
+ `(,@(if libc
+ (list (string-append "LDFLAGS_FOR_BUILD="
+ "-L" libc "/lib "
+ "-Wl,-dynamic-linker "
+ "-Wl," libc
+ ,(glibc-dynamic-linker system)))
+ '())
+ ,(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* "gcc/config/i386/linux64.h"
+ (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
+ (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
+ suffix
+ (string-append libc ,(glibc-dynamic-linker system)))))
+
+ ;; Tell where to find libstdc++, libc, and `?crt*.o', except
+ ;; `crt{begin,end}.o', which come with GCC.
+
+ ;; XXX: For crt*.o, use `STANDARD_STARTFILE_PREFIX' instead? See
+ ;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/gcc-pass1.html>.
+ (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 -rpath=~a/lib \
-rpath=~a/lib64 -rpath=~a/lib \" ~a~%"
- libc libc out out suffix))
- (("([^ ]*)crt([^\\.])\\.o" _ prefix suffix)
- (string-append libc "/lib/" prefix "crt" suffix ".o"))))
-
- ;; 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
- ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'.
- (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)))))
+ libc libc out out suffix))
+ (("([^ ]*)crt([^\\.])\\.o" _ prefix suffix)
+ (string-append libc "/lib/" prefix "crt" suffix ".o"))))
+
+ ;; 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
+ ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'.
+ (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))))))
(properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
(description "The GNU Compiler Collection")
@@ -1557,7 +1559,7 @@ identifier SYSTEM."
(ice-9 regex)
(srfi srfi-1)
(srfi srfi-26))
- ,@(substitute-keyword-arguments (package-arguments gcc-4.7)
+ ,@(substitute-keyword-arguments ((package-arguments gcc-4.7) system)
((#:configure-flags flags)
`(append (list ,(string-append "--target="
(boot-triplet system))
@@ -1762,7 +1764,7 @@ exec ~a/bin/~a-gcc -B~a/lib -Wl,-dynamic-linker -Wl,~a/lib/~a \"$@\"~%"
;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
,@(substitute-keyword-arguments ((package-arguments gcc-boot0) system)
((#:configure-flags boot-flags)
- (let loop ((args (package-arguments gcc-4.7)))
+ (let loop ((args ((package-arguments gcc-4.7) system)))
(match args
((#:configure-flags normal-flags _ ...)
normal-flags)