* [bug#49471] [PATCH] gnu: lld: Update to 12.0.0. @ 2021-07-08 21:39 terramorpha 2021-07-08 21:45 ` [bug#49471] the actual patch terramorpha ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: terramorpha @ 2021-07-08 21:39 UTC (permalink / raw) To: 49471 Hi guix. While updating my personal package definition of zig to 0.8.0, I had to write one for lld@12 too. (IIUC, only llvm and clang were upgraded to 12, I couldn't find lld when `guix search`-ing) Anyway, the release tarball assumes that it will be unpacked and built in the same directory as the libunwind source. This is why at build time, I added a phase to patch the CMakeLists.txt and make it look for libunwind in a specific place. Cheers ^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#49471] the actual patch 2021-07-08 21:39 [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 terramorpha @ 2021-07-08 21:45 ` terramorpha 2021-07-09 22:06 ` [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 Leo Prikler 2021-09-24 0:28 ` bug#49471: " Sarah Morgensen 2 siblings, 0 replies; 6+ messages in thread From: terramorpha @ 2021-07-08 21:45 UTC (permalink / raw) To: 49471 diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index 575c63c713..b3c1c943f7 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -882,21 +882,40 @@ of programming tools as well as libraries with equivalent functionality.") (define-public clang clang-9) (define-public clang-toolchain clang-toolchain-9) -(define-public lld + +(define libunwind-12-source + (origin (method url-fetch) + (uri (llvm-uri "libunwind" "12.0.0")) + (sha256 (base32 "1x8wpmsrsgnwj2v5ih52ylni7r6n8gzkcj6hx65zbxski2rablly")))) + +(define-public lld-12 (package (name "lld") - (version "11.0.0") + (version "12.0.0") (source (origin (method url-fetch) (uri (llvm-uri "lld" version)) (sha256 (base32 - "077xyh7sij6mhp4dc4kdcmp9whrpz332fa12rwxnzp3wgd5bxrzg")))) + "1zakyxk5bwnh7jarckcd4rbmzi58jgn2dbah5j5cwcyfyfbx9drc")))) (build-system cmake-build-system) (inputs - `(("llvm" ,llvm-11))) + `(("llvm" ,llvm-12) + ("libunwind-source" ,libunwind-12-source))) (arguments - `(#:build-type "Release" + `(#:phases + (modify-phases %standard-phases + (add-before 'configure 'extract-libunwind-and-patch-path + (lambda* (#:key inputs #:allow-other-keys) + (invoke "tar" "-xf" (assoc-ref inputs "libunwind-source")) + (substitute "MachO/CMakeLists.txt" + ;; The build script assumes that the libunwind code + ;; is the source's sibling directory. Patch it so + ;; that it finds it directly where we put it + (list (cons "include_directories\\(\\$\\{LLVM_MAIN_SRC_DIR\\}\\/\\.\\.\\/libunwind\\/include)" + (const (string-append "include_directories(" (getcwd) "/libunwind-12.0.0.src" "/include)"))))) + #t))) + #:build-type "Release" ;; TODO: Tests require the lit tool, which isn't installed by the LLVM ;; package. #:tests? #f)) @@ -904,7 +923,7 @@ of programming tools as well as libraries with equivalent functionality.") (synopsis "Linker from the LLVM project") (description "LLD is a high-performance linker, built as a set of reusable components which highly leverage existing libraries in the larger LLVM Project.") - (license license:asl2.0))) ; With LLVM exception + (license license:asl2.0))) ; With LLVM exceptions (define-public lldb (package ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bug#49471] [PATCH] gnu: lld: Update to 12.0.0. 2021-07-08 21:39 [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 terramorpha 2021-07-08 21:45 ` [bug#49471] the actual patch terramorpha @ 2021-07-09 22:06 ` Leo Prikler 2021-07-19 17:37 ` Ludovic Courtès 2021-09-24 0:28 ` bug#49471: " Sarah Morgensen 2 siblings, 1 reply; 6+ messages in thread From: Leo Prikler @ 2021-07-09 22:06 UTC (permalink / raw) To: 49471 * gnu/packages/llvm.scm (llvm-subprojects-origin, %llvm-project-12.0.0-hash): New variables. (lld-11, lld-12): New variables. (lld): Point to lld-11. --- This patch is an alternative to the one sent by terramorpha. Supposed advantages of it are: * lld still points to lld-11, not breaking any packages that rely on it * llvm-subprojects-origin can be reused by other LLVM subprojects (think of libcxx and libcxxabi, which both require each other, or libunwind, which requires libcxx) Disadvantages are: * llvm-project is a beefy tarball and somewhat of a pain to unpack * Both this version and the original use an unclean approach to building subprojects, that is propagated by LLVM. Perhaps we ought to instead clean up their mess? Regards, Leo gnu/packages/llvm.scm | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index 575c63c713..1ddbd39e59 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -92,6 +92,22 @@ as \"x86_64-linux\"." (string-append "https://github.com/llvm/llvm-project/releases/download" "/llvmorg-" version "/" component "-" version ".src.tar.xz")) +(define* (llvm-subprojects-origin components version hash + #:optional (patches '())) + (origin + (method url-fetch) + (uri (llvm-uri "llvm-project" version)) + (sha256 (base32 hash)) + (patches (map search-patch patches)) + (modules '((guix build utils) + (ice-9 ftw))) + (snippet + `(for-each + (lambda (file) + (unless (member file '("." ".." ,@components)) + (delete-file-recursively file))) + (scandir "."))))) + (define* (clang-runtime-from-llvm llvm hash #:optional (patches '())) (package @@ -882,7 +898,7 @@ of programming tools as well as libraries with equivalent functionality.") (define-public clang clang-9) (define-public clang-toolchain clang-toolchain-9) -(define-public lld +(define-public lld-11 (package (name "lld") (version "11.0.0") @@ -906,6 +922,31 @@ of programming tools as well as libraries with equivalent functionality.") components which highly leverage existing libraries in the larger LLVM Project.") (license license:asl2.0))) ; With LLVM exception +(define %llvm-project-12.0.0-hash "0a1n88dmbwp1ww7h3ykf0s001cndk1bm3i2cj1y2sh548f4nilcy") + +(define-public lld-12 + (package + (inherit lld-11) + (version "12.0.0") + (source (llvm-subprojects-origin '("lld" "libunwind") version + %llvm-project-12.0.0-hash)) + (arguments + `(,@(package-arguments lld-11) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'dissect + (lambda _ + ;; Find libunwind in unpacked sources + (substitute* "lld/MachO/CMakeLists.txt" + (("\\$\\{LLVM_MAIN_SRC_DIR\\}/\\.\\./libunwind") + (string-append (getcwd) "/libunwind"))) + ;; chdir to actual source folder + (chdir "lld")))))) + (inputs + `(("llvm" ,llvm-12))))) + +(define-public lld lld-11) + (define-public lldb (package (name "lldb") -- 2.32.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bug#49471] [PATCH] gnu: lld: Update to 12.0.0. 2021-07-09 22:06 ` [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 Leo Prikler @ 2021-07-19 17:37 ` Ludovic Courtès 2021-07-19 18:10 ` Leo Prikler 0 siblings, 1 reply; 6+ messages in thread From: Ludovic Courtès @ 2021-07-19 17:37 UTC (permalink / raw) To: Leo Prikler; +Cc: 49471 Hi, Leo Prikler <leo.prikler@student.tugraz.at> skribis: > * gnu/packages/llvm.scm (llvm-subprojects-origin, %llvm-project-12.0.0-hash): > New variables. > (lld-11, lld-12): New variables. > (lld): Point to lld-11. > --- > This patch is an alternative to the one sent by terramorpha. > > Supposed advantages of it are: > * lld still points to lld-11, not breaking any packages that rely on it > * llvm-subprojects-origin can be reused by other LLVM subprojects > (think of libcxx and libcxxabi, which both require each other, or > libunwind, which requires libcxx) > > Disadvantages are: > * llvm-project is a beefy tarball and somewhat of a pain to unpack > * Both this version and the original use an unclean approach to building > subprojects, that is propagated by LLVM. Perhaps we ought to instead > clean up their mess? I’m not sure that the 2nd point means, but perhaps it can be addressed separately? > -(define-public lld > +(define-public lld-11 > (package > (name "lld") > (version "11.0.0") Does it make sense to keep old versions of the linker around? To me it’s much less useful than keeping old versions of the compiler. > +(define %llvm-project-12.0.0-hash "0a1n88dmbwp1ww7h3ykf0s001cndk1bm3i2cj1y2sh548f4nilcy") ^ I’d use ‘base32’ here (for expansion-time base32 decoding) and remove it from ‘llvm-subprojects-origin’. Otherwise LGTM. Thanks! Ludo’. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#49471] [PATCH] gnu: lld: Update to 12.0.0. 2021-07-19 17:37 ` Ludovic Courtès @ 2021-07-19 18:10 ` Leo Prikler 0 siblings, 0 replies; 6+ messages in thread From: Leo Prikler @ 2021-07-19 18:10 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 49471 Hi, Am Montag, den 19.07.2021, 19:37 +0200 schrieb Ludovic Courtès: > Hi, > > Leo Prikler <leo.prikler@student.tugraz.at> skribis: > > > * gnu/packages/llvm.scm (llvm-subprojects-origin, %llvm-project- > > 12.0.0-hash): > > New variables. > > (lld-11, lld-12): New variables. > > (lld): Point to lld-11. > > --- > > This patch is an alternative to the one sent by terramorpha. > > > > Supposed advantages of it are: > > * lld still points to lld-11, not breaking any packages that rely > > on it > > * llvm-subprojects-origin can be reused by other LLVM subprojects > > (think of libcxx and libcxxabi, which both require each other, or > > libunwind, which requires libcxx) > > > > Disadvantages are: > > * llvm-project is a beefy tarball and somewhat of a pain to unpack > > * Both this version and the original use an unclean approach to > > building > > subprojects, that is propagated by LLVM. Perhaps we ought to > > instead > > clean up their mess? > > I’m not sure that the 2nd point means, but perhaps it can be > addressed separately? The gist of it is that we can't build the projects from just their source and "normal" inputs – we have to also unpack (or leave in the source tree as done here) other sources, that would themselves constitute different packages. I'm not really sure how big of a problem that is in general (apart from the annoyance of having to do that) – it simply feels unclean, that's all I'm complaining about here. > > -(define-public lld > > +(define-public lld-11 > > (package > > (name "lld") > > (version "11.0.0") > > Does it make sense to keep old versions of the linker around? To me > it’s much less useful than keeping old versions of the compiler. There don't seem to be dependants other than itself, but I didn't want to accidentally break stuff, also concerning other channels. Since lld-12 will be used in the zig package thereafter, which takes versioned LLVM as inputs, I think it's likely similar projects might want to use lld 11 or older, which can be built by inheriting the somewhat simpler lld-11 package. (Similarly if you want zig 0.7 for historical purposes, although that's entering Guix Past territory.) > > +(define %llvm-project-12.0.0-hash > > "0a1n88dmbwp1ww7h3ykf0s001cndk1bm3i2cj1y2sh548f4nilcy") > ^ > I’d use ‘base32’ here (for expansion-time base32 decoding) and remove > it from ‘llvm-subprojects-origin’. Point taken, I'll update that in v2. Regards, Leo ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#49471: [PATCH] gnu: lld: Update to 12.0.0. 2021-07-08 21:39 [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 terramorpha 2021-07-08 21:45 ` [bug#49471] the actual patch terramorpha 2021-07-09 22:06 ` [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 Leo Prikler @ 2021-09-24 0:28 ` Sarah Morgensen 2 siblings, 0 replies; 6+ messages in thread From: Sarah Morgensen @ 2021-09-24 0:28 UTC (permalink / raw) To: 49471-done Hi, terramorpha@cock.li writes: > Hi guix. While updating my personal package definition of zig to 0.8.0, I had to > write one for lld@12 too. > (IIUC, only llvm and clang were upgraded to 12, I couldn't find lld when `guix > search`-ing) > > Anyway, the release tarball assumes that it will be unpacked and built in the > same directory as the libunwind source. > This is why at build time, I added a phase to patch the CMakeLists.txt and make > it look for libunwind in a specific place. > > Cheers It looks like this has been done in a7283c1d14 gnu: lld: Update to 12.0.1. on master, so I'm closing this bug. -- Sarah ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-09-24 0:29 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-07-08 21:39 [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 terramorpha 2021-07-08 21:45 ` [bug#49471] the actual patch terramorpha 2021-07-09 22:06 ` [bug#49471] [PATCH] gnu: lld: Update to 12.0.0 Leo Prikler 2021-07-19 17:37 ` Ludovic Courtès 2021-07-19 18:10 ` Leo Prikler 2021-09-24 0:28 ` bug#49471: " Sarah Morgensen
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).