unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Nikita Gillmann <nikita@n0.is>
To: "Ludovic Courtès" <ludovic.courtes@inria.fr>
Cc: guix-devel <guix-devel@gnu.org>
Subject: Re: Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.)
Date: Fri, 24 Apr 2020 19:07:36 +0200	[thread overview]
Message-ID: <20200424170736.qvuiz5bzgdp2olrl@hex> (raw)
In-Reply-To: <87eesdhup7.fsf@inria.fr>

Ludovic Courtès transcribed 4.9K bytes:
> Hello!
> 
> The patch below produces a ‘clang’ package that contains
> ‘clang-tools-extra’ commands¹.
> 
[...]
> Any idea how to best package it?
> 
> We could of course have a ‘clang-full’ package, but it seems wasteful.
> We could also have a separate output for the extra commands, but it’s
> inconvenient.  It would be ideal to have a ‘clang-tools-extra’ package
> that depends on ‘clang’, but building them separately appears to be
> impossible.

Is it? The way we build clang and clang-tools-extra in pkgsrc is to
have them separate.
Refer to lang/clang-tools-extra and lang/clang to see how.
The gist is, BUILD_TARGET for clang-tools-extra gets overridden
and appended with targets to build.
That'S just after skipping through the clang-tools-extra package
for a minute.
I'm not sure if this is applicable to guix in any way.

> Thanks in advance!  :-)
> 
> Ludo’.
> 
> ¹ https://releases.llvm.org/10.0.0/tools/clang/tools/extra/docs/index.html
> 

> diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
> index d6c519bcbd..a3bcd75190 100644
> --- a/gnu/packages/llvm.scm
> +++ b/gnu/packages/llvm.scm
> @@ -166,7 +166,11 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
>      (supported-systems (delete "mips64el-linux" %supported-systems))))
>  
>  (define* (clang-from-llvm llvm clang-runtime hash
> -                          #:key (patches '()))
> +                          #:key (patches '()) tools-extra)
> +  "Produce Clang with dependencies on LLVM and CLANG-RUNTIME, and applying the
> +given PATCHES.  When TOOLS-EXTRA is given, it must point to the
> +'clang-tools-extra' tarball, which contains code for 'clang-tidy', 'pp-trace',
> +'modularize', and other tools."
>    (package
>      (name "clang")
>      (version (package-version llvm))
> @@ -187,7 +191,10 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
>      (inputs
>       `(("libxml2" ,libxml2)
>         ("gcc-lib" ,gcc "lib")
> -       ,@(package-inputs llvm)))
> +       ,@(package-inputs llvm)
> +       ,@(if tools-extra
> +             `(("clang-tools-extra" ,tools-extra))
> +             '())))
>      (propagated-inputs
>       `(("llvm" ,llvm)
>         ("clang-runtime" ,clang-runtime)))
> @@ -208,6 +215,19 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
>         #:build-type "Release"
>  
>         #:phases (modify-phases %standard-phases
> +                  ,@(if tools-extra
> +                        `((add-after 'unpack 'add-tools-extra
> +                            (lambda* (#:key inputs #:allow-other-keys)
> +                              (let ((extra (assoc-ref inputs
> +                                                      "clang-tools-extra")))
> +                                (invoke "tar" "xf" extra)
> +                                (rename-file ,(string-append
> +                                               "clang-tools-extra-"
> +                                               (package-version llvm)
> +                                               ".src")
> +                                             "tools/extra")
> +                                #t))))
> +                        '())
>                    (add-after 'unpack 'add-missing-triplets
>                      (lambda _
>                        ;; Clang iterates through known triplets to search for
> @@ -376,7 +396,16 @@ output), and Binutils.")
>  (define-public clang-10
>    (clang-from-llvm llvm-10 clang-runtime-10
>                     "08fbxa2a0kr3ni35ckppj0kyvlcyaywrhpqwcdrdy0z900mhcnw8"
> -                   #:patches '("clang-10.0-libc-search-path.patch")))
> +                   #:patches '("clang-10.0-libc-search-path.patch")
> +                   #:tools-extra
> +                   #f
> +                   #;(origin
> +                     (method url-fetch)
> +                     (uri (llvm-download-uri "clang-tools-extra"
> +                                             (package-version llvm-10)))
> +                     (sha256
> +                      (base32
> +                       "074ija5s2jsdn0k035r2dzmryjmqxdnyg4xwvaqych2bazv8rpxc")))))
>  
>  (define-public clang-toolchain-10
>    (make-clang-toolchain clang-10))

  reply	other threads:[~2020-04-24 17:08 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-24 13:36 Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.) Ludovic Courtès
2020-04-24 17:07 ` Nikita Gillmann [this message]
2020-04-27  7:31   ` Ludovic Courtès
2020-04-27  8:50     ` Efraim Flashner
2020-04-27 11:23       ` Nikita Gillmann
2020-05-05 10:21       ` Ludovic Courtès
2020-05-29 16:57 ` Ludovic Courtès

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

  List information: https://guix.gnu.org/

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

  git send-email \
    --in-reply-to=20200424170736.qvuiz5bzgdp2olrl@hex \
    --to=nikita@n0.is \
    --cc=guix-devel@gnu.org \
    --cc=ludovic.courtes@inria.fr \
    /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 public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).