[PATCH] shell: Enable --target for guix shell (--development)

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Yarl Baudig
Owner
unassigned
Submitted by
Yarl Baudig
Severity
normal
Y
Y
Yarl Baudig wrote on 5 Dec 2022 21:30
(address . guix-patches@gnu.org)(name . Yarl Baudig)(address . yarl-baudig@mailoo.org)
20221205203051.22898-1-yarl-baudig@mailoo.org
This enable the use of --target for development inputs, that is:
with `guix shell`, includes the dependencies for cross-building packages
given with --development

* guix/scripts/environment.scm: Enable --target.
* guix/scripts/shell.scm: Enable --target.
* doc/guix.texi: Document it.
---
doc/guix.texi | 5 +++++
guix/scripts/environment.scm | 14 +++++++++++---
guix/scripts/shell.scm | 3 +++
3 files changed, 19 insertions(+), 3 deletions(-)

Toggle diff (80 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index a79b777826..f1da3a4865 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -6176,6 +6176,11 @@ environment.
@itemx -s @var{system}
Attempt to build for @var{system}---e.g., @code{i686-linux}.
+@item --target=@var{target}
+Attempt to build the environment dependencies (see @option{--development})
+for @var{target}--e.g., @code{aarch64-linux-gnu}. Useful to debug cross-build
+failures (@pxref{Debugging Build Failures}).
+
@item --container
@itemx -C
@cindex container
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 64597f6e9f..b269be828e 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -127,7 +127,9 @@ (define (show-environment-options-help)
(display (G_ "
-v, --verbosity=LEVEL use the given verbosity LEVEL"))
(display (G_ "
- --bootstrap use bootstrap binaries to build the environment")))
+ --bootstrap use bootstrap binaries to build the environment"))
+ (display (G_ "
+ --list-targets list available targets")))
(define (show-help)
(display (G_ "Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...]
@@ -144,6 +146,10 @@ (define (show-help)
--ad-hoc include all specified packages in the environment instead
of only their inputs"))
+ (display (G_ "
+ --target=TRIPLET cross-build inputs for non-adhoc packages for
+ TRIPLET--e.g., \"aarch64-linux-gnu\""))
+
(show-environment-options-help)
(newline)
(show-build-options-help)
@@ -277,7 +283,8 @@ (define %options
(append %transformation-options
%standard-build-options
- %standard-native-build-options)))
+ %standard-native-build-options
+ %standard-cross-build-options)))
(define (pick-all alist key)
"Return a list of values in ALIST associated with KEY."
@@ -332,7 +339,8 @@ (define (packages->outputs packages mode)
(('package 'package (? string? spec))
(manifest-entries
(package->development-manifest
- (transform (specification->package+output spec)))))
+ (transform (specification->package+output spec))
+ #:target (assoc-ref opts 'target))))
(('expression mode str)
;; Add all the outputs of the package STR evaluates to.
(packages->outputs (read/eval str) mode))
diff --git a/guix/scripts/shell.scm b/guix/scripts/shell.scm
index 2fc1dc942a..b2ae12cec2 100644
--- a/guix/scripts/shell.scm
+++ b/guix/scripts/shell.scm
@@ -62,6 +62,9 @@ (define (show-help)
(display (G_ "
-f, --file=FILE add to the environment the package FILE evaluates to"))
+ (display (G_ "
+ --target=TRIPLET cross-build development inputs packages for
+ TRIPLET--e.g., \"aarch64-linux-gnu\""))
(display (G_ "
-q inhibit loading of 'guix.scm' and 'manifest.scm'"))
(display (G_ "

base-commit: c3713d53e0bdf1186e08880b9e0ae6dd85f55fc4
--
2.38.1
L
L
Ludovic Courtès wrote on 14 Dec 2022 11:59
(name . Yarl Baudig)(address . yarl-baudig@mailoo.org)(address . 59843@debbugs.gnu.org)
87o7s6tfn0.fsf@gnu.org
Hi,

Yarl Baudig <yarl-baudig@mailoo.org> skribis:

Toggle quote (8 lines)
> This enable the use of --target for development inputs, that is:
> with `guix shell`, includes the dependencies for cross-building packages
> given with --development
>
> * guix/scripts/environment.scm: Enable --target.
> * guix/scripts/shell.scm: Enable --target.
> * doc/guix.texi: Document it.

This change won’t give something useful per se, because the environment
will contain a mixture of “host” and “build” inputs.

To make it work, we need two profiles: one for “build” inputs, and one
for “host/target” inputs. Search path environment variables must be
evaluated in a way that accounts for these two profiles. For example,
target libraries will appear on CROSS_C_INCLUDE_PATH but not on
C_INCLUDE_PATH.

Does that make sense?

IOW, it’s a trickier endeavor that one could hope for. :-)

Thanks,
Ludo’.
Y
Y
yarl baudig wrote on 14 Dec 2022 17:26
(address . ludo@gnu.org)(address . 59843@debbugs.gnu.org)
ea-mime-6399f94d-1275-607c7450@www.mailo.com
Toggle quote (18 lines)
>
> This change won’t give something useful per se, because the environment
> will contain a mixture of “host” and “build” inputs.
>
> To make it work, we need two profiles: one for “build” inputs, and one
> for “host/target” inputs. Search path environment variables must be
> evaluated in a way that accounts for these two profiles. For example,
> target libraries will appear on CROSS_C_INCLUDE_PATH but not on
> C_INCLUDE_PATH.
>
> Does that make sense?
>
> IOW, it’s a trickier endeavor that one could hope for. :-)
>
> Thanks,
> Ludo’.
>

Obviously, you know a lot more about this than I do. However (please correct me, I probably did not completely understand your point) I think it is useful and works for the goal I mentioned in the part of the patch concerning the manual. It can help debugging failing (cross-)builds because you source "environment-variables" and that's the reason why I sent this patch. I tried it with texinfo (because the cross-compilation fails and I want to fix it) and it seem to work (i.e. you have access to paths in CROSS_C_INCLUDE_PATH, for example). Maybe I missed something and you saw that "debugging cross-builds" is my intent. Please do tell.

I take avantage of having reached you to mention https://issues.guix.gnu.org/59839I was working on this in parallel and I may have made things confusing because (in 59839) that's --system I am talking about (see the last version, number 3, of the patch please)... Thank you a lot.
Y
Y
yarl baudig wrote on 14 Dec 2022 21:57
(address . ludo@gnu.org)(address . 59843@debbugs.gnu.org)
ea-mime-639a38c1-55fa-721b84fa@www.mailo.com
I responded too fast. You are right, something is wrong. Not every path is accessible. I will try to understand when I'll have some time.

---- Message d'origine ----
Toggle quote (34 lines)
> De : Ludovic Courtès <ludo@gnu.org>
> À : Yarl Baudig <yarl-baudig@mailoo.org>
> Sujet : Re: bug#59843: [PATCH] shell: Enable --target for guix shell (--development)
> Date : 14/12/2022 11:59:31 Europe/Paris
> Copie à : 59843@debbugs.gnu.org
>
> Hi,
>
> Yarl Baudig <yarl-baudig@mailoo.org> skribis:
>
> > This enable the use of --target for development inputs, that is:
> > with `guix shell`, includes the dependencies for cross-building packages
> > given with --development
> >
> > * guix/scripts/environment.scm: Enable --target.
> > * guix/scripts/shell.scm: Enable --target.
> > * doc/guix.texi: Document it.
>
> This change won’t give something useful per se, because the environment
> will contain a mixture of “host” and “build” inputs.
>
> To make it work, we need two profiles: one for “build” inputs, and one
> for “host/target” inputs. Search path environment variables must be
> evaluated in a way that accounts for these two profiles. For example,
> target libraries will appear on CROSS_C_INCLUDE_PATH but not on
> C_INCLUDE_PATH.
>
> Does that make sense?
>
> IOW, it’s a trickier endeavor that one could hope for. :-)
>
> Thanks,
> Ludo’.
>
L
L
Ludovic Courtès wrote on 21 Dec 2022 14:42
(name . yarl baudig)(address . yarl-baudig@mailoo.org)(address . 59843-done@debbugs.gnu.org)
87mt7g50vv.fsf_-_@gnu.org
Hi,

"yarl baudig" <yarl-baudig@mailoo.org> skribis:

Toggle quote (2 lines)
> I responded too fast. You are right, something is wrong. Not every path is accessible. I will try to understand when I'll have some time.

Alright! I’m closing this bug for now, but do get in touch on IRC or
guix-devel if you’d like to discuss it.

Thanks,
Ludo’.
Closed
?