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))