all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Maxime Devos <maximedevos@telenet.be>
To: Mathieu Othacehe <othacehe@gnu.org>
Cc: 50201@debbugs.gnu.org
Subject: [bug#50201] [PATCH core-updates-frozen 0/52] Support cross-compilation in glib-or-gtk-build-system and fix cross-compilation errors
Date: Mon, 30 Aug 2021 18:45:48 +0200	[thread overview]
Message-ID: <8b124a24c7ffc56efcb0b44b064bce0ff0085123.camel@telenet.be> (raw)
In-Reply-To: <87sfyr9jff.fsf_-_@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 4908 bytes --]

Mathieu Othacehe schreef op ma 30-08-2021 om 15:00 [+0200]:
> Hey,
> 
> > +               ;; introspection requires running binaries for the host system
> > +               ;; on the build system.
> > +               '("-Dintrospection=false"))
> 
> Nix is often ahead of Guix regarding cross-compilation support. Did you
> have a chance to see how they are dealing with introspection in the
> context of cross-compilation?

It appears that, say, atk can be cross-compiled on Nix, but other than that,
Nix doesn't seem to be ahead here.  We seem to be in good company here.  I found
the following

Nix setting -Dintrospection=false too when cross-compiling:
https://github.com/NixOS/nixpkgs/issues/72868

Nix people finding gobject-introspection is hard to cross-compile
https://github.com/NixOS/nixpkgs/issues?q=is%3Aissue+is%3Aopen+introspection

Nix people using an emulator (presumably QEMU?):
https://github.com/NixOS/nixpkgs/pull/88222/files

Unfortunately, it appears that introspection data is architecture-dependent:
<https://archive.md/U8rm2>, so just copying over the data from a natively
compiled version won't work (*).

One ‘solution’ is to run g-ir-scanner under QEMU:
<https://maxice8.github.io/8-cross-the-gir/>.  That isn't really cross-compilation
though, but emulated compilation, so it won't work with the Hurd.
Might be good enough for cross-compiling between Linux targets though ...

Here is an alternative idea that I won't attempt in this patch series:

