From af07095516b56dcdd38bf1874da27de9c4c841f6 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 27 Dec 2014 23:22:08 +0100 Subject: packages: Add 'file-type' field to 'search-path-specification'. Fixes . * guix/packages.scm (): Rename 'directories' field to 'files'. Add 'file-type'. (search-path-specification->sexp): Honor 'file-type'. * gnu/packages/autotools.scm, gnu/packages/bootstrap.scm, gnu/packages/cross-base.scm, gnu/packages/games.scm, gnu/packages/gcc.scm, gnu/packages/glib.scm, gnu/packages/guile.scm, gnu/packages/man.scm, gnu/packages/perl.scm, gnu/packages/pkg-config.scm, gnu/packages/python.scm, gnu/packages/ruby.scm, gnu/packages/xfce.scm: Change 'directories' to 'files'. * tests/packages.scm ("search paths"): Change 'directories' field to 'files'. * guix/scripts/environment.scm (for-each-search-path): Likewise. --- gnu/packages/cross-base.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gnu/packages/cross-base.scm') diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 74809d08f9..0f32c9fab9 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -234,10 +234,10 @@ (define* (cross-gcc target (search-paths (list (search-path-specification (variable "CROSS_CPATH") - (directories '("include"))) + (files '("include"))) (search-path-specification (variable "CROSS_LIBRARY_PATH") - (directories '("lib" "lib64"))))) + (files '("lib" "lib64"))))) (native-search-paths '()))) (define* (cross-libc target -- cgit v1.2.3 From 76e639a00fecb194e2fefc267e2e97c5845434b2 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Wed, 7 Jan 2015 15:00:44 +0000 Subject: gnu: gcc: Use 'gcc-configure-flags-for-triplet' for native compilers too. * gnu/packages/gcc.scm (gcc-configure-flags-for-triplet): Do not export it. (gcc-4.7): Pass the result of 'gcc-configure-flags-for-triplet' to configure for all builds, including native ones. * gnu/packages/cross-base.scm (cross-gcc-arguments): Do not add the result of 'gcc-configure-flags-for-triplet' here, since it is now included in the configure-flags inherited from gcc-4.8. --- gnu/packages/cross-base.scm | 1 - gnu/packages/gcc.scm | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'gnu/packages/cross-base.scm') diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 0f32c9fab9..a9ae5ee333 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -88,7 +88,6 @@ (define (cross-gcc-arguments target libc) (substitute-keyword-arguments (package-arguments gcc-4.8) ((#:configure-flags flags) `(append (list ,(string-append "--target=" target) - ,@(gcc-configure-flags-for-triplet target) ,@(if libc '() `( ;; Disable features not needed at this stage. diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index c9f9ab007a..0e507576fd 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -36,7 +36,7 @@ (define %gcc-infrastructure ;; Base URL for GCC's infrastructure. "ftp://gcc.gnu.org/pub/gcc/infrastructure/") -(define-public (gcc-configure-flags-for-triplet 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., @@ -102,11 +102,11 @@ (define-public gcc-4.7 "/include") "--without-headers"))) - ;; When cross-compiling GCC, pass the right options for the - ;; target triplet. - (or (and=> (%current-target-system) - gcc-configure-flags-for-triplet) - '()) + ;; Pass the right options for the target triplet. + (let ((triplet + (or (%current-target-system) + (nix-system->gnu-triplet (%current-system))))) + (gcc-configure-flags-for-triplet triplet)) (maybe-target-tools)))))) (package -- cgit v1.2.3 From 3f00ff8b43bfef244e211d1c9bb71132926c1580 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Wed, 7 Jan 2015 15:55:23 -0500 Subject: gnu: Add toolchain support for 'armhf-linux'. Based on preliminary work by John Darrington . * 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(-) (limited to 'gnu/packages/cross-base.scm') diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm index f1110d9cf0..e1b50a1e4f 100644 --- a/gnu/packages/bootstrap.scm +++ b/gnu/packages/bootstrap.scm @@ -162,6 +162,7 @@ (define* (glibc-dynamic-linker "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 a9ae5ee333..794d925841 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 +;;; Copyright © 2014, 2015 Mark H Weaver ;;; ;;; This file is part of GNU Guix. ;;; @@ -322,6 +323,12 @@ (define-public xgcc-xtensa ;; 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 0e507576fd..276b986331 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -46,8 +46,17 @@ (define (gcc-configure-flags-for-triplet target) ;; 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 + "--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 @@ (define-public gcc-4.7 (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 7ac586b0aa..1c619c3ef9 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 -;;; Copyright © 2013 Mark H Weaver +;;; Copyright © 2013, 2014, 2015 Mark H Weaver ;;; Copyright © 2014 Eric Bavier ;;; Copyright © 2014 Ian Denhardt ;;; @@ -481,14 +481,18 @@ (define* (nix-system->gnu-triplet #: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 @@ (define (gnu-triplet->nix-system triplet) (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. -- cgit v1.2.3 From 6ee01481c36949680d775af6a125dae2ad4b492d Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 14 Jan 2015 19:40:58 +0100 Subject: gnu: Don't build the mips64el-linux-gnuabi64 cross-compiler on i686. Fixes . Reported by Mark H Weaver . * gnu/packages/cross-base.scm (xgcc-mips64el): Remove "i686-linux" from 'supported-systems'. --- gnu/packages/cross-base.scm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'gnu/packages/cross-base.scm') diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 794d925841..a062128a79 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014 Ludovic Courtès +;;; Copyright © 2013, 2014, 2015 Ludovic Courtès ;;; Copyright © 2014, 2015 Mark H Weaver ;;; ;;; This file is part of GNU Guix. @@ -308,10 +308,15 @@ (define xlinux-headers ;;; (define-public xgcc-mips64el - (let ((triplet "mips64el-linux-gnuabi64")) ; N64 ABI - (cross-gcc triplet - (cross-binutils triplet) - (cross-libc triplet)))) + (let* ((triplet "mips64el-linux-gnuabi64") ;N64 ABI + (xgcc (cross-gcc triplet + (cross-binutils triplet) + (cross-libc triplet)))) + ;; Don't attempt to build this cross-compiler on i686; + ;; see . + (package (inherit xgcc) + (supported-systems (delete "i686-linux" + (package-supported-systems xgcc)))))) (define-public xgcc-avr ;; AVR cross-compiler, used to build AVR-Libc. -- cgit v1.2.3 From 9fdd80e8f28a7d48615fa4d5652e81ea5f679485 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 14 Jan 2015 21:14:14 +0100 Subject: gnu: cross-base: Don't build the cross-compilers with target = host. * gnu/packages/cross-base.scm (xgcc-mips64el)[supported-systems]: Delete "mips64el-linux". (xgcc-armhf)[supported-systems]: Delete "armhf-linux". --- gnu/packages/cross-base.scm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'gnu/packages/cross-base.scm') diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index a062128a79..5a67d4b6ac 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -315,8 +315,9 @@ (define-public xgcc-mips64el ;; Don't attempt to build this cross-compiler on i686; ;; see . (package (inherit xgcc) - (supported-systems (delete "i686-linux" - (package-supported-systems xgcc)))))) + (supported-systems (fold delete + (package-supported-systems xgcc) + '("mips64el-linux" "i686-linux")))))) (define-public xgcc-avr ;; AVR cross-compiler, used to build AVR-Libc. @@ -329,10 +330,12 @@ (define-public xgcc-xtensa (cross-gcc "xtensa-elf")) (define-public xgcc-armhf - (let ((triplet "arm-linux-gnueabihf")) - (cross-gcc triplet - (cross-binutils triplet) - (cross-libc triplet)))) + (let* ((triplet "arm-linux-gnueabihf") + (xgcc (cross-gcc triplet + (cross-binutils triplet) + (cross-libc triplet)))) + (package (inherit xgcc) + (supported-systems (delete "armhf-linux" %supported-systems))))) ;; (define-public xgcc-armel ;; (let ((triplet "armel-linux-gnueabi")) -- cgit v1.2.3