2013-02-27 03:38:11 -05:00
|
|
|
|
;;; GNU Guix --- Functional package management for GNU
|
2015-01-14 13:40:58 -05:00
|
|
|
|
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
2015-01-07 15:55:23 -05:00
|
|
|
|
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
|
2013-02-27 03:38:11 -05:00
|
|
|
|
;;;
|
|
|
|
|
;;; This file is part of GNU Guix.
|
|
|
|
|
;;;
|
|
|
|
|
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
|
|
|
|
;;; under the terms of the GNU General Public License as published by
|
|
|
|
|
;;; the Free Software Foundation; either version 3 of the License, or (at
|
|
|
|
|
;;; your option) any later version.
|
|
|
|
|
;;;
|
|
|
|
|
;;; GNU Guix is distributed in the hope that it will be useful, but
|
|
|
|
|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
;;; GNU General Public License for more details.
|
|
|
|
|
;;;
|
|
|
|
|
;;; You should have received a copy of the GNU General Public License
|
|
|
|
|
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
|
|
(define-module (gnu packages cross-base)
|
|
|
|
|
#:use-module (guix licenses)
|
|
|
|
|
#:use-module (gnu packages)
|
2013-04-17 08:59:19 -04:00
|
|
|
|
#:use-module (gnu packages gcc)
|
2013-02-27 03:38:11 -05:00
|
|
|
|
#:use-module (gnu packages base)
|
gnu: Split (gnu packages base), adding (gnu packages commencement).
* gnu/packages/base.scm (gnu-make-boot0, diffutils-boot0,
findutils-boot0, %boot0-inputs, nix-system->gnu-triplet, boot-triplet,
binutils-boot0, gcc-boot0, perl-boot0, linux-libre-headers-boot0,
texinfo-boot0, %boot1-inputs, glibc-final-with-bootstrap-bash,
cross-gcc-wrapper, static-bash-for-glibc, glibc-final,
gcc-boot0-wrapped, %boot2-inputs, binutils-final, libstdc++,
gcc-final, ld-wrapper-boot3, %boot3-inputs, bash-final, %boot4-inputs,
guile-final, gnu-make-final, ld-wrapper, coreutils-final, grep-final,
%boot5-inputs, %final-inputs, canonical-package, gcc-toolchain,
gcc-toolchain-4.8, gcc-toolchain-4.9): Move to...
* gnu/packages/commencement.scm: ... here. New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add it.
* build-aux/check-final-inputs-self-contained.scm: Adjust accordingly.
* gnu/packages/cross-base.scm: Likewise.
* gnu/packages/make-bootstrap.scm: Likewise.
* guix/build-system/cmake.scm (cmake-build): Likewise.
* guix/build-system/gnu.scm (standard-packages, gnu-build,
gnu-cross-build): Likewise.
* guix/build-system/perl.scm (perl-build): Likewise.
* guix/build-system/python.scm (python-build): Likewise.
* guix/build-system/trivial.scm (guile-for-build): Likewise.
* guix/download.scm (url-fetch): Likewise.
* guix/gexp.scm (default-guile): Likewise.
* guix/git-download.scm (git-fetch): Likewise.
* guix/monads.scm (run-with-store): Likewise.
* guix/packages.scm (default-guile): Likewise.
* guix/scripts/package.scm (guix-package): Likewise.
* guix/scripts/refresh.scm: Likewise.
* guix/svn-download.scm (svn-fetch): Likewise.
* tests/builders.scm (%bootstrap-inputs, %bootstrap-search-paths):
Likewise.
* tests/packages.scm ("GNU Make, bootstrap"): Likewise.
* tests/guix-package.sh: Likewise.
* gnu/services/base.scm: Use 'canonical-package' instead of xxx-final.
* gnu/services/xorg.scm: Likewise.
* gnu/system/vm.scm: Likewise.
* guix/scripts/pull.scm (guix-pull): Likewise.
2014-08-26 18:25:17 -04:00
|
|
|
|
#:use-module (gnu packages commencement)
|
2013-02-27 03:38:11 -05:00
|
|
|
|
#:use-module (gnu packages linux)
|
|
|
|
|
#:use-module (guix packages)
|
|
|
|
|
#:use-module (guix download)
|
|
|
|
|
#:use-module (guix utils)
|
|
|
|
|
#:use-module (guix build-system gnu)
|
|
|
|
|
#:use-module (guix build-system trivial)
|
|
|
|
|
#:use-module (srfi srfi-1)
|
|
|
|
|
#:use-module (srfi srfi-26)
|
2013-05-24 16:44:15 -04:00
|
|
|
|
#:use-module (ice-9 match)
|
|
|
|
|
#:export (cross-binutils
|
|
|
|
|
cross-libc
|
|
|
|
|
cross-gcc))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
|
2015-06-26 11:06:30 -04:00
|
|
|
|
(define %xgcc
|
|
|
|
|
;; GCC package used as the basis for cross-compilation. It doesn't have to
|
|
|
|
|
;; be 'gcc' and can be a specific variant such as 'gcc-4.8'.
|
|
|
|
|
gcc)
|
|
|
|
|
|
2013-02-27 03:38:11 -05:00
|
|
|
|
(define (cross p target)
|
|
|
|
|
(package (inherit p)
|
|
|
|
|
(name (string-append (package-name p) "-cross-" target))
|
|
|
|
|
(arguments
|
|
|
|
|
(substitute-keyword-arguments (package-arguments p)
|
|
|
|
|
((#:configure-flags flags)
|
|
|
|
|
`(cons ,(string-append "--target=" target)
|
|
|
|
|
,flags))))))
|
|
|
|
|
|
2014-11-11 15:54:41 -05:00
|
|
|
|
(define (package-with-patch original patch)
|
|
|
|
|
"Return package ORIGINAL with PATCH applied."
|
|
|
|
|
(package (inherit original)
|
|
|
|
|
(source (origin (inherit (package-source original))
|
|
|
|
|
(patches (list patch))))))
|
|
|
|
|
|
2013-05-27 16:23:21 -04:00
|
|
|
|
(define (cross-binutils target)
|
|
|
|
|
"Return a cross-Binutils for TARGET."
|
|
|
|
|
(let ((binutils (package (inherit binutils)
|
|
|
|
|
(arguments
|
|
|
|
|
(substitute-keyword-arguments (package-arguments
|
|
|
|
|
binutils)
|
|
|
|
|
((#:configure-flags flags)
|
|
|
|
|
;; Build with `--with-sysroot' so that ld honors
|
|
|
|
|
;; DT_RUNPATH entries when searching for a needed
|
|
|
|
|
;; library. This works because as a side effect
|
|
|
|
|
;; `genscripts.sh' sets `USE_LIBPATH=yes', which tells
|
|
|
|
|
;; elf32.em to use DT_RUNPATH in its search list.
|
2013-06-26 08:31:24 -04:00
|
|
|
|
;; See <http://sourceware.org/ml/binutils/2013-05/msg00312.html>.
|
|
|
|
|
;;
|
|
|
|
|
;; In theory choosing / as the sysroot could lead ld
|
|
|
|
|
;; to pick up native libs instead of target ones. In
|
|
|
|
|
;; practice the RUNPATH of target libs only refers to
|
|
|
|
|
;; target libs, not native libs, so this is safe.
|
|
|
|
|
`(cons "--with-sysroot=/" ,flags)))))))
|
2014-11-11 15:54:41 -05:00
|
|
|
|
|
|
|
|
|
;; For Xtensa, apply Qualcomm's patch.
|
|
|
|
|
(cross (if (string-prefix? "xtensa-" target)
|
|
|
|
|
(package-with-patch binutils
|
|
|
|
|
(search-patch
|
|
|
|
|
"ath9k-htc-firmware-binutils.patch"))
|
|
|
|
|
binutils)
|
|
|
|
|
target)))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
|
2014-10-02 15:41:40 -04:00
|
|
|
|
(define (cross-gcc-arguments target libc)
|
|
|
|
|
"Return build system arguments for a cross-gcc for TARGET, using LIBC (which
|
|
|
|
|
may be either a libc package or #f.)"
|
2014-10-05 10:25:25 -04:00
|
|
|
|
;; Set the current target system so that 'glibc-dynamic-linker' returns the
|
|
|
|
|
;; right name.
|
|
|
|
|
(parameterize ((%current-target-system target))
|
2015-06-10 17:19:30 -04:00
|
|
|
|
;; Disable stripping as this can break binaries, with object files of
|
|
|
|
|
;; libgcc.a showing up as having an unknown architecture. See
|
|
|
|
|
;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
|
|
|
|
|
;; for instance.
|
|
|
|
|
(let ((args `(#:strip-binaries? #f
|
2015-06-26 11:06:30 -04:00
|
|
|
|
,@(package-arguments %xgcc))))
|
2015-06-10 17:19:30 -04:00
|
|
|
|
(substitute-keyword-arguments args
|
|
|
|
|
((#:configure-flags flags)
|
|
|
|
|
`(append (list ,(string-append "--target=" target)
|
|
|
|
|
,@(if libc
|
2015-07-19 11:16:51 -04:00
|
|
|
|
`( ;; Disable libcilkrts because it is not
|
|
|
|
|
;; ported to GNU/Hurd.
|
|
|
|
|
"--disable-libcilkrts")
|
2015-06-10 17:19:30 -04:00
|
|
|
|
`( ;; Disable features not needed at this stage.
|
|
|
|
|
"--disable-shared" "--enable-static"
|
2014-10-02 15:41:40 -04:00
|
|
|
|
|
2015-06-10 17:19:30 -04:00
|
|
|
|
;; Disable C++ because libstdc++'s configure
|
|
|
|
|
;; script otherwise fails with "Link tests are not
|
|
|
|
|
;; allowed after GCC_NO_EXECUTABLES."
|
|
|
|
|
"--enable-languages=c"
|
2014-10-02 15:41:40 -04:00
|
|
|
|
|
2015-06-10 17:19:30 -04:00
|
|
|
|
"--disable-threads" ;libgcc, would need libc
|
|
|
|
|
"--disable-libatomic"
|
|
|
|
|
"--disable-libmudflap"
|
|
|
|
|
"--disable-libgomp"
|
|
|
|
|
"--disable-libssp"
|
|
|
|
|
"--disable-libquadmath"
|
|
|
|
|
"--disable-decimal-float" ;would need libc
|
2015-07-19 11:16:51 -04:00
|
|
|
|
"--disable-libcilkrts"
|
2015-06-10 17:19:30 -04:00
|
|
|
|
)))
|
2014-10-02 15:41:40 -04:00
|
|
|
|
|
2015-06-10 17:19:30 -04:00
|
|
|
|
,(if libc
|
|
|
|
|
flags
|
|
|
|
|
`(remove (cut string-match "--enable-languages.*" <>)
|
|
|
|
|
,flags))))
|
|
|
|
|
((#:make-flags flags)
|
|
|
|
|
(if libc
|
|
|
|
|
`(let ((libc (assoc-ref %build-inputs "libc")))
|
|
|
|
|
;; FLAGS_FOR_TARGET are needed for the target libraries to receive
|
|
|
|
|
;; the -Bxxx for the startfiles.
|
|
|
|
|
(cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
|
|
|
|
|
,flags))
|
|
|
|
|
flags))
|
|
|
|
|
((#:phases phases)
|
|
|
|
|
(let ((phases
|
|
|
|
|
`(alist-cons-after
|
|
|
|
|
'install 'make-cross-binutils-visible
|
|
|
|
|
(lambda* (#:key outputs inputs #:allow-other-keys)
|
|
|
|
|
(let* ((out (assoc-ref outputs "out"))
|
|
|
|
|
(libexec (string-append out "/libexec/gcc/"
|
|
|
|
|
,target))
|
|
|
|
|
(binutils (string-append
|
|
|
|
|
(assoc-ref inputs "binutils-cross")
|
|
|
|
|
"/bin/" ,target "-"))
|
|
|
|
|
(wrapper (string-append
|
|
|
|
|
(assoc-ref inputs "ld-wrapper-cross")
|
|
|
|
|
"/bin/" ,target "-ld")))
|
|
|
|
|
(for-each (lambda (file)
|
|
|
|
|
(symlink (string-append binutils file)
|
|
|
|
|
(string-append libexec "/"
|
|
|
|
|
file)))
|
|
|
|
|
'("as" "nm"))
|
|
|
|
|
(symlink wrapper (string-append libexec "/ld"))
|
|
|
|
|
#t))
|
|
|
|
|
(alist-replace
|
|
|
|
|
'install
|
|
|
|
|
(lambda _
|
|
|
|
|
;; Unlike our 'strip' phase, this will do the right thing
|
|
|
|
|
;; for cross-compilers.
|
|
|
|
|
(zero? (system* "make" "install-strip")))
|
|
|
|
|
,phases))))
|
|
|
|
|
(if libc
|
|
|
|
|
`(alist-cons-before
|
|
|
|
|
'configure 'set-cross-path
|
|
|
|
|
(lambda* (#:key inputs #:allow-other-keys)
|
|
|
|
|
;; Add the cross Linux headers to CROSS_CPATH, and remove them
|
|
|
|
|
;; from CPATH.
|
|
|
|
|
(let ((libc (assoc-ref inputs "libc"))
|
2015-07-18 18:15:44 -04:00
|
|
|
|
(linux (assoc-ref inputs "xlinux-headers")))
|
2015-06-10 17:19:30 -04:00
|
|
|
|
(define (cross? x)
|
|
|
|
|
;; Return #t if X is a cross-libc or cross Linux.
|
|
|
|
|
(or (string-prefix? libc x)
|
|
|
|
|
(string-prefix? linux x)))
|
2014-10-02 15:41:40 -04:00
|
|
|
|
|
2015-06-10 17:19:30 -04:00
|
|
|
|
(setenv "CROSS_CPATH"
|
|
|
|
|
(string-append libc "/include:"
|
|
|
|
|
linux "/include"))
|
|
|
|
|
(setenv "CROSS_LIBRARY_PATH"
|
|
|
|
|
(string-append libc "/lib"))
|
2014-10-02 15:41:40 -04:00
|
|
|
|
|
2015-06-10 17:19:30 -04:00
|
|
|
|
(let ((cpath (search-path-as-string->list
|
|
|
|
|
(getenv "CPATH")))
|
|
|
|
|
(libpath (search-path-as-string->list
|
|
|
|
|
(getenv "LIBRARY_PATH"))))
|
|
|
|
|
(setenv "CPATH"
|
|
|
|
|
(list->search-path-as-string
|
|
|
|
|
(remove cross? cpath) ":"))
|
|
|
|
|
(setenv "LIBRARY_PATH"
|
|
|
|
|
(list->search-path-as-string
|
|
|
|
|
(remove cross? libpath) ":"))
|
|
|
|
|
#t)))
|
|
|
|
|
,phases)
|
|
|
|
|
phases)))))))
|
2014-10-02 15:41:40 -04:00
|
|
|
|
|
2014-11-11 15:54:41 -05:00
|
|
|
|
(define (cross-gcc-patches target)
|
|
|
|
|
"Return GCC patches needed for TARGET."
|
|
|
|
|
(cond ((string-prefix? "xtensa-" target)
|
|
|
|
|
;; Patch by Qualcomm needed to build the ath9k-htc firmware.
|
|
|
|
|
(list (search-patch "ath9k-htc-firmware-gcc.patch")))
|
|
|
|
|
(else '())))
|
|
|
|
|
|
2013-02-27 03:38:11 -05:00
|
|
|
|
(define* (cross-gcc target
|
|
|
|
|
#:optional (xbinutils (cross-binutils target)) libc)
|
|
|
|
|
"Return a cross-compiler for TARGET, where TARGET is a GNU triplet. Use
|
|
|
|
|
XBINUTILS as the associated cross-Binutils. If LIBC is false, then build a
|
|
|
|
|
GCC that does not target a libc; otherwise, target that libc."
|
2015-06-26 11:06:30 -04:00
|
|
|
|
(package (inherit %xgcc)
|
2013-02-27 03:38:11 -05:00
|
|
|
|
(name (string-append "gcc-cross-"
|
|
|
|
|
(if libc "" "sans-libc-")
|
|
|
|
|
target))
|
2015-06-26 11:06:30 -04:00
|
|
|
|
(source (origin (inherit (package-source %xgcc))
|
gnu: Use the 'patches' field of <origin>.
* gnu/packages/apr.scm,
gnu/packages/autotools.scm,
gnu/packages/avahi.scm,
gnu/packages/cdrom.scm,
gnu/packages/cmake.scm,
gnu/packages/cpio.scm,
gnu/packages/cross-base.scm,
gnu/packages/emacs.scm,
gnu/packages/flex.scm,
gnu/packages/fontutils.scm,
gnu/packages/glib.scm,
gnu/packages/grub.scm,
gnu/packages/guile.scm,
gnu/packages/idutils.scm,
gnu/packages/libevent.scm,
gnu/packages/linux.scm,
gnu/packages/mail.scm,
gnu/packages/make-bootstrap.scm,
gnu/packages/mp3.scm,
gnu/packages/oggvorbis.scm,
gnu/packages/pdf.scm,
gnu/packages/plotutils.scm,
gnu/packages/qemu.scm,
gnu/packages/recutils.scm,
gnu/packages/rush.scm,
gnu/packages/scheme.scm,
gnu/packages/system.scm,
gnu/packages/tcsh.scm,
gnu/packages/valgrind.scm,
gnu/packages/vpn.scm,
gnu/packages/w3m: Use the 'patches' field of <origin> instead of
adding a patch as input plus using #:patches.
2013-10-08 18:09:04 -04:00
|
|
|
|
(patches
|
2015-04-09 01:48:05 -04:00
|
|
|
|
(append
|
2015-06-26 11:06:30 -04:00
|
|
|
|
(origin-patches (package-source %xgcc))
|
2015-04-09 01:48:05 -04:00
|
|
|
|
(cons (search-patch "gcc-cross-environment-variables.patch")
|
|
|
|
|
(cross-gcc-patches target))))))
|
2014-06-09 16:45:01 -04:00
|
|
|
|
|
|
|
|
|
;; For simplicity, use a single output. Otherwise libgcc_s & co. are not
|
|
|
|
|
;; found by default, etc.
|
|
|
|
|
(outputs '("out"))
|
|
|
|
|
|
2013-02-27 03:38:11 -05:00
|
|
|
|
(arguments
|
|
|
|
|
`(#:implicit-inputs? #f
|
|
|
|
|
#:modules ((guix build gnu-build-system)
|
|
|
|
|
(guix build utils)
|
|
|
|
|
(ice-9 regex)
|
|
|
|
|
(srfi srfi-1)
|
|
|
|
|
(srfi srfi-26))
|
|
|
|
|
|
2014-10-02 15:41:40 -04:00
|
|
|
|
,@(cross-gcc-arguments target libc)))
|
2013-06-25 14:57:14 -04:00
|
|
|
|
|
|
|
|
|
(native-inputs
|
2015-04-03 15:26:24 -04:00
|
|
|
|
`(("ld-wrapper-cross" ,(make-ld-wrapper
|
|
|
|
|
(string-append "ld-wrapper-" target)
|
|
|
|
|
#:target target
|
|
|
|
|
#:binutils xbinutils))
|
|
|
|
|
("binutils-cross" ,xbinutils)
|
2013-02-27 03:38:11 -05:00
|
|
|
|
|
|
|
|
|
;; Call it differently so that the builder can check whether the "libc"
|
|
|
|
|
;; input is #f.
|
|
|
|
|
("libc-native" ,@(assoc-ref %final-inputs "libc"))
|
|
|
|
|
|
|
|
|
|
;; Remaining inputs.
|
2015-06-26 11:06:30 -04:00
|
|
|
|
,@(let ((inputs (append (package-inputs %xgcc)
|
2013-02-27 03:38:11 -05:00
|
|
|
|
(alist-delete "libc" %final-inputs))))
|
|
|
|
|
(if libc
|
|
|
|
|
`(("libc" ,libc)
|
2015-07-18 18:15:44 -04:00
|
|
|
|
("xlinux-headers" ;the target headers
|
|
|
|
|
,@(assoc-ref (package-propagated-inputs libc)
|
|
|
|
|
"linux-headers"))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
,@inputs)
|
2013-05-24 15:55:52 -04:00
|
|
|
|
inputs))))
|
|
|
|
|
|
2013-06-25 14:57:14 -04:00
|
|
|
|
(inputs '())
|
|
|
|
|
|
2013-05-24 15:55:52 -04:00
|
|
|
|
;; Only search target inputs, not host inputs.
|
|
|
|
|
(search-paths
|
|
|
|
|
(list (search-path-specification
|
|
|
|
|
(variable "CROSS_CPATH")
|
packages: Add 'file-type' field to 'search-path-specification'.
Fixes <http://bugs.gnu.org/18033>.
* guix/packages.scm (<search-path-specification>): 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.
2014-12-27 17:22:08 -05:00
|
|
|
|
(files '("include")))
|
2013-05-24 15:55:52 -04:00
|
|
|
|
(search-path-specification
|
|
|
|
|
(variable "CROSS_LIBRARY_PATH")
|
packages: Add 'file-type' field to 'search-path-specification'.
Fixes <http://bugs.gnu.org/18033>.
* guix/packages.scm (<search-path-specification>): 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.
2014-12-27 17:22:08 -05:00
|
|
|
|
(files '("lib" "lib64")))))
|
2013-05-24 15:55:52 -04:00
|
|
|
|
(native-search-paths '())))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
|
|
|
|
|
(define* (cross-libc target
|
|
|
|
|
#:optional
|
|
|
|
|
(xgcc (cross-gcc target))
|
|
|
|
|
(xbinutils (cross-binutils target)))
|
|
|
|
|
"Return a libc cross-built for TARGET, a GNU triplet. Use XGCC and
|
|
|
|
|
XBINUTILS and the cross tool chain."
|
|
|
|
|
(define xlinux-headers
|
|
|
|
|
(package (inherit linux-libre-headers)
|
|
|
|
|
(name (string-append (package-name linux-libre-headers)
|
|
|
|
|
"-cross-" target))
|
|
|
|
|
(arguments
|
build-system: Introduce "bags" as an intermediate representation.
* guix/build-system.scm (<build-system>)[build, cross-build]: Remove.
[lower]: New field.
(<bag>): New record type.
(make-bag): New procedure.
* guix/packages.scm (bag-transitive-inputs, bag-transitive-build-inputs,
bag-transitive-host-inputs, bag-transitive-target-inputs,
package->bag): New procedures.
(package-derivation): Use it; use the bag, apply its build procedure,
etc.
(package-cross-derivation): Likewise.
* gnu/packages/bootstrap.scm (raw-build, make-raw-bag): New procedure.
(%bootstrap-guile): Use them.
* guix/build-system/trivial.scm (lower): New procedure.
(trivial-build, trivial-cross-build): Remove 'source' parameter. Pass
INPUTS as is.
(trivial-build-system): Adjust accordingly.
* guix/build-system/gnu.scm (%store, inputs-search-paths,
standard-search-paths, expand-inputs, standard-inputs): Remove.
(gnu-lower): New procedure.
(gnu-build): Remove 'source' and #:implicit-inputs? parameters.
Remove 'implicit-inputs' and 'implicit-search-paths' variables. Get
the source from INPUT-DRVS.
(gnu-cross-build): Likewise.
(standard-cross-packages): Remove call to 'standard-packages'.
(standard-cross-inputs, standard-cross-search-paths): Remove.
(gnu-build-system): Remove 'build' and 'cross-build'; add 'lower'.
* guix/build-system/cmake.scm (lower): New procedure.
(cmake-build): Remove 'source' and #:cmake parameters. Use INPUTS and
SEARCH-PATHS as is. Get the source from INPUTS.
* guix/build-system/perl.scm: Likewise.
* guix/build-system/python.scm: Likewise.
* guix/build-system/ruby.scm: Likewise.
* gnu/packages/cross-base.scm (cross-gcc): Change "cross-linux-headers"
to "linux-headers".
(cross-libc)[xlinux-headers]: Pass #:implicit-cross-inputs? #f.
Likewise. In 'propagated-inputs', change "cross-linux-headers" to
"linux-headers".
* guix/git-download.scm (git-fetch): Use 'standard-packages' instead of
'standard-inputs'.
* tests/builders.scm ("gnu-build-system"): Remove use of
'build-system-builder'.
("gnu-build"): Remove 'source' and #:implicit-inputs? arguments to
'gnu-build'.
* tests/packages.scm ("search paths"): Adjust to new build system API.
("package-cross-derivation, no cross builder"): Likewise.
* doc/guix.texi (Build Systems): Add paragraph on bags.
2014-10-03 12:06:16 -04:00
|
|
|
|
(substitute-keyword-arguments
|
|
|
|
|
`(#:implicit-cross-inputs? #f
|
|
|
|
|
,@(package-arguments linux-libre-headers))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
((#:phases phases)
|
|
|
|
|
`(alist-replace
|
|
|
|
|
'build
|
|
|
|
|
(lambda _
|
|
|
|
|
(setenv "ARCH" ,(system->linux-architecture target))
|
|
|
|
|
(format #t "`ARCH' set to `~a' (cross compiling)~%" (getenv "ARCH"))
|
|
|
|
|
|
|
|
|
|
(and (zero? (system* "make" "defconfig"))
|
|
|
|
|
(zero? (system* "make" "mrproper" "headers_check"))))
|
|
|
|
|
,phases))))
|
2013-06-25 14:57:14 -04:00
|
|
|
|
(native-inputs `(("cross-gcc" ,xgcc)
|
|
|
|
|
("cross-binutils" ,xbinutils)
|
|
|
|
|
,@(package-native-inputs linux-libre-headers)))))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
|
|
|
|
|
(package (inherit glibc)
|
|
|
|
|
(name (string-append "glibc-cross-" target))
|
|
|
|
|
(arguments
|
|
|
|
|
(substitute-keyword-arguments
|
build-system: Introduce "bags" as an intermediate representation.
* guix/build-system.scm (<build-system>)[build, cross-build]: Remove.
[lower]: New field.
(<bag>): New record type.
(make-bag): New procedure.
* guix/packages.scm (bag-transitive-inputs, bag-transitive-build-inputs,
bag-transitive-host-inputs, bag-transitive-target-inputs,
package->bag): New procedures.
(package-derivation): Use it; use the bag, apply its build procedure,
etc.
(package-cross-derivation): Likewise.
* gnu/packages/bootstrap.scm (raw-build, make-raw-bag): New procedure.
(%bootstrap-guile): Use them.
* guix/build-system/trivial.scm (lower): New procedure.
(trivial-build, trivial-cross-build): Remove 'source' parameter. Pass
INPUTS as is.
(trivial-build-system): Adjust accordingly.
* guix/build-system/gnu.scm (%store, inputs-search-paths,
standard-search-paths, expand-inputs, standard-inputs): Remove.
(gnu-lower): New procedure.
(gnu-build): Remove 'source' and #:implicit-inputs? parameters.
Remove 'implicit-inputs' and 'implicit-search-paths' variables. Get
the source from INPUT-DRVS.
(gnu-cross-build): Likewise.
(standard-cross-packages): Remove call to 'standard-packages'.
(standard-cross-inputs, standard-cross-search-paths): Remove.
(gnu-build-system): Remove 'build' and 'cross-build'; add 'lower'.
* guix/build-system/cmake.scm (lower): New procedure.
(cmake-build): Remove 'source' and #:cmake parameters. Use INPUTS and
SEARCH-PATHS as is. Get the source from INPUTS.
* guix/build-system/perl.scm: Likewise.
* guix/build-system/python.scm: Likewise.
* guix/build-system/ruby.scm: Likewise.
* gnu/packages/cross-base.scm (cross-gcc): Change "cross-linux-headers"
to "linux-headers".
(cross-libc)[xlinux-headers]: Pass #:implicit-cross-inputs? #f.
Likewise. In 'propagated-inputs', change "cross-linux-headers" to
"linux-headers".
* guix/git-download.scm (git-fetch): Use 'standard-packages' instead of
'standard-inputs'.
* tests/builders.scm ("gnu-build-system"): Remove use of
'build-system-builder'.
("gnu-build"): Remove 'source' and #:implicit-inputs? arguments to
'gnu-build'.
* tests/packages.scm ("search paths"): Adjust to new build system API.
("package-cross-derivation, no cross builder"): Likewise.
* doc/guix.texi (Build Systems): Add paragraph on bags.
2014-10-03 12:06:16 -04:00
|
|
|
|
`(;; Disable stripping (see above.)
|
|
|
|
|
#:strip-binaries? #f
|
|
|
|
|
|
|
|
|
|
;; This package is used as a target input, but it should not have
|
|
|
|
|
;; the usual cross-compilation inputs since that would include
|
|
|
|
|
;; itself.
|
|
|
|
|
#:implicit-cross-inputs? #f
|
|
|
|
|
|
2013-02-27 03:38:11 -05:00
|
|
|
|
,@(package-arguments glibc))
|
|
|
|
|
((#:configure-flags flags)
|
|
|
|
|
`(cons ,(string-append "--host=" target)
|
|
|
|
|
,flags))
|
|
|
|
|
((#:phases phases)
|
|
|
|
|
`(alist-cons-before
|
|
|
|
|
'configure 'set-cross-linux-headers-path
|
|
|
|
|
(lambda* (#:key inputs #:allow-other-keys)
|
build-system: Introduce "bags" as an intermediate representation.
* guix/build-system.scm (<build-system>)[build, cross-build]: Remove.
[lower]: New field.
(<bag>): New record type.
(make-bag): New procedure.
* guix/packages.scm (bag-transitive-inputs, bag-transitive-build-inputs,
bag-transitive-host-inputs, bag-transitive-target-inputs,
package->bag): New procedures.
(package-derivation): Use it; use the bag, apply its build procedure,
etc.
(package-cross-derivation): Likewise.
* gnu/packages/bootstrap.scm (raw-build, make-raw-bag): New procedure.
(%bootstrap-guile): Use them.
* guix/build-system/trivial.scm (lower): New procedure.
(trivial-build, trivial-cross-build): Remove 'source' parameter. Pass
INPUTS as is.
(trivial-build-system): Adjust accordingly.
* guix/build-system/gnu.scm (%store, inputs-search-paths,
standard-search-paths, expand-inputs, standard-inputs): Remove.
(gnu-lower): New procedure.
(gnu-build): Remove 'source' and #:implicit-inputs? parameters.
Remove 'implicit-inputs' and 'implicit-search-paths' variables. Get
the source from INPUT-DRVS.
(gnu-cross-build): Likewise.
(standard-cross-packages): Remove call to 'standard-packages'.
(standard-cross-inputs, standard-cross-search-paths): Remove.
(gnu-build-system): Remove 'build' and 'cross-build'; add 'lower'.
* guix/build-system/cmake.scm (lower): New procedure.
(cmake-build): Remove 'source' and #:cmake parameters. Use INPUTS and
SEARCH-PATHS as is. Get the source from INPUTS.
* guix/build-system/perl.scm: Likewise.
* guix/build-system/python.scm: Likewise.
* guix/build-system/ruby.scm: Likewise.
* gnu/packages/cross-base.scm (cross-gcc): Change "cross-linux-headers"
to "linux-headers".
(cross-libc)[xlinux-headers]: Pass #:implicit-cross-inputs? #f.
Likewise. In 'propagated-inputs', change "cross-linux-headers" to
"linux-headers".
* guix/git-download.scm (git-fetch): Use 'standard-packages' instead of
'standard-inputs'.
* tests/builders.scm ("gnu-build-system"): Remove use of
'build-system-builder'.
("gnu-build"): Remove 'source' and #:implicit-inputs? arguments to
'gnu-build'.
* tests/packages.scm ("search paths"): Adjust to new build system API.
("package-cross-derivation, no cross builder"): Likewise.
* doc/guix.texi (Build Systems): Add paragraph on bags.
2014-10-03 12:06:16 -04:00
|
|
|
|
(let ((linux (assoc-ref inputs "linux-headers")))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
(setenv "CROSS_CPATH"
|
|
|
|
|
(string-append linux "/include"))
|
|
|
|
|
#t))
|
|
|
|
|
,phases))))
|
2013-07-04 05:08:28 -04:00
|
|
|
|
|
2015-07-14 10:15:30 -04:00
|
|
|
|
;; Shadow the native "linux-headers" because glibc's recipe expects the
|
build-system: Introduce "bags" as an intermediate representation.
* guix/build-system.scm (<build-system>)[build, cross-build]: Remove.
[lower]: New field.
(<bag>): New record type.
(make-bag): New procedure.
* guix/packages.scm (bag-transitive-inputs, bag-transitive-build-inputs,
bag-transitive-host-inputs, bag-transitive-target-inputs,
package->bag): New procedures.
(package-derivation): Use it; use the bag, apply its build procedure,
etc.
(package-cross-derivation): Likewise.
* gnu/packages/bootstrap.scm (raw-build, make-raw-bag): New procedure.
(%bootstrap-guile): Use them.
* guix/build-system/trivial.scm (lower): New procedure.
(trivial-build, trivial-cross-build): Remove 'source' parameter. Pass
INPUTS as is.
(trivial-build-system): Adjust accordingly.
* guix/build-system/gnu.scm (%store, inputs-search-paths,
standard-search-paths, expand-inputs, standard-inputs): Remove.
(gnu-lower): New procedure.
(gnu-build): Remove 'source' and #:implicit-inputs? parameters.
Remove 'implicit-inputs' and 'implicit-search-paths' variables. Get
the source from INPUT-DRVS.
(gnu-cross-build): Likewise.
(standard-cross-packages): Remove call to 'standard-packages'.
(standard-cross-inputs, standard-cross-search-paths): Remove.
(gnu-build-system): Remove 'build' and 'cross-build'; add 'lower'.
* guix/build-system/cmake.scm (lower): New procedure.
(cmake-build): Remove 'source' and #:cmake parameters. Use INPUTS and
SEARCH-PATHS as is. Get the source from INPUTS.
* guix/build-system/perl.scm: Likewise.
* guix/build-system/python.scm: Likewise.
* guix/build-system/ruby.scm: Likewise.
* gnu/packages/cross-base.scm (cross-gcc): Change "cross-linux-headers"
to "linux-headers".
(cross-libc)[xlinux-headers]: Pass #:implicit-cross-inputs? #f.
Likewise. In 'propagated-inputs', change "cross-linux-headers" to
"linux-headers".
* guix/git-download.scm (git-fetch): Use 'standard-packages' instead of
'standard-inputs'.
* tests/builders.scm ("gnu-build-system"): Remove use of
'build-system-builder'.
("gnu-build"): Remove 'source' and #:implicit-inputs? arguments to
'gnu-build'.
* tests/packages.scm ("search paths"): Adjust to new build system API.
("package-cross-derivation, no cross builder"): Likewise.
* doc/guix.texi (Build Systems): Add paragraph on bags.
2014-10-03 12:06:16 -04:00
|
|
|
|
;; "linux-headers" input to point to the right thing.
|
|
|
|
|
(propagated-inputs `(("linux-headers" ,xlinux-headers)))
|
|
|
|
|
|
2015-03-25 16:26:31 -04:00
|
|
|
|
;; FIXME: 'static-bash' should really be an input, not a native input, but
|
|
|
|
|
;; to do that will require building an intermediate cross libc.
|
|
|
|
|
(inputs '())
|
|
|
|
|
|
2013-06-25 14:57:14 -04:00
|
|
|
|
(native-inputs `(("cross-gcc" ,xgcc)
|
|
|
|
|
("cross-binutils" ,xbinutils)
|
2015-03-25 16:26:31 -04:00
|
|
|
|
,@(package-inputs glibc) ;FIXME: static-bash
|
2013-06-25 14:57:14 -04:00
|
|
|
|
,@(package-native-inputs glibc)))))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;
|
|
|
|
|
;;; Concrete cross toolchains.
|
|
|
|
|
;;;
|
|
|
|
|
|
|
|
|
|
(define-public xgcc-mips64el
|
2015-01-14 13:40:58 -05:00
|
|
|
|
(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 <http://bugs.gnu.org/19598>.
|
|
|
|
|
(package (inherit xgcc)
|
2015-01-14 15:14:14 -05:00
|
|
|
|
(supported-systems (fold delete
|
|
|
|
|
(package-supported-systems xgcc)
|
|
|
|
|
'("mips64el-linux" "i686-linux"))))))
|
2013-02-27 03:38:11 -05:00
|
|
|
|
|
2014-11-21 18:22:51 -05:00
|
|
|
|
(define-public xgcc-avr
|
|
|
|
|
;; AVR cross-compiler, used to build AVR-Libc.
|
|
|
|
|
(let ((triplet "avr"))
|
|
|
|
|
(cross-gcc triplet
|
|
|
|
|
(cross-binutils triplet))))
|
|
|
|
|
|
2014-10-28 17:24:46 -04:00
|
|
|
|
(define-public xgcc-xtensa
|
|
|
|
|
;; Bare-bones Xtensa cross-compiler, used to build the Atheros firmware.
|
|
|
|
|
(cross-gcc "xtensa-elf"))
|
|
|
|
|
|
2015-01-07 15:55:23 -05:00
|
|
|
|
(define-public xgcc-armhf
|
2015-01-14 15:14:14 -05:00
|
|
|
|
(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)))))
|
2015-01-07 15:55:23 -05:00
|
|
|
|
|
2013-02-27 03:38:11 -05:00
|
|
|
|
;; (define-public xgcc-armel
|
|
|
|
|
;; (let ((triplet "armel-linux-gnueabi"))
|
|
|
|
|
;; (cross-gcc triplet
|
|
|
|
|
;; (cross-binutils triplet)
|
|
|
|
|
;; (cross-libc triplet))))
|