[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.)
From: |
Ludovic Courtès |
Subject: |
Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.) |
Date: |
Fri, 24 Apr 2020 15:36:20 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Hello!
The patch below produces a ‘clang’ package that contains
‘clang-tools-extra’ commands¹.
The problem is the size. Before:
--8<---------------cut here---------------start------------->8---
$ guix size /gnu/store/qxdpxbvfdxfy5dnz4haql4xlxpmb5r6b-clang-10.0.0 |tail -1
total: 995.2 MiB
$ guix size /gnu/store/qxdpxbvfdxfy5dnz4haql4xlxpmb5r6b-clang-10.0.0 |head -2
store item total self
/gnu/store/qxdpxbvfdxfy5dnz4haql4xlxpmb5r6b-clang-10.0.0 995.2
456.5 45.9%
--8<---------------cut here---------------end--------------->8---
After:
--8<---------------cut here---------------start------------->8---
$ guix size /gnu/store/5h3xgpg33wip2b8ccri690jp6ikbq16s-clang-10.0.0 |tail -1
total: 1525.4 MiB
$ guix size /gnu/store/5h3xgpg33wip2b8ccri690jp6ikbq16s-clang-10.0.0 |head -2
store item total self
/gnu/store/5h3xgpg33wip2b8ccri690jp6ikbq16s-clang-10.0.0 1525.4
986.8 64.7%
--8<---------------cut here---------------end--------------->8---
(How they manage to fill that much disk space, I wonder.)
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.
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))
- Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.),
Ludovic Courtès <=