guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: gnu: Add toolchain support for 'armhf-linux'.


From: Mark H. Weaver
Subject: 01/01: gnu: Add toolchain support for 'armhf-linux'.
Date: Wed, 07 Jan 2015 21:28:12 +0000

mhw pushed a commit to branch core-updates
in repository guix.

commit 3f00ff8b43bfef244e211d1c9bb71132926c1580
Author: Mark H Weaver <address@hidden>
Date:   Wed Jan 7 15:55:23 2015 -0500

    gnu: Add toolchain support for 'armhf-linux'.
    
    Based on preliminary work by John Darrington <address@hidden>.
    
    * gnu/packages/cross-base.scm (xgcc-armhf): New variable.
    * gnu/packages/gcc.scm (gcc-configure-flags-for-triplet): Add armhf case.
      (gcc-4.7)[pre-configure]: Add gcc/config/*/linux-eabi.h to the list
      of files in which to patch GLIBC_DYNAMIC_LINKER.
    * gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add armhf case.
    * guix/utils.scm (gnu-triplet->nix-system, nix-system->gnu-triplet):
      Add armhf cases.
---
 gnu/packages/bootstrap.scm  |    1 +
 gnu/packages/cross-base.scm |    7 +++++++
 gnu/packages/gcc.scm        |   15 ++++++++++++---
 guix/utils.scm              |   26 ++++++++++++++++----------
 4 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index f1110d9..e1b50a1 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -162,6 +162,7 @@ successful, or false to signal an error."
   "Return the name of Glibc's dynamic linker for SYSTEM."
   (cond ((string=? system "x86_64-linux") "/lib/ld-linux-x86-64.so.2")
         ((string=? system "i686-linux") "/lib/ld-linux.so.2")
+        ((string=? system "armhf-linux") "/lib/ld-linux-armhf.so.3")
         ((string=? system "mips64el-linux") "/lib/ld.so.1")
 
         ;; XXX: This one is used bare-bones, without a libc, so add a case
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index a9ae5ee..794d925 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014 Ludovic Courtès <address@hidden>
+;;; Copyright © 2014, 2015 Mark H Weaver <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -322,6 +323,12 @@ XBINUTILS and the cross tool chain."
   ;; Bare-bones Xtensa cross-compiler, used to build the Atheros firmware.
   (cross-gcc "xtensa-elf"))
 
+(define-public xgcc-armhf
+  (let ((triplet "arm-linux-gnueabihf"))
+    (cross-gcc triplet
+               (cross-binutils triplet)
+               (cross-libc triplet))))
+
 ;; (define-public xgcc-armel
 ;;   (let ((triplet "armel-linux-gnueabi"))
 ;;     (cross-gcc triplet
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 0e50757..276b986 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -46,8 +46,17 @@ where the OS part is overloaded to denote a specific 
ABI---into GCC
          ;; Triplets recognized by glibc as denoting the N64 ABI; see
          ;; ports/sysdeps/mips/preconfigure.
          '("--with-abi=64"))
+
+        ((string-match "^arm.*-gnueabihf$" target)
+         '("--with-arch=armv7-a"
+           "--with-float=hard"
+           "--with-mode=thumb"
+
+           ;; See <https://wiki.debian.org/ArmHardFloatPort/VfpComparison#FPU>
+           "--with-fpu=vfpv3-d16"))
+
         (else
-         ;; TODO: Add `armel.*gnueabi', `hf', etc.
+         ;; TODO: Add `arm.*-gnueabi', etc.
          '())))
 
 (define-public gcc-4.7
@@ -184,14 +193,14 @@ where the OS part is overloaded to denote a specific 
ABI---into GCC
                 (for-each
                  (lambda (x)
                    (substitute* (find-files "gcc/config"
-                                            "^linux(64|-elf)?\\.h$")
+                                            "^linux(64|-elf|-eabi)?\\.h$")
                      (("(#define GLIBC_DYNAMIC_LINKER.*)\\\\\n$" _ line)
                       line)))
                  '(1 2 3))
 
                 ;; Fix the dynamic linker's file name.
                 (substitute* (find-files "gcc/config"
-                                         "^linux(64|-elf)?\\.h$")
+                                         "^linux(64|-elf|-eabi)?\\.h$")
                   (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
                    (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
                            suffix
diff --git a/guix/utils.scm b/guix/utils.scm
index 7ac586b..1c619c3 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <address@hidden>
-;;; Copyright © 2013 Mark H Weaver <address@hidden>
+;;; Copyright © 2013, 2014, 2015 Mark H Weaver <address@hidden>
 ;;; Copyright © 2014 Eric Bavier <address@hidden>
 ;;; Copyright © 2014 Ian Denhardt <address@hidden>
 ;;;
@@ -481,14 +481,18 @@ previous value of the keyword argument."
           #:optional (system (%current-system)) (vendor "unknown"))
   "Return a guess of the GNU triplet corresponding to Nix system
 identifier SYSTEM."
-  (let* ((dash (string-index system #\-))
-         (arch (substring system 0 dash))
-         (os   (substring system (+ 1 dash))))
-    (string-append arch
-                   "-" vendor "-"
-                   (if (string=? os "linux")
-                       "linux-gnu"
-                       os))))
+  (match system
+    ("armhf-linux"
+     (string-append "arm-" vendor "-linux-gnueabihf"))
+    (_
+     (let* ((dash (string-index system #\-))
+            (arch (substring system 0 dash))
+            (os   (substring system (+ 1 dash))))
+       (string-append arch
+                      "-" vendor "-"
+                      (if (string=? os "linux")
+                          "linux-gnu"
+                          os))))))
 
 (define (gnu-triplet->nix-system triplet)
   "Return the Nix system type corresponding to TRIPLET, a GNU triplet as
@@ -498,7 +502,9 @@ returned by `config.guess'."
                         (lambda (m)
                           (string-append "i686-" (match:substring m 1))))
                        (else triplet))))
-    (cond ((string-match "^([^-]+)-([^-]+-)?linux-gnu.*" triplet)
+    (cond ((string-match "^arm[^-]*-([^-]+-)?linux-gnueabihf" triplet)
+           "armhf-linux")
+          ((string-match "^([^-]+)-([^-]+-)?linux-gnu.*" triplet)
            =>
            (lambda (m)
              ;; Nix omits `-gnu' for GNU/Linux.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]