(*) One solution would be to copy it over anyway and substitute things(***) where needed,
    and re-generate the typelib data.  That seems rather prone to mistakes though,
    so maybe we should then hash the adjusted introspection data and compare the hash
    to the hash of what we now the introspection data must be (**).

    Of course, we can't just guess that, so maybe when compiling atk natively for,
    say, x86_64-linux, a message

    ‘new introspection hashes: ("x86_64-linux-gnu" ("Atk-1.0" "THE-HASH"))’
    or
    ‘stale introspection hash: "Atk-1.0" "THE-OLD-HASH" "THE-NEW-HASH"

    followed by:

    ‘Please add it to #:gir-hashes to help cross-compilers.’

    could be printed (maybe even fail the build?).

    This hash checking and substitution could be implemented with an additional
    build phase for meson-build-system (#:gir would be an additional argument for
    meson-build-system).

    Something like:

    (package
      (name "atk")
      [...]
      (arguments
        `(#:gir-hashes
          (("x86_64-linux-gnu" ("Atk-1.0" "THE-HASH"))
           ("powerpc64-linux-gnu"
            ("Atk-1.0"
             ;; XXX(core-updates): We forgot to update the hash,
             ;; and now we're stuck with it unless we want a world-rebuild
             ;; for powerpc64le-linux (other architectures would be unaffected).
             ;; Use the right hash when cross-compiling.
             ,(if (%current-target-system)
                  "THE-CORRECT-HASH"
                  "THE-OLD-HASH"))
           ;; XXX I forgot the triplet, imagine you saw the triplet here instead ...
           ("i586-hurd" ...)
           ...)
          #:gir-substitutions
          ;; TODO: need to thing of a good scheme here ...
          ((replace-value c:identifier "ARCHITECTURE_DEPENDENT"
            ((? architecture "ppc64le") "x")
            ((? ...) "y"))
           (replace-value c:identifier "KERNEL_DEPENDENT"
            ((? kernel-os "linux-gnu") "x")
            ((? kernel-os "gnu") "y"))
           ;; Only x86_64 has this quirk.
           (replace-value c:identifier "QUIRK"
            ((? architecture "x86_64") "yes)
            (otherwise "no"))))
     [...])

    A limitation of this solution is that someone needs to compile it natively
    for the target architecture first (possibly emulated with QEMU).

(**) The .gir includes the name of the shared library, so maybe compute the hash
     modulo store references to avoid invalidating the reference hashes every time
     an (indirect) dependency is updated.

(***) An ordinary 'substitute*' won't work well, something specific for .gir XML
      would be needed.  E.g., consider the following (in this case architecture-independent)
      snippet from Atk-1.0.gir:

      <member name="alert"
              value="2"
              c:identifier="ATK_ROLE_ALERT"
              glib:nick="alert">
        <doc xml:space="preserve"
             filename="../atk/atkobject.h"
             line="39">An object which is an alert to the user. Assistive Technologies typically respond to ATK_ROLE_ALERT by reading the entire onscreen co>
      </member>

      Sometimes the ‘value="..."’ part is architecture-dependent, and needs to
      be adjusted for the target architecture.

Greetings,
Maxime.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

  reply	other threads:[~2021-08-30 16:47 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-25 17:55 [bug#50201] [PATCH core-updates-frozen 0/52] Support cross-compilation in glib-or-gtk-build-system and fix cross-compilation errors Maxime Devos
2021-08-25 18:02 ` [bug#50201] [PATCH 01/52] gnu: dbus-glib: Support cross-compilation Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 02/52] gnu: elogind: Make #:configure-flags a G-exp Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 03/52] gnu: elogind: Fix cross-compilation Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 04/52] gnu: libcap: Fix cross-compilation build failures Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 05/52] gnu: perl: Find 'bash' when cross-compiling Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 06/52] gnu: nspr: Adjust to Mozilla cross-compilation conventions Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 07/52] gnu: nspr: Don't retain references to native inputs Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 08/52] gnu: mozjs-60: Fix cross-compilation build errors Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 09/52] gnu: poppler: Find pkg-config when cross-compiling Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 10/52] build-system/meson: Allow 'configure-flags' to be a G-exp Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 11/52] build-system/glib-or-gtk: Support cross-compilaton Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 12/52] gnu: dbus-cairo: Add missing bash-minimal input Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 13/52] gnu: polkit: Prevent cross-compilation build error Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 14/52] gnu: gobject-introspection: Don't build introspection data when cross-compiling Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 15/52] gobject-introspection: Fix inputs " Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 16/52] gobject-introspection: Correct library name " Maxime Devos
2021-08-30 12:58     ` [bug#50201] [PATCH core-updates-frozen 0/52] Support cross-compilation in glib-or-gtk-build-system and fix cross-compilation errors Mathieu Othacehe
2021-09-03 12:35       ` Maxime Devos
2021-09-19 15:43         ` Mathieu Othacehe
2021-09-19 18:25           ` Maxime Devos
2021-09-20 11:22             ` bug#50201: " Mathieu Othacehe
2021-08-25 18:02   ` [bug#50201] [PATCH 17/52] gnu: atk: Disable introspection when cross-compiling Maxime Devos
2021-08-30 13:00     ` [bug#50201] [PATCH core-updates-frozen 0/52] Support cross-compilation in glib-or-gtk-build-system and fix cross-compilation errors Mathieu Othacehe
2021-08-30 16:45       ` Maxime Devos [this message]
2021-08-31  9:49         ` Mathieu Othacehe
2021-09-11 21:30           ` Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 18/52] gnu: bdb: Fix cross-compilation build errors Maxime Devos
2021-08-25 18:02   ` [bug#50201] [PATCH 19/52] gnu: graphene: Don't build introspection data when cross-compiling Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 20/52] gnu: gamin: Recognise aarch64 as architecture " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 21/52] gnu: gamin: Fix 'configure' script " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 22/52] gnu: iso-codes: Move inputs to native-inputs " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 23/52] gnu: heimdal: Fix inputs " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 24/52] gnu: heimdal: Fix linking error " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 25/52] gnu: heimdal: Refer to cross-compiled bash Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 26/52] gnu: heimdal: Use the cross-compiled bash in "su" Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 27/52] gnu: heimdal: Find tools when cross-compiling Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 28/52] gnu: heimdal: Use libcom_err from input " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 29/52] gnu: json-glib: Add missing 'bash-minimal' input Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 30/52] gnu: json-glib: Find docbook inputs when cross-compiling Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 31/52] gnu: json-glib: Don't build gtk documentation " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 32/52] gnu: json-glib: Don't build introspection data " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 33/52] gnu: libthai: Add datrie as native-input " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 34/52] gnu: libdaemon: Support cross-compilation to aarch64-linux-gnu Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 35/52] gnu: avahi: Find 'TARGET-pkg-config' when cross-compiling Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 36/52] gnu: avahi: Use the cross-compiled bash Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 37/52] gnu: at-spi2-core: Don't cross-compile documentation Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 38/52] gnu: at-spi2-core: Find docbook when cross-compiling Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 39/52] gnu: at-spi2-core: Add missing "bash-minimal" input Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 40/52] gnu: xorg: Unify --disable-malloc0-returnsnull code Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 41/52] gnu: libxinerama: Add --disable-malloc0-returnsnull when necessary Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 42/52] gnu: libxi: " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 43/52] gnu: libxrandr: " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 44/52] gnu: libxxf85vm: " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 45/52] gnu: Add pkg-config-for-build Maxime Devos
2021-08-30 13:13     ` [bug#50201] [PATCH core-updates-frozen 0/52] Support cross-compilation in glib-or-gtk-build-system and fix cross-compilation errors Mathieu Othacehe
2021-09-02 14:53       ` Maxime Devos
2021-09-22 19:10         ` Ludovic Courtès
2021-09-23 10:38           ` Maxime Devos
2021-09-23 16:53             ` Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 46/52] gnu: wayland: Find wayland-scanner when cross-compiling Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 47/52] gnu: wayland: Find docbook-xml " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 48/52] gnu: libproxy: Don't run tests " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 49/52] gnu: gdk-pixbuf: Find docbook " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 50/52] gnu: gdk-pixbuf: Add bash-minimal input " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 51/52] gnu: pango: " Maxime Devos
2021-08-25 18:03   ` [bug#50201] [PATCH 52/52] gnu: at-spi2-atk: Don't compile tests " Maxime Devos
2021-08-28 13:33 ` [bug#50201] [PATCH core-updates-frozen 0/52] Support cross-compilation in glib-or-gtk-build-system and fix cross-compilation errors Mathieu Othacehe
2021-08-30 12:16   ` Maxime Devos
2021-08-30 12:30     ` Mathieu Othacehe
2021-08-30 12:19 ` Maxime Devos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8b124a24c7ffc56efcb0b44b064bce0ff0085123.camel@telenet.be \
    --to=maximedevos@telenet.be \
    --cc=50201@debbugs.gnu.org \
    --cc=othacehe@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.