Browse Source

build: Add `--target' option.

* guix/scripts/build.scm (derivations-from-package-expressions): Add
  `package-derivation' parameter.
  (show-help, %options): Add `--target'.
  (guix-build): Use `package-cross-derivation' when `--target' is
  passed.
* tests/guix-build.sh: Add dry-run test with `--target'.
* doc/guix.texi (Invoking guix build): Document `--target'.
version-0.8.3
Ludovic Courtès 9 years ago
parent
commit
e55ec43d8b
  1. 6
      doc/guix.texi
  2. 24
      guix/scripts/build.scm
  3. 3
      tests/guix-build.sh

6
doc/guix.texi

@ -1198,6 +1198,12 @@ different personalities. For instance, passing
@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
to build packages in a complete 32-bit environment.
@item --target=@var{triplet}
@cindex cross-compilation
Cross-build for @var{triplet}, which must be a valid GNU triplet, such
as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
configuration triplets,, configure, GNU Configure and Build System}).
@item --derivations
@itemx -d
Return the derivation paths, not the output paths, of the given

24
guix/scripts/build.scm

@ -38,9 +38,11 @@
(define %store
(make-parameter #f))
(define (derivations-from-package-expressions str system source?)
(define (derivations-from-package-expressions str package-derivation
system source?)
"Read/eval STR and return the corresponding derivation path for SYSTEM.
When SOURCE? is true, return the derivations of the package sources."
When SOURCE? is true, return the derivations of the package sources;
otherwise, use PACKAGE-DERIVATION to compute the derivation of a package."
(let ((p (read/eval-package-expression str)))
(if source?
(let ((source (package-source p)))
@ -71,6 +73,8 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
-S, --source build the packages' source derivations"))
(display (_ "
-s, --system=SYSTEM attempt to build for SYSTEM--e.g., \"i686-linux\""))
(display (_ "
--target=TRIPLET cross-build for TRIPLET--e.g., \"armel-linux-gnu\""))
(display (_ "
-d, --derivations return the derivation paths of the given packages"))
(display (_ "
@ -114,6 +118,10 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
(lambda (opt name arg result)
(alist-cons 'system arg
(alist-delete 'system result eq?))))
(option '("target") #t #f
(lambda (opt name arg result)
(alist-cons 'target arg
(alist-delete 'target result eq?))))
(option '(#\d "derivations") #f #f
(lambda (opt name arg result)
(alist-cons 'derivations-only? #t result)))
@ -222,13 +230,19 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
(with-error-handling
(let ((opts (parse-options)))
(define package->derivation
(match (assoc-ref opts 'target)
(#f package-derivation)
(triplet
(cut package-cross-derivation <> <> triplet <>))))
(parameterize ((%store (open-connection)))
(let* ((src? (assoc-ref opts 'source?))
(sys (assoc-ref opts 'system))
(drv (filter-map (match-lambda
(('expression . str)
(derivations-from-package-expressions str sys
src?))
(derivations-from-package-expressions
str package->derivation sys src?))
(('argument . (? derivation-path? drv))
drv)
(('argument . (? string? x))
@ -237,7 +251,7 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
(let ((s (package-source p)))
(package-source-derivation
(%store) s))
(package-derivation (%store) p sys))))
(package->derivation (%store) p sys))))
(_ #f))
opts))
(roots (filter-map (match-lambda

3
tests/guix-build.sh

@ -51,6 +51,9 @@ then false; else true; fi
rm -f "$result"
# Cross building.
guix build coreutils --target=mips64el-linux-gnu --dry-run --no-substitutes
# Parsing package names and versions.
guix build -n time # PASS
guix build -n time-1.7 # PASS, version found

Loading…
Cancel
Save