gnu: cross-base: Add support for `mips64el-linux-gnu-gnuabi64' (N64 ABI).
authorLudovic Courtès <ludo@gnu.org>
Wed, 26 Jun 2013 20:37:38 +0000 (22:37 +0200)
committerLudovic Courtès <ludo@gnu.org>
Wed, 26 Jun 2013 20:39:21 +0000 (22:39 +0200)
* gnu/packages/cross-base.scm (gcc-configure-flags-for-triplet): New
  procedure.
  (cross-gcc): Use it.
  (xgcc-mips64el): Use *-gnuabi64 instead of the N32 ABI.

gnu/packages/cross-base.scm

index 68c321e..5edc1b5 100644 (file)
@@ -30,6 +30,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
   #:export (cross-binutils
             cross-libc
             cross-gcc))
                         `(cons "--with-sysroot=/" ,flags)))))))
     (cross binutils target)))
 
+(define (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.
+         '())))
+
 (define* (cross-gcc target
                     #:optional (xbinutils (cross-binutils target)) libc)
   "Return a cross-compiler for TARGET, where TARGET is a GNU triplet.  Use
@@ -86,6 +101,7 @@ GCC that does not target a libc; otherwise, target that libc."
        ,@(substitute-keyword-arguments (package-arguments gcc-4.7)
            ((#:configure-flags flags)
             `(append (list ,(string-append "--target=" target)
+                           ,@(gcc-configure-flags-for-triplet target)
                            ,@(if libc
                                  '()
                                  `( ;; Disable features not needed at this stage.
@@ -260,7 +276,7 @@ XBINUTILS and the cross tool chain."
 ;;;
 
 (define-public xgcc-mips64el
-  (let ((triplet "mips64el-linux-gnu"))
+  (let ((triplet "mips64el-linux-gnuabi64"))      ; N64 ABI
     (cross-gcc triplet
                (cross-binutils triplet)
                (cross-libc triplet))))