[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.)
From: |
Nikita Gillmann |
Subject: |
Re: Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.) |
Date: |
Fri, 24 Apr 2020 19:07:36 +0200 |
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))