gnu: Add toolchain support for 'armhf-linux'.
Based on preliminary work by John Darrington <john@darrington.wattle.id.au>. * 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.
This commit is contained in:
parent
f7d2b496b9
commit
3f00ff8b43
|
@ -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
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
|
||||
;;;
|
||||
;;; 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
|
||||
;;; Copyright © 2013, 2014, 2015 Mark H Weaver <mhw@netris.org>
|
||||
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
|
||||
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
|
||||
;;;
|
||||
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue