Message ID | 20221205203051.22898-1-yarl-baudig@mailoo.org |
---|---|
State | New |
Headers | show |
Series | [bug#59843] shell: Enable --target for guix shell (--development) | expand |
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’.
> > 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/59839 I 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.
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 ---- > 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’. >
Hi,
"yarl baudig" <yarl-baudig@mailoo.org> skribis:
> 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’.
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_ "