Browse Source
build-system/gnu: Unify with (guix build-system gnu-cross-build).
build-system/gnu: Unify with (guix build-system gnu-cross-build).
* guix/build/gnu-build-system.scm (set-paths): Add `native-inputs' and `native-search-paths' keyword parameters. Honor them. (configure): Add `target' and `native-inputs' keyword parameters. Look for Bash in NATIVE-INPUTS or INPUTS. Pass `--host' when TARGET is true. (strip): Add `strip-command' keyword parameter. Use it. * guix/build/gnu-cross-build.scm: Remove. * Makefile.am (MODULES): Adjust accordingly. * gnu/packages/acl.scm, gnu/packages/attr.scm, gnu/packages/base.scm, gnu/packages/bash.scm, gnu/packages/gawk.scm, gnu/packages/gettext.scm, gnu/packages/guile.scm, gnu/packages/libffi.scm, gnu/packages/libsigsegv.scm, gnu/packages/linux.scm, gnu/packages/ncurses.scm, gnu/packages/readline.scm, guix/build-system/gnu.scm: Replace `%standard-cross-phases' by `%standard-phases'. Remove references to (guix build gnu-cross-build).version-0.8.3

16 changed files with 54 additions and 192 deletions
-
1Makefile.am
-
2gnu/packages/acl.scm
-
2gnu/packages/attr.scm
-
4gnu/packages/base.scm
-
9gnu/packages/bash.scm
-
4gnu/packages/gawk.scm
-
2gnu/packages/gettext.scm
-
4gnu/packages/guile.scm
-
9gnu/packages/libffi.scm
-
4gnu/packages/libsigsegv.scm
-
10gnu/packages/linux.scm
-
2gnu/packages/ncurses.scm
-
4gnu/packages/readline.scm
-
6guix/build-system/gnu.scm
-
45guix/build/gnu-build-system.scm
-
138guix/build/gnu-cross-build.scm
@ -1,138 +0,0 @@ |
|||
;;; GNU Guix --- Functional package management for GNU |
|||
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> |
|||
;;; |
|||
;;; 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 (guix build gnu-cross-build) |
|||
#:use-module (guix build utils) |
|||
#:use-module ((guix build gnu-build-system) |
|||
#:renamer (symbol-prefix-proc 'build:)) |
|||
#:use-module (ice-9 ftw) |
|||
#:use-module (ice-9 match) |
|||
#:use-module (srfi srfi-1) |
|||
#:export (%standard-cross-phases |
|||
gnu-cross-build)) |
|||
|
|||
;;; Commentary: |
|||
;;; |
|||
;;; Extension of `gnu-build-system.scm' to support cross-compilation. |
|||
;;; |
|||
;;; Code: |
|||
|
|||
(define* (set-paths #:key inputs native-inputs |
|||
(search-paths '()) (native-search-paths '()) |
|||
#:allow-other-keys) |
|||
(define input-directories |
|||
(match inputs |
|||
(((_ . dir) ...) |
|||
dir))) |
|||
|
|||
(define native-input-directories |
|||
(match native-inputs |
|||
(((_ . dir) ...) |
|||
dir))) |
|||
|
|||
;; $PATH must refer only to native (host) inputs since target inputs are not |
|||
;; executable. |
|||
(set-path-environment-variable "PATH" '("bin" "sbin") |
|||
native-input-directories) |
|||
|
|||
;; Search paths for target inputs. |
|||
(for-each (match-lambda |
|||
((env-var (directories ...) separator) |
|||
(set-path-environment-variable env-var directories |
|||
input-directories |
|||
#:separator separator))) |
|||
search-paths) |
|||
|
|||
;; Search paths for native inputs. |
|||
(for-each (match-lambda |
|||
((env-var (directories ...) separator) |
|||
(set-path-environment-variable env-var directories |
|||
native-input-directories |
|||
#:separator separator))) |
|||
native-search-paths) |
|||
|
|||
;; Dump the environment variables as a shell script, for handy debugging. |
|||
(system "export > environment-variables")) |
|||
|
|||
(define* (configure #:key |
|||
inputs outputs (configure-flags '()) out-of-source? |
|||
target native-inputs |
|||
#:allow-other-keys) |
|||
(format #t "configuring for cross-compilation to `~a'~%" target) |
|||
(apply (assoc-ref build:%standard-phases 'configure) |
|||
#:configure-flags (cons (string-append "--host=" target) |
|||
configure-flags) |
|||
|
|||
;; XXX: The underlying `configure' phase looks for Bash among |
|||
;; #:inputs, so fool it this way. |
|||
#:inputs native-inputs |
|||
|
|||
#:outputs outputs |
|||
#:out-of-source? out-of-source? |
|||
'())) |
|||
|
|||
(define* (strip #:key target outputs (strip-binaries? #t) |
|||
(strip-flags '("--strip-debug")) |
|||
(strip-directories '("lib" "lib64" "libexec" |
|||
"bin" "sbin")) |
|||
#:allow-other-keys) |
|||
;; TODO: The only difference with `strip' in gnu-build-system.scm is the |
|||
;; name of the strip command; factorize it. |
|||
|
|||
(define (strip-dir dir) |
|||
(format #t "stripping binaries in ~s with flags ~s~%" |
|||
dir strip-flags) |
|||
(file-system-fold (const #t) |
|||
(lambda (path stat result) ; leaf |
|||
(zero? (apply system* |
|||
(string-append target "-strip") |
|||
(append strip-flags (list path))))) |
|||
(const #t) ; down |
|||
(const #t) ; up |
|||
(const #t) ; skip |
|||
(lambda (path stat errno result) |
|||
(format (current-error-port) |
|||
"strip: failed to access `~a': ~a~%" |
|||
path (strerror errno)) |
|||
#f) |
|||
#t |
|||
dir)) |
|||
|
|||
(or (not strip-binaries?) |
|||
(every strip-dir |
|||
(append-map (match-lambda |
|||
((_ . dir) |
|||
(filter-map (lambda (d) |
|||
(let ((sub (string-append dir "/" d))) |
|||
(and (directory-exists? sub) sub))) |
|||
strip-directories))) |
|||
outputs)))) |
|||
|
|||
(define %standard-cross-phases |
|||
;; The standard phases when cross-building. |
|||
(let ((replacements `((set-paths ,set-paths) |
|||
(configure ,configure) |
|||
(strip ,strip)))) |
|||
(fold (lambda (replacement phases) |
|||
(match replacement |
|||
((name proc) |
|||
(alist-replace name proc phases)))) |
|||
(alist-delete 'check build:%standard-phases) |
|||
replacements))) |
|||
|
|||
;;; gnu-cross-build.scm ends here |
Write
Preview
Loading…
Cancel
Save
Reference in new issue