Skip to content
Snippets Groups Projects
Commit e55ec43d authored by Ludovic Courtès's avatar Ludovic Courtès
Browse files

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'.
parent 264218a4
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -38,9 +38,11 @@ (define-module (guix scripts build)
(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 @@ (define (show-help)
-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 @@ (define %options
(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 @@ (define (find-package request)
(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 @@ (define (find-package request)
(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
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment