bug#55657: libgccjit is unusable

2022-05-26 Thread Liliana Marie Prikler
Hi Guix,

with the release of Emacs 28.1, there has been some demand to enable
native-compilation.  While trying to set that up, I've come to realize
that no matter how I slice it, I can't make libgccjit usable.

My test:

$ cd /tmp
$ # fetch the "Hello World" [1] and insert it into gccjit-test.c
$ guix shell --pure gcc-toolchain@9 libgccjit@9 -- \
  gcc gccjit-test.c -o gccjit-test -lgccjit
$ ./gccjit-test
x86_64-unknown-linux-gnu-gcc-9.4.0: fatal error: cannot execute 'as':
execvp: No such file or directory
compilation terminated.

Welp, okay, so maybe testing gccjit outside of its installation does
not work.  What if we try it inside the shell (we can always propagate
libgccjit, no?)

guix shell gcc-toolchain@9 libgccjit@9 -- ./gccjit-test
ld: cannot find crtbeginS.o: Datei oder Verzeichnis nicht gefunden
ld: cannot find -lgcc
ld: cannot find -lgcc
collect2: Fehler: ld gab 1 als Ende-Status zurück
libgccjit.so: error: error invoking gcc driver
NULL result

For the record, Emacs 28 fails with a different error during
configuration, though interestingly they use a smaller program and
appear to omit -lgccjit.
./conftest: error while loading shared libraries: libgccjit.so.0:
cannot open shared object file: No such file or directory

I'm at a loss.  Is there any way to make libgccjit actually usable?

[1] https://gcc.gnu.org/onlinedocs/jit/intro/tutorial01.html





bug#55657: libgccjit is unusable

2022-06-04 Thread Remco van 't Veer
2022/05/26 15:07, Liliana Marie Prikler:

> Hi Guix,
>
> with the release of Emacs 28.1, there has been some demand to enable
> native-compilation.  While trying to set that up, I've come to realize
> that no matter how I slice it, I can't make libgccjit usable.

The guixrus channel has an emacs which seems to support gccjit.  I have
not tried it myself.

  https://git.sr.ht/~whereiseveryone/guixrus/

Especially:

  
https://git.sr.ht/~whereiseveryone/guixrus/tree/master/item/guixrus/packages/emacs.scm
  
https://git.sr.ht/~whereiseveryone/guixrus/tree/master/item/guixrus/packages/gcc.scm

Maybe you can borrow some knowledge there? ;-)

Cheers,
Remco





bug#55657: libgccjit is unusable

2022-06-04 Thread Tobias Geerinckx-Rice via Bug reports for GNU Guix
Lily,

I think a lot of people are using emacs-native-comp from here: 
https://github.com/flatwhatson/guix-channel/blob/master/flat/packages/emacs.scm

I don't know if I've updated mine since your failed experiments, but it has 
worked forever...

Kind regards,

T G-R

Sent on the go.  Excuse or enjoy my brevity.





bug#55657: libgccjit is unusable

2022-06-04 Thread Tobias Geerinckx-Rice via Bug reports for GNU Guix
Meant to include link to 
https://github.com/flatwhatson/guix-channel/blob/657da22f0229b978b7bf4e4d476f59f17f6a175f/flat/packages/gcc.scm#L27
 which is where the majic happens

Kind regards,

T G-R

Sent on the go.  Excuse or enjoy my brevity.





bug#55657: libgccjit is unusable

2022-06-04 Thread Liliana Marie Prikler
Am Samstag, dem 04.06.2022 um 14:25 + schrieb Tobias Geerinckx-
Rice:
> Meant to include link to
> https://github.com/flatwhatson/guix-channel/blob/657da22f0229b978b7bf4e4d476f59f17f6a175f/flat/packages/gcc.scm#L27
>  which is where the majic happens
I'm not personally using that channel, but I noticed this issue by
trying to adapt that recipe towards master.  Now there's a chance that
I've made an error in my copypasta game, but I'm pretty sure the
current state of libgccjit is not a good one regardless.

Cheers





bug#55657: libgccjit is unusable

2022-06-27 Thread John Kehayias via Bug reports for GNU Guix
Hello,

I currently use the flatwhatson channel (cc'ed on this email, hope that is okay 
Andrew!) and it has worked well for Emacs, though never tried anything else 
with libgccjit. It would be great to get this upstreamed in Guix, especially 
since libgccjit is a beast to build (more than emacs if I remember correctly).

Happy to help test and work on this, let me know anything I can do.

Thanks,
John





bug#55657: libgccjit is unusable

2022-06-27 Thread Liliana Marie Prikler
Hi,

Am Dienstag, dem 28.06.2022 um 00:53 + schrieb John Kehayias:
> Hello,
> 
> I currently use the flatwhatson channel (cc'ed on this email, hope
> that is okay Andrew!) and it has worked well for Emacs, though never
> tried anything else with libgccjit. It would be great to get this
> upstreamed in Guix, especially since libgccjit is a beast to build
> (more than emacs if I remember correctly).
Keyword here is "has worked for emacs".  I've tried porting the logic
from flatwhatson's channel over, but regardless of what I do, it
already fails in the configure step of Emacs (in a manner that's
reproducible outside as well).  Thus, I think this is a bug in
libgccjit (or perhaps our packaging of it) that simply happened to be
ignored during development of Emacs 28, but no longer in the release.

Cheers





bug#55657: libgccjit is unusable

2022-06-28 Thread John Kehayias via Bug reports for GNU Guix
Hi,

--- Original Message ---
On Tuesday, June 28th, 2022 at 12:17 AM, Liliana Marie Prikler wrote:

> Keyword here is "has worked for emacs". I've tried porting the logic
> from flatwhatson's channel over, but regardless of what I do, it
> already fails in the configure step of Emacs (in a manner that's
> reproducible outside as well). Thus, I think this is a bug in
> libgccjit (or perhaps our packaging of it) that simply happened to be
> ignored during development of Emacs 28, but no longer in the release.
>

Sorry, I should be extra clear that I mean has in the past and continues to 
work for Emacs. I've been using emacs-pgtk-native-comp through the flatwhatson 
channel from well before v28 was released. Currently I'm using 
emacs-pgtk-native-comp-28.1.50-223.3ddccb5. Everything has built, installed, 
and run fine for as long as I have been using it. Just in case that was in 
question, and as a point of reference.

Anyway, I'll try to reproduce when I can (tomorrow likely) what you reported in 
the first message using this setup, if that is of use.

Appreciate the efforts from everyone working on this!
John





bug#55657: libgccjit is unusable

2022-08-03 Thread John Kehayias via Bug reports for GNU Guix
Hi everyone,

Found out some useful info and a work around for the original reported issue of 
the simple "hello world" of gccjit not working.


--- Original Message ---
On Tuesday, June 28th, 2022 at 1:16 AM, John Kehayias wrote:

> Hi,
>
> --- Original Message ---
> On Tuesday, June 28th, 2022 at 12:17 AM, Liliana Marie Prikler wrote:
>
> > Keyword here is "has worked for emacs". I've tried porting the logic
> > from flatwhatson's channel over, but regardless of what I do, it
> > already fails in the configure step of Emacs (in a manner that's
> > reproducible outside as well). Thus, I think this is a bug in
> > libgccjit (or perhaps our packaging of it) that simply happened to be
> > ignored during development of Emacs 28, but no longer in the release.
>
>
> Sorry, I should be extra clear that I mean has in the past and continues to 
> work for Emacs. I've been using emacs-pgtk-native-comp through the 
> flatwhatson channel from well before v28 was released. Currently I'm using 
> emacs-pgtk-native-comp-28.1.50-223.3ddccb5. Everything has built, installed, 
> and run fine for as long as I have been using it. Just in case that was in 
> question, and as a point of reference.
>
> Anyway, I'll try to reproduce when I can (tomorrow likely) what you reported 
> in the first message using this setup, if that is of use.
>

I was able to reproduce the original error, though I used the libgccjit package 
from the flatwhatson channel, at v11.3.0 (along with GCC at that version). For 
good measure, I also used the tutorial at that version, just in case 
https://gcc.gnu.org/onlinedocs/gcc-11.3.0/jit/intro/tutorial01.html  I chose 
this version since that is what emacs-native-comp from that channel is built 
with.

Searching for these error messages of missing libraries/files, I found

https://ref.strikr.io/jit/internals/index.html#environment-variables

and a bug report at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87808

I didn't dive into the details and I'm not expert here, but it gave me the 
clues to work around it. Seems that where gccjit looks for things has some 
assumptions (bugs?) which we can fix at runtime with:

LIBRARY_PATH=$GUIX_ENVIRONMENT/lib/gcc/x86_64-unknown-linux-gnu/11.3.0:$LIBRARY_PATH
 ./gccjittest

The errors reported before were solved with this LIBRARY_PATH addition of the 
lib/gcc subdirectory. So, the test program runs in

guix shell gcc-toolchain@11 libgccjit@11 --pure

where I compiled to gccjittest following the tutorial directions (no change to 
LIBRARY_PATH).

So, looking at the emacs-native-comp definition in flatwhatson, we can see that 
a phase is used to set LIBRARY_PATH before configure just as I did here: 
https://github.com/flatwhatson/guix-channel/blob/master/flat/packages/emacs.scm#L65

Hope this is helpful and unblocks libgccjit and emacs-native-comp for Guix!

John





bug#55657: libgccjit is unusable

2022-08-03 Thread Liliana Marie Prikler
Hi John,

Am Mittwoch, dem 03.08.2022 um 21:13 + schrieb John Kehayias:
> I didn't dive into the details and I'm not expert here, but it gave
> me the clues to work around it. Seems that where gccjit looks for
> things has some assumptions (bugs?) which we can fix at runtime with:
> 
> LIBRARY_PATH=$GUIX_ENVIRONMENT/lib/gcc/x86_64-unknown-linux-
> gnu/11.3.0:$LIBRARY_PATH ./gccjittest
> 
> The errors reported before were solved with this LIBRARY_PATH
> addition of the lib/gcc subdirectory. So, the test program runs in
> 
> guix shell gcc-toolchain@11 libgccjit@11 --pure
> 
> where I compiled to gccjittest following the tutorial directions (no
> change to LIBRARY_PATH).
while this does help insofar as I now know which snippet I forgot to
copy, I do still think that this leaves us with two unreasonable
options if we want to use emacs to compile other packages:

1. Propagate gcc-toolchain from emacs.
2. Patch LIBRARY_PATH not just before configuration, but also via a
wrapper.

At the very least I don't see how Emacs would be able to compile other
packages to native code without either of the above.

WDYT?





bug#55657: libgccjit is unusable

2022-08-04 Thread Andrew Whatson
Hi John, Liliana,

Sorry I haven't jumped in before now, I appreciate your efforts to
bring emacs native-comp to guix!

On Thu, 4 Aug 2022 at 04:26, Liliana Marie Prikler
 wrote:
>
> while this does help insofar as I now know which snippet I forgot to
> copy, I do still think that this leaves us with two unreasonable
> options if we want to use emacs to compile other packages:
>
> 1. Propagate gcc-toolchain from emacs.
> 2. Patch LIBRARY_PATH not just before configuration, but also via a
> wrapper.
>
> At the very least I don't see how Emacs would be able to compile other
> packages to native code without either of the above.
>
> WDYT?

The solution used in the package-definition in my channel is to patch
`comp.el` to directly reference the necessary gcc/glibc paths instead
of relying on the environment.  This occurs in the
"patch-driver-options" step immediately after the "set-libgccjit-path"
step mentioned earlier.  This makes gcc-toolchain part of emacs
closure, without requiring it to be propagated into the profile.

If I understand the problem correctly, that should suffice?

Cheers,
Andrew





bug#55657: libgccjit is unusable

2022-08-04 Thread Liliana Marie Prikler
Am Donnerstag, dem 04.08.2022 um 04:48 + schrieb Andrew Whatson:
> Hi John, Liliana,
> 
> Sorry I haven't jumped in before now, I appreciate your efforts to
> bring emacs native-comp to guix!
> 
> On Thu, 4 Aug 2022 at 04:26, Liliana Marie Prikler
>  wrote:
> > 
> > while this does help insofar as I now know which snippet I forgot
> > to
> > copy, I do still think that this leaves us with two unreasonable
> > options if we want to use emacs to compile other packages:
> > 
> > 1. Propagate gcc-toolchain from emacs.
> > 2. Patch LIBRARY_PATH not just before configuration, but also via a
> > wrapper.
> > 
> > At the very least I don't see how Emacs would be able to compile
> > other
> > packages to native code without either of the above.
> > 
> > WDYT?
> 
> The solution used in the package-definition in my channel is to patch
> `comp.el` to directly reference the necessary gcc/glibc paths instead
> of relying on the environment.  This occurs in the
> "patch-driver-options" step immediately after the "set-libgccjit-
> path" step mentioned earlier.  This makes gcc-toolchain part of emacs
> closure, without requiring it to be propagated into the profile.
> 
> If I understand the problem correctly, that should suffice?
But if I read your recipe correctly, you're not resolving %host-type in
those options.  Does that really suffice?





bug#55657: libgccjit is unusable

2022-08-04 Thread Andrew Whatson
On Thu, 4 Aug 2022 at 16:52, Liliana Marie Prikler
 wrote:
>
> > The solution used in the package-definition in my channel is to patch
> > `comp.el` to directly reference the necessary gcc/glibc paths instead
> > of relying on the environment.  This occurs in the
> > "patch-driver-options" step immediately after the "set-libgccjit-
> > path" step mentioned earlier.  This makes gcc-toolchain part of emacs
> > closure, without requiring it to be propagated into the profile.
> >
> > If I understand the problem correctly, that should suffice?
>
> But if I read your recipe correctly, you're not resolving %host-type in
> those options.  Does that really suffice?

Ah, yes that is a little confusing.  This is a quirk of the different
behaviour of the LIBRARY_PATH environment variable and the -B flag to
gcc.

I recommend reading about "-Bprefix" in `man gcc`, but in short it
tries those paths with and without "machine/version" appended for the
target machine and compiler version.  We *could* hard-code those, but
it isn't necessary, and it seemed like that might cause problems if
someone's brave enough to attempt cross-compilation of native-comp
emacs.

A major benefit of patching "comp.el" directly is that it avoids
leaking gcc into the user's environment.  It's possible that someone
is running emacs in a profile with a specific version of gcc, maybe
without libgccjit support (eg. while hacking on some legacy code), so
having emacs insist on a libgccjit-compatible gcc present in the
environment at runtime would cause lots of problems.

The other important bit is the libgccjit package.  The one in guix
mainline works fine, it should be possible to get a working libgccjit
as-is.  I updated the package definition on my channel for the
following reasons:

a) Support newer gcc versions

While developing native-comp support for emacs, Andrea found and fixed
some libgccjit bugs which made their way into subsequent releases of
gcc.  The native-comp library includes work-arounds for these
problems, but produces faster/smaller code with a fresher libgccjit.

b) Reduce compilation time

The definition in guix is basically the standard gcc build, but with
libgccjit also enabled.  This results in an arduous double-bootstrap
and building a bunch of compilers and libraries that are completely
unnecessary and unused by libgccjit.  I've disabled all the
unnecessary stuff and depend on the main gcc package to build
libgccjit, relying on the fact that it's already properly
bootstrapped.  It's much quicker to build, which is important if you
don't have substitutes.

Hope this helps,
Andrew





bug#55657: libgccjit is unusable

2022-08-05 Thread Liliana Marie Prikler
Am Freitag, dem 05.08.2022 um 00:59 + schrieb Andrew Whatson:
> On Thu, 4 Aug 2022 at 16:52, Liliana Marie Prikler
>  wrote
> > But if I read your recipe correctly, you're not resolving %host-
> > type in those options.  Does that really suffice?
> 
> Ah, yes that is a little confusing.  This is a quirk of the different
> behaviour of the LIBRARY_PATH environment variable and the -B flag to
> gcc.
> 
> I recommend reading about "-Bprefix" in `man gcc`, but in short it
> tries those paths with and without "machine/version" appended for the
> target machine and compiler version.  We *could* hard-code those, but
> it isn't necessary, and it seemed like that might cause problems if
> someone's brave enough to attempt cross-compilation of native-comp
> emacs.
Fair enough.  The compiler driver does not appear to be the failing
part anyway, though given the status quo I can't exactly claim it is
not failing.

> The other important bit is the libgccjit package.  The one in guix
> mainline works fine, it should be possible to get a working libgccjit
> as-is.  
>From my own experience, I doubt that.  Read also the thread title.

> I updated the package definition on my channel for the following
> reasons:
> 
> a) Support newer gcc versions
> 
> While developing native-comp support for emacs, Andrea found and
> fixed some libgccjit bugs which made their way into subsequent
> releases of gcc.  The native-comp library includes work-arounds for
> these problems, but produces faster/smaller code with a fresher
> libgccjit.
> 
> b) Reduce compilation time
> 
> The definition in guix is basically the standard gcc build, but with
> libgccjit also enabled.  This results in an arduous double-bootstrap
> and building a bunch of compilers and libraries that are completely
> unnecessary and unused by libgccjit.  I've disabled all the
> unnecessary stuff and depend on the main gcc package to build
> libgccjit, relying on the fact that it's already properly
> bootstrapped.  It's much quicker to build, which is important if you
> don't have substitutes.
> 
> Hope this helps,
> Andrew
I actually am at a loss, so instead of referring to your code, I shall
share mine.  Note that, style aside, it should actually perform the
same steps as yours, but fails to do so.  I also tried adding the
unversioned lib directory to LIBRARY_PATH and setting LD_LIBRARY_PATH
to little fanfare.  Whatever I do, it seems configure wants to smoke a
different joint.

Cheers

;; gcc.scm

(define-public (make-libgccjit gcc)
  (package
(inherit gcc)
(name "libgccjit")
(outputs (delete "lib" (package-outputs gcc)))
(properties (alist-delete 'hidden? (package-properties gcc)))
(arguments
 (substitute-keyword-arguments (package-arguments gcc)
   ((#:modules _ '())
'((guix build gnu-build-system)
  (guix build utils)
  (ice-9 regex)
  (srfi srfi-1)
  (srfi srfi-26)))
   ((#:configure-flags flags)
#~(cons* "--disable-bootstrap"
 "--disable-libatomic"
 "--disable-libgomp"
 "--disable-libquadmath"
 "--disable-libssp"
 "--enable-host-shared"
 "--enable-languages=jit"
 (remove (cut string-match "--enable-languages.*" <>)
 #$flags)))
   ((#:phases phases)
#~(modify-phases #$phases
(add-after 'install 'remove-broken-or-conflicting-files
  (lambda* (#:key outputs #:allow-other-keys)
(for-each delete-file
  (find-files
   (string-append (assoc-ref outputs "out")
"/bin")
   ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-
.*)"
(inputs (modify-inputs (package-inputs gcc)
  (delete "libstdc++")))
(native-inputs (modify-inputs (package-native-inputs gcc)
 (prepend gcc)))
(synopsis "GCC library generating machine code on-the-fly at
runtime")
(description
 "This package is part of the GNU Compiler Collection and provides
an
embeddable library for generating machine code on-the-fly at runtime. 
This
shared library can then be dynamically-linked into bytecode
interpreters and
other such programs that want to generate machine code on-the-fly at
run-time.
It can also be used for ahead-of-time code generation for building
standalone
compilers.  The just-in-time (jit) part of the name is now something of
a
misnomer.")))

(define-public libgccjit-9 (make-libgccjit gcc-9))
(define-public libgccjit-10 (make-libgccjit gcc-10))
(define-public libgccjit-11 (make-libgccjit gcc-11))
(define-public libgccjit-12 (make-libgccjit gcc-12))

(define-public libgccjit libgccjit-10)

;; emacs.scm

(define-public emacs
  (package
(name "emacs")
(version "28.1")
(source (origin
  (method url-fetch)
  (uri (string-append "mirror://gnu/emacs/emacs-"
  ve

bug#55657: libgccjit is unusable

2022-08-05 Thread John Kehayias via Bug reports for GNU Guix
Hi,

Looks like the code you sent got line wrapped and I couldn't easily untangle 
it. The difference that pops out to me is how you are locating the lib/gcc 
directory, is it maybe picking up from the build system rather than libgccjit? 
(though I think gcc:lib should be the same here, but not gcc-toolchain)

In any event, I just want to reiterate that the libgccjit and emacs-native-comp 
from Andrew's channel does indeed work: it compiles, runs, and does native 
compilations successfully. So hopefully we've narrowed down now that there is 
some difference in the code you tried and from Andrew's that is leading to 
different behavior.

John





bug#55657: libgccjit is unusable

2022-08-05 Thread Liliana Marie Prikler
Am Freitag, dem 05.08.2022 um 20:01 + schrieb John Kehayias:
> Hi,
> 
> Looks like the code you sent got line wrapped and I couldn't easily
> untangle it. The difference that pops out to me is how you are
> locating the lib/gcc directory, is it maybe picking up from the build
> system rather than libgccjit? (though I think gcc:lib should be the
> same here, but not gcc-toolchain)
No: /gnu/store/640hfpr069hvqv9gcs0ayq0is21zfii6-libgccjit-
10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0

> In any event, I just want to reiterate that the libgccjit and emacs-
> native-comp from Andrew's channel does indeed work: it compiles,
> runs, and does native compilations successfully. So hopefully we've
> narrowed down now that there is some difference in the code you tried
> and from Andrew's that is leading to different behavior.
The style changes are not the only thing at play here, though.  In
particular, I am trying to build Emacs 28.1, whereas Andrew builds
other versions, though notably the newest one ought to include the
smoke test.  You could also try other combinations for libgccjit and
gcc to see if those make a difference – last time I tried it did not.

Attached the definitions as a file this time.

Cheers
;; gcc.scm

(define-public (make-libgccjit gcc)
  (package
(inherit gcc)
(name "libgccjit")
(outputs (delete "lib" (package-outputs gcc)))
(properties (alist-delete 'hidden? (package-properties gcc)))
(arguments
 (substitute-keyword-arguments (package-arguments gcc)
   ((#:modules _ '())
'((guix build gnu-build-system)
  (guix build utils)
  (ice-9 regex)
  (srfi srfi-1)
  (srfi srfi-26)))
   ((#:configure-flags flags)
#~(cons* "--disable-bootstrap"
 "--disable-libatomic"
 "--disable-libgomp"
 "--disable-libquadmath"
 "--disable-libssp"
 "--enable-host-shared"
 "--enable-languages=jit"
 (remove (cut string-match "--enable-languages.*" <>)
 #$flags)))
   ((#:phases phases)
#~(modify-phases #$phases
(add-after 'install 'remove-broken-or-conflicting-files
  (lambda* (#:key outputs #:allow-other-keys)
(for-each delete-file
  (find-files
   (string-append (assoc-ref outputs "out") "/bin")
   ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"
(inputs (modify-inputs (package-inputs gcc)
  (delete "libstdc++")))
(native-inputs (modify-inputs (package-native-inputs gcc)
 (prepend gcc)))
(synopsis "GCC library generating machine code on-the-fly at runtime")
(description
 "This package is part of the GNU Compiler Collection and provides an
embeddable library for generating machine code on-the-fly at runtime.  This
shared library can then be dynamically-linked into bytecode interpreters and
other such programs that want to generate machine code on-the-fly at run-time.
It can also be used for ahead-of-time code generation for building standalone
compilers.  The just-in-time (jit) part of the name is now something of a
misnomer.")))

(define-public libgccjit-9 (make-libgccjit gcc-9))
(define-public libgccjit-10 (make-libgccjit gcc-10))
(define-public libgccjit-11 (make-libgccjit gcc-11))
(define-public libgccjit-12 (make-libgccjit gcc-12))

(define-public libgccjit libgccjit-10)

;; emacs.scm

(define-public emacs
  (package
(name "emacs")
(version "28.1.90")
(source (origin
  (method url-fetch)
  (uri (string-append "mirror://gnu/emacs/emacs-"
  version ".tar.xz"))
  (sha256
   (base32
"1qbmmmhnjhn4lvzsnyk7l5ganbi6wzbm38jc1a7hhyh3k78b7c98"))
  (patches (search-patches "emacs-exec-path.patch"
   "emacs-fix-scheme-indent-function.patch"
   "emacs-source-date-epoch.patch"))
  (modules '((guix build utils)))
  (snippet
   '(with-directory-excursion "lisp"
  ;; Delete the bundled byte-compiled elisp files and generated
  ;; autoloads.
  (for-each delete-file
(append (find-files "." "\\.elc$")
(find-files "." "loaddefs\\.el$")
(find-files "eshell" "^esh-groups\\.el$")))

  ;; Make sure Tramp looks for binaries in the right places on
  ;; remote Guix System machines, where 'getconf PATH' returns
  ;; something bogus.
  (substitute* "net/tramp.el"
;; Patch the line after "(defcustom tramp-remote-path".
(("\\(tramp-default-remote-path")
 (format #f "

bug#55657: libgccjit is unusable

2022-08-05 Thread John Kehayias via Bug reports for GNU Guix
Hello,

--- Original Message ---
On Friday, August 5th, 2022 at 5:31 PM, Liliana Marie Prikler wrote:

> The style changes are not the only thing at play here, though. In
> particular, I am trying to build Emacs 28.1, whereas Andrew builds
> other versions, though notably the newest one ought to include the
> smoke test. You could also try other combinations for libgccjit and
> gcc to see if those make a difference – last time I tried it did not.
>

I'm seeing the same version, 28.1.90, in yours and from Andrew's channel. And 
just checking that indeed it is 28.1.90 that I've been running locally from 
that channel, with libgccjit@11.3.0. I have not tried with v29.

> Attached the definitions as a file this time.
>

Thanks, will play around with it this weekend to see if I have anything useful 
to add.







bug#55657: libgccjit is unusable

2022-08-05 Thread Liliana Marie Prikler
Am Samstag, dem 06.08.2022 um 05:37 + schrieb John Kehayias:
> Hello,
> 
> --- Original Message ---
> On Friday, August 5th, 2022 at 5:31 PM, Liliana Marie Prikler wrote:
> 
> > The style changes are not the only thing at play here, though. In
> > particular, I am trying to build Emacs 28.1, whereas Andrew builds
> > other versions, though notably the newest one ought to include the
> > smoke test. You could also try other combinations for libgccjit and
> > gcc to see if those make a difference – last time I tried it did
> > not.
> > 
> 
> I'm seeing the same version, 28.1.90, in yours and from Andrew's
> channel. And just checking that indeed it is 28.1.90 that I've been
> running locally from that channel, with libgccjit@11.3.0. I have not
> tried with v29.
Pardon that, it's an artifact from trying to fetch 28.1.90 via url-
fetch and failing.  Note that the hash is the one for 28.1.





bug#55657: libgccjit is unusable

2022-08-06 Thread John Kehayias via Bug reports for GNU Guix
Hi,

--- Original Message ---
On Saturday, August 6th, 2022 at 1:53 AM, Liliana Marie Prikler 
 wrote:

> Pardon that, it's an artifact from trying to fetch 28.1.90 via url-
> fetch and failing. Note that the hash is the one for 28.1.

On Andrew's channel I can change the version/commit/hash to 28.1 and it builds 
fine. Though this is using a git checkout at the 28.1 tag commit, but I don't 
think that matters here? (Emacs runs too, but only tried in guix shell and just 
to see it opens, didn't see if it compiles anything.)

And yet with your code I cannot. I tried using the phase from Andrew instead of 
your code, tried adding gcc to the native-inputs to match Andrew, used gcc-11 
with libgccjit-11, ...still the same configure failure on the libgccjit test 
program: can't find libgccjit.so

Weird.

Adding just the libgccjit library path to LD_LIBRARY_PATH makes configure find 
libgccjit, but then fails to find libx11 in that same libgccjit test program. 
Instead, making LD_LIBRARY_PATH=LIBRARY_PATH fixes the configure and it finally 
fails on the runpath validation. Maybe cause of messing with LD_LIBRARY_PATH or 
could use the patch Andrew has? Anyway, wasn't looking into this.

I thought I had a similar problem with the test program you had started with, 
but in the end just the LIBRARY_PATH tweak was needed. I wish I could remember 
the combination of things I tried that also had it failing to find libgccjit. 
Or perhaps it was something libgccjit was linked to, but I hadn't explored?

So. I tried to see what was different between your and Andrew's code and I'm 
not seeing what it could be. There must be some subtle difference we're 
missing? Seems we have all the ingredients and a known working example.

John





bug#55657: libgccjit is unusable

2022-08-07 Thread Liliana Marie Prikler
Am Sonntag, dem 07.08.2022 um 03:19 + schrieb John Kehayias:
> So. I tried to see what was different between your and Andrew's code
> and I'm not seeing what it could be. There must be some subtle
> difference we're missing? Seems we have all the ingredients and a
> known working example.
It's a really stupid one.  Basically, the tests and really any
executable you try to build fails to execute without LD_LIBRARY_PATH
set.  Now obviously, that's an issue with ld and you know which package
has ld?  That's right, it's binutils!

In Andrew's recipe, he sneakily snarfed out binutils from inputs using
assoc-ref, but I'm using the new package style with (this-package-
input) to achieve the same thing, so I had to add binutils.  But this
now shadows ld-wrapper.  So we have to add ld-wrapper as well.  Now
this makes me question whether the driver options are actually sane or
whether we'd have to prepend ld-wrapper to those as well.

WDYT, Andrew?





bug#55657: libgccjit is unusable

2022-08-07 Thread John Kehayias via Bug reports for GNU Guix
--- Original Message ---
On Sunday, August 7th, 2022 at 9:59 AM, Liliana Marie Prikler wrote:

> It's a really stupid one. Basically, the tests and really any
> executable you try to build fails to execute without LD_LIBRARY_PATH
> set. Now obviously, that's an issue with ld and you know which package
> has ld? That's right, it's binutils!
>

Ah! That LD_LIBRARY_PATH was needed was the clue.

> In Andrew's recipe, he sneakily snarfed out binutils from inputs using
> assoc-ref, but I'm using the new package style with (this-package-
> input) to achieve the same thing, so I had to add binutils. But this
> now shadows ld-wrapper. So we have to add ld-wrapper as well. Now
> this makes me question whether the driver options are actually sane or
> whether we'd have to prepend ld-wrapper to those as well.
>

Is the assoc-ref for binutils (implicit input?) equivalent to just using 
#$binutils directly? e.g. (string-append "-B" #$binutils "/bin/") with no added 
binutils to the inputs. Is that not a good idea? As a test, that does indeed 
work, everything configures, builds, and runs (only tested opening with no 
configuration).

> WDYT, Andrew?





bug#55657: libgccjit is unusable

2022-08-07 Thread Liliana Marie Prikler
Am Sonntag, dem 07.08.2022 um 15:09 + schrieb John Kehayias:
> Is the assoc-ref for binutils (implicit input?) equivalent to just
> using #$binutils directly? e.g. (string-append "-B" #$binutils
> "/bin/") with no added binutils to the inputs. Is that not a good
> idea? As a test, that does indeed work, everything configures,
> builds, and runs (only tested opening with no configuration).
Not quite, because this binutils is actually binutils-final from
commencement.scm, which it doesn't seem we can import the normal way. 
Also doing this would make it so that binutils isn't configurable,
which with an input you get.  The trick is just to also use make-ld-
wrapper from base.scm

Cheers





bug#55657: libgccjit is unusable

2022-08-09 Thread John Kehayias via Bug reports for GNU Guix
Thanks for the new patchset Lily, very excited to have emacs with native 
compiliation in upstream Guix! (At the very least so I don't have to compile 
libgccjit and emacs)

For everyone following along at home, please see 
https://issues.guix.gnu.org/57086

As for the original issue here, I guess the LIBRARY_PATH and ld shadowing is 
the workaround. I don't know if that is something that can/should be 
incorporated into the libgccjit package definition or should just be handled by 
any package using it. Currently, that will just be emacs anyway and hopefully 
the discussion here is useful to anyone trying to use libgccjit.

Thanks again Lily and Andrew for your work here!





bug#55657: libgccjit is unusable

2022-08-09 Thread Andrew Whatson
John Kehayias wrote:
>
> As for the original issue here, I guess the LIBRARY_PATH and ld shadowing is 
> the workaround. I don't know if that is something that can/should be 
> incorporated into the libgccjit package definition or should just be handled 
> by any package using it. Currently, that will just be emacs anyway and 
> hopefully the discussion here is useful to anyone trying to use libgccjit.

This might be possible by adding LIBRARY_PATH to native-search-paths
in the libgccjit package definition?

> Thanks again Lily and Andrew for your work here!

Thanks John & Lily for persisting with getting this submitted, I'm
very grateful for your efforts.

Cheers,
Andrew