all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Pierre Langlois <pierre.langlois@gmx.com>
To: Julien Lepiller <julien@lepiller.eu>
Cc: 54239@debbugs.gnu.org
Subject: [bug#54239] [PATCH v2 1/5] gnu: Add cross-llvm.
Date: Sat, 05 Mar 2022 14:00:32 +0000	[thread overview]
Message-ID: <87zgm4ihsp.fsf@gmx.com> (raw)
In-Reply-To: <499e5dba47ef40df93a8b33fbb8e41cc2354e7a1.1646387919.git.julien@lepiller.eu>

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


Julien Lepiller <julien@lepiller.eu> writes:

> * gnu/packages/llvm.scm (cross-llvm): New variable.
> ---
>  gnu/packages/llvm.scm | 21 +++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
> index eb949bed1b..d6e9846699 100644
> --- a/gnu/packages/llvm.scm
> +++ b/gnu/packages/llvm.scm
> @@ -18,7 +18,7 @@
>  ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
>  ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
>  ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
> -;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
> +;;; Copyright © 2021, 2022 Julien Lepiller <julien@lepiller.eu>
>  ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
>  ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
>  ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
> @@ -74,7 +74,8 @@ (define-module (gnu packages llvm)
>    #:use-module (srfi srfi-1)
>    #:use-module (ice-9 match)
>    #:export (make-lld-wrapper
> -            system->llvm-target))
> +            system->llvm-target
> +            cross-llvm))
>  
>  (define* (system->llvm-target #:optional
>                                (system (or (and=> (%current-target-system)
> @@ -99,6 +100,22 @@ (define* (system->llvm-target #:optional
>               ("i686"        => "X86")
>               ("i586"        => "X86"))))
>  
> +(define (cross-llvm llvm target)
> +  "Return a native LLVM package that targets a different system.  The resulting
> +libraries are running on the host but target a different system by default.
> +This packge can be used to control clang's default target."
> +  (package
> +    (inherit llvm)
> +    (arguments
> +     (substitute-keyword-arguments (package-arguments llvm)
> +      ((#:configure-flags flags)
> +       #~(append
> +           (list
> +             (string-append "-DLLVM_DEFAULT_TARGET_TRIPLE=" #$target)
> +             (string-append "-DLLVM_TARGET_ARCH="
> +                            #$(system->llvm-target (gnu-triplet->nix-system target))))


While playing with trying to use this series to build a WebAssembly
cross-compiler, I /think/ we have a bug here, and also in master, when
it comes to setting LLVM_TARGET_ARCH.

It's a bit confusing though, the documentation is as follows:

--8<---------------cut here---------------start------------->8---
LLVM_TARGET_ARCH:STRING
    LLVM target to use for native code generation. This is required for
    JIT generation. It defaults to “host”, meaning that it shall pick
    the architecture of the machine where LLVM is being built. If you
    are cross-compiling, set it to the target architecture name.
--8<---------------cut here---------------end--------------->8---

It's not clear what naming scheme the variable needs, is it the internal
LLVM target name or the triplet? I think it's architecture part of the
triplet...ish? But instead we pass it the internal target name.

It still works at the moment because whenever LLVM_TARGET_ARCH is used,
the cmake code looks quite permissive and tries to do the right thing by
turning the string lowercase and matching common names (hence the "...ish" :-) ).

https://github.com/llvm/llvm-project/blob/24f88f57de588817bd21e799e2ac1069c025674c/llvm/cmake/config-ix.cmake#L420

So if I try and add WebAssembly into the mix, the architecure name is
wasm32, but the LLVM target is called WebAssembly, and the lowercase
version of it doesn't work :-( 

| nix-system | LLVM target | LLVM target lowercase | Does it match? |
|------------+-------------+-----------------------+----------------|
| aarch64    | AArch64     | aarch64               | Y              |
| armhf      | ARM         | arm                   | Y              |
| mips64el   | Mips        | mips                  | Y              |
| powerpc    | PowerPC     | powerpc               | Y              |
| riscv      | RISCV       | riscv                 | Y              |
| x86_64     | X86         | x86                   | Y              |
| i686       | X86         | x86                   | Y              |
| i586       | X86         | x86                   | Y              |
|------------+-------------+-----------------------+----------------|
| wasm32     | WebAssembly | webassembly           | N :-(          |


I /think/ we might want to use the nix-system instead of the LLVM target
for LLVM_TARGET_ARCH:

--8<---------------cut here---------------start------------->8---
(string-append "-DLLVM_TARGET_ARCH=" #$(gnu-triplet->nix-system target)))
--8<---------------cut here---------------end--------------->8---

But I'm not sure, it might not work for mips64el for example, so we
could need yet-another-mapping.

Given it works as it is today with the current set of supported targets,
we don't necessarily need to fix it now. I'll be happy to take a look
later when eventually adding support for the wasm32-wasi toolchain in
Guix.

Thanks,
Pierre

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 519 bytes --]

      parent reply	other threads:[~2022-03-05 14:41 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-03 16:02 [bug#54239] [PATCH] gnu: Add cross-clang Julien Lepiller
2022-03-03 16:07 ` [bug#54239] [PATCH 1/5] gnu: Add cross-llvm Julien Lepiller
2022-03-03 16:07   ` [bug#54239] [PATCH 2/5] gnu: Add cross-clang Julien Lepiller
2022-03-03 16:07   ` [bug#54239] [PATCH 3/5] gnu: libcxx: Allow cross-compilation Julien Lepiller
2022-03-03 16:07   ` [bug#54239] [PATCH 4/5] gnu: libcxxabi-6: " Julien Lepiller
2022-03-03 16:07   ` [bug#54239] [PATCH 5/5] gnu: Add libcxxabi-9 Julien Lepiller
2022-03-03 16:40 ` [bug#54239] [PATCH] gnu: Add cross-clang Maxime Devos
2022-03-03 18:35   ` Julien Lepiller
2022-03-03 18:59     ` Maxime Devos
2022-03-03 21:11       ` Julien Lepiller
2022-03-04 20:05     ` Maxime Devos
2022-03-03 20:51 ` Pierre Langlois
2022-03-03 21:20   ` Julien Lepiller
2022-03-04  9:59 ` [bug#54239] [PATCH v2 1/5] gnu: Add cross-llvm Julien Lepiller
2022-03-04  9:59   ` [bug#54239] [PATCH v2 2/5] gnu: Add cross-clang Julien Lepiller
2022-03-04 19:53     ` Maxime Devos
2022-03-04 19:54     ` Maxime Devos
2022-03-05  8:30       ` Julien Lepiller
2022-03-04 19:56     ` Maxime Devos
2022-03-04 20:00     ` Maxime Devos
2022-03-05 16:05     ` Pierre Langlois
2022-03-04  9:59   ` [bug#54239] [PATCH v2 3/5] gnu: libcxx: Allow cross-compilation Julien Lepiller
2022-03-04  9:59   ` [bug#54239] [PATCH v2 4/5] gnu: libcxxabi-6: " Julien Lepiller
2022-03-04  9:59   ` [bug#54239] [PATCH v2 5/5] gnu: Add libcxxabi-9 Julien Lepiller
2022-03-04 19:50     ` Maxime Devos
2022-05-21 13:41       ` [bug#54239] [PATCH] gnu: Add cross-clang Ludovic Courtès
2022-07-16 19:44         ` Julien Lepiller
2022-07-16 19:47           ` [bug#54239] [PATCH v3 01/10] guix: Add build-system transformation for target Julien Lepiller
2022-07-16 19:47             ` [bug#54239] [PATCH v3 02/10] gnu: clang-runtime: Fix cross-compilation Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 03/10] gnu: llvm-9: " Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 04/10] gnu: Add cross-llvm Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 05/10] gnu: Add cross-clang Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 06/10] gnu: libcxx: Allow cross-compilation Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 07/10] gnu: libcxxabi-6: " Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 08/10] gnu: Add libcxxabi-9 Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 09/10] gnu: Add libcxx-12 Julien Lepiller
2022-07-16 19:48             ` [bug#54239] [PATCH v3 10/10] gnu: Add libcxxabi-12 Julien Lepiller
2022-07-19 19:54           ` [bug#54239] [PATCH] gnu: Add cross-clang Maxime Devos
2022-07-19 20:42             ` Julien Lepiller
2022-03-04 19:34   ` [bug#54239] [PATCH v2 1/5] gnu: Add cross-llvm Pierre Langlois
2022-03-05  8:24     ` Julien Lepiller
2022-03-05 13:02       ` Pierre Langlois
2022-03-05 14:00   ` Pierre Langlois [this message]

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=87zgm4ihsp.fsf@gmx.com \
    --to=pierre.langlois@gmx.com \
    --cc=54239@debbugs.gnu.org \
    --cc=julien@lepiller.eu \
    /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.