[PATCH] gnu: cling: Update to 1.0.

  • Done
  • quality assurance status badge
Details
One participant
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Maxim Cournoyer
Severity
normal
M
M
Maxim Cournoyer wrote on 18 May 22:56 +0200
(address . guix-patches@gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
3e237a99a9a79a4904e5616eb364b5a9063eef9d.1716065797.git.maxim.cournoyer@gmail.com
* gnu/packages/llvm.scm (%cling-version): Delete variable.
(llvm-cling): Inherit from llvm-15 and update to version 13-20240318-01.
[source]: Update source URL. Remove obsolete snippet. Add patches field.
[outputs]: Delete field.
[arguments]: Likewise.
(clang-cling-runtime): Update to 13-20240318-01. Inherit from
clang-runtime-13. Use llvm-cling source.
[phases]: Use gexps. Add change-directory phase.
(clang-cling): Update to 13-20240318-01. Inherit from
clang-13. Use llvm-cling source.
[arguments]: Use gexps. Add change-directory phase.
(cling): Update to 1.0.
[source]: Update URL.
[phases] {patch-paths}: Adjust patching of the 'getResourceDir' variable.
* gnu/packages/patches/cling-use-shared-library.patch: Rebase patch.
* gnu/packages/patches/clang-cling-13-libc-search-path.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register it.

Change-Id: I5d1f2c4d36ca226116bc74c2578154f86413f9e9
---

gnu/local.mk | 1 +
gnu/packages/llvm.scm | 268 ++++++++----------
.../clang-cling-13-libc-search-path.patch | 96 +++++++
.../patches/cling-use-shared-library.patch | 83 ++----
4 files changed, 237 insertions(+), 211 deletions(-)
create mode 100644 gnu/packages/patches/clang-cling-13-libc-search-path.patch

Toggle diff (395 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 89839f799e..72a99d000e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1048,6 +1048,7 @@ dist_patch_DATA = \
%D%/packages/patches/clang-17.0-libc-search-path.patch \
%D%/packages/patches/clang-17.0-link-dsymutil-latomic.patch \
%D%/packages/patches/clang-18.0-libc-search-path.patch \
+ %D%/packages/patches/clang-cling-13-libc-search-path.patch \
%D%/packages/patches/clang-runtime-asan-build-fixes.patch \
%D%/packages/patches/clang-runtime-esan-build-fixes.patch \
%D%/packages/patches/clang-runtime-9-libsanitizer-mode-field.patch \
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 8855e1ade3..c7c55322d7 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -17,11 +17,10 @@
;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2020 Jakub K?dzio?ka <kuba@kadziolka.net>
;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022, 2024 Greg Hogan <code@greghogan.com>
;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2022 Clément Lassieur <clement@lassieur.org>
@@ -2236,180 +2235,155 @@ (define-public llvm-julia
(properties `((hidden? . #t)
,@(package-properties llvm-13)))))
-(define %cling-version "0.9")
-
-(define llvm-cling ;LLVM 9 with approximately 10 patches for cling
- (let ((base llvm-9))
+(define llvm-cling
+ ;; To determine which version of LLVM a given release of Cling should use,
+ ;; consult the
+ ;; https://raw.githubusercontent.com/root-project/cling/master/LastKnownGoodLLVMSVNRevision.txt
+ ;; file.
+ (let ((base llvm-15)) ;for a DYLIB build
(package/inherit base
(name "llvm-cling")
+ (version "13-20240318-01")
(source
(origin
(inherit (package-source base))
(method git-fetch)
(uri (git-reference
- (url "http://root.cern/git/llvm.git")
- (commit (string-append "cling-v" %cling-version))))
- (file-name (git-file-name "llvm-cling" %cling-version))
+ (url "https://github.com/root-project/llvm-project")
+ (commit (string-append "cling-llvm" version))))
+ (file-name (git-file-name "llvm-cling" version))
(sha256
(base32
- "0y3iwv3c9152kybmdrwvadggjs163r25h7rmlxzr3hfpr463pnwf"))
- (modules '((guix build utils)))
- (snippet
- ;; The source is missing an include directive (see:
- ;; https://github.com/vgvassilev/cling/issues/219).
- '(substitute* "utils/benchmark/src/benchmark_register.h"
- (("^#include <vector>.*" all)
- (string-append all "#include <limits>\n"))))))
- (outputs '("out"))
- (arguments
- (substitute-keyword-arguments (package-arguments base)
- ((#:configure-flags _ ''())
- '(list "-DLLVM_PARALLEL_LINK_JOBS=1" ;cater to smaller build machines
- ;; Only enable compiler support for the host architecture to
- ;; save on build time.
- "-DLLVM_TARGETS_TO_BUILD=host;NVPTX"
- "-DLLVM_INSTALL_UTILS=ON"
- "-DLLVM_ENABLE_RTTI=ON"
- "-DLLVM_ENABLE_FFI=ON"
- "-DLLVM_BUILD_LLVM_DYLIB=ON"
- "-DLLVM_LINK_LLVM_DYLIB=ON"))
- ((#:phases phases '%standard-phases)
- #~(modify-phases #$phases
- (delete 'shared-lib-workaround)
- (delete 'install-opt-viewer))))))))
+ "1zh6yp8px9hla7v9i67a6anbph140f8ixxbsz65aj7fizksjs1h3"))
+ (patches (search-patches "clang-cling-13-libc-search-path.patch")))))))
(define clang-cling-runtime
- (let ((base clang-runtime-9))
+ (let ((base clang-runtime-13))
(package/inherit base
(name "clang-cling-runtime")
+ (version (package-version llvm-cling))
+ (source (package-source llvm-cling))
(arguments
(substitute-keyword-arguments (package-arguments base)
((#:phases phases '%standard-phases)
- `(modify-phases ,phases
- (add-after 'install 'delete-static-libraries
- ;; This reduces the size from 22 MiB to 4 MiB.
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (for-each delete-file (find-files out "\\.a$")))))))))
+ #~(modify-phases #$phases
+ (add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "compiler-rt")))
+ (add-after 'install 'delete-static-libraries
+ ;; This reduces the size from 22 MiB to 4 MiB.
+ (lambda _
+ (for-each delete-file (find-files #$output "\\.a$"))))))))
(inputs (modify-inputs (package-inputs base)
(replace "llvm" llvm-cling))))))
-(define clang-cling ;modified clang 9 with ~ 60 patches for cling
- (let ((base clang-9))
+(define clang-cling
+ (let ((base clang-13))
(package/inherit base
(name "clang-cling")
- (source
- (origin
- (inherit (package-source base))
- (method git-fetch)
- (uri (git-reference
- (url "http://root.cern/git/clang.git")
- (commit (string-append "cling-v" %cling-version))))
- (file-name (git-file-name "clang-cling" %cling-version))
- (sha256
- (base32
- "128mxkwghss6589wvm6amzv183aq88rdrnfxjiyjcji5hx84vpby"))))
+ (version (package-version llvm-cling))
+ (source (package-source llvm-cling))
(arguments
(substitute-keyword-arguments (package-arguments base)
((#:phases phases '%standard-phases)
- `(modify-phases ,phases
- (add-after 'install 'delete-static-libraries
- ;; This reduces the size by half, from 220 MiB to 112 MiB.
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (for-each delete-file (find-files out "\\.a$")))))))))
+ #~(modify-phases #$phases
+ (add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "clang")))
+ (add-after 'install 'delete-static-libraries
+ ;; This reduces the size by half, from 220 MiB to 112 MiB.
+ (lambda _
+ (for-each delete-file (find-files #$output "\\.a$"))))))))
(propagated-inputs
(modify-inputs (package-propagated-inputs base)
(replace "llvm" llvm-cling)
(replace "clang-runtime" clang-cling-runtime))))))
(define-public cling
- ;; The tagged v0.9 release doesn't build, so use the latest commit.
- (let ((commit "d78d1a03fedfd2bf6d2b6ff295aca576d98940df")
- (revision "1")
- (version* "0.9"))
- (package
- (name "cling")
- (version (git-version version* revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "http://root.cern/git/cling.git")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0lsbxv21b4qw11xkw9iipdpca64jjwwqxm0qf5v2cgdlibf8m8n9"))
- ;; Patch submitted upstream here:
- ;; https://github.com/root-project/cling/pull/433.
- (patches (search-patches "cling-use-shared-library.patch"))))
- (build-system cmake-build-system)
- (arguments
- (list
- #:build-type "Release" ;keep the build as lean as possible
- #:tests? #f ;FIXME: 78 tests fail (out of ~200)
- #:test-target "check-cling"
- #:configure-flags
- #~(list (string-append "-DCLING_CXX_PATH="
- (search-input-file %build-inputs "bin/g++"))
- ;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
- ;; be a Python script, not a shell executable.
- (string-append "-DLLVM_EXTERNAL_LIT="
- (search-input-file %build-inputs "bin/.lit-real")))
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'set-version
- (lambda _
- (make-file-writable "VERSION")
- (call-with-output-file "VERSION"
- (lambda (port)
- (format port "~a~%" #$version)))))
- (add-after 'unpack 'patch-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* "lib/Interpreter/CIFactory.cpp"
- (("\\bsed\\b")
- (which "sed"))
- ;; This ensures that the default C++ library used by Cling is
- ;; that of the compiler that was used to build it, rather
- ;; than that of whatever g++ happens to be on PATH.
- (("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
- (format #f "ReadCompilerIncludePaths(~s"
- (search-input-file inputs "bin/g++")))
- ;; Cling uses libclang's CompilerInvocation::GetResourcesPath
- ;; to resolve Clang's library prefix, but this fails on Guix
- ;; because it is relative to the output of cling rather than
- ;; clang (see:
- ;; https://github.com/root-project/cling/issues/434). Fully
- ;; shortcut the logic in this method to return the correct
- ;; static location.
- (("static std::string getResourceDir.*" all)
- (string-append all
- " return std::string(\""
- #$(this-package-input "clang-cling")
- "/lib/clang/" #$(package-version clang-cling)
- "\");")))
- ;; Check for the 'lit' command for the tests, not 'lit.py'
- ;; (see: https://github.com/root-project/cling/issues/432).
- (substitute* "CMakeLists.txt"
- (("lit.py")
- "lit"))))
- (add-after 'unpack 'adjust-lit.cfg
- ;; See: https://github.com/root-project/cling/issues/435.
- (lambda _
- (substitute* "test/lit.cfg"
- (("config.llvm_tools_dir \\+ '")
- "config.cling_obj_root + '/bin"))))
- (add-after 'install 'delete-static-libraries
- ;; This reduces the size from 17 MiB to 5.4 MiB.
- (lambda _
- (for-each delete-file (find-files #$output "\\.a$")))))))
- (native-inputs
- (list python python-lit))
- (inputs
- (list clang-cling llvm-cling))
- (home-page "https://root.cern/cling/")
- (synopsis "Interactive C++ interpreter")
- (description "Cling is an interactive C++17 standard compliant
+ (package
+ (name "cling")
+ (version "1.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/root-project/cling")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "17n66wf5yg1xjc94d6yb8g2gydjz0b8cj4a2pn6xrygdvhh09vv1"))
+ ;; Patch submitted upstream here:
+ ;; https://github.com/root-project/cling/pull/433.
+ (patches (search-patches "cling-use-shared-library.patch"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:build-type "Release" ;keep the build as lean as possible
+ #:tests? #f ;FIXME: 78 tests fail (out of ~200)
+ #:test-target "check-cling"
+ #:configure-flags
+ #~(list (string-append "-DCLING_CXX_PATH="
+ (search-input-file %build-inputs "bin/g++"))
+ ;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
+ ;; be a Python script, not a shell executable.
+ (string-append "-DLLVM_EXTERNAL_LIT="
+ (search-input-file %build-inputs "bin/.lit-real")))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'set-version
+ (lambda _
+ (make-file-writable "VERSION")
+ (call-with-output-file "VERSION"
+ (lambda (port)
+ (format port "~a~%" #$version)))))
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "lib/Interpreter/CIFactory.cpp"
+ (("\\bsed\\b")
+ (which "sed"))
+ ;; This ensures that the default C++ library used by Cling is
+ ;; that of the compiler that was used to build it, rather
+ ;; than that of whatever g++ happens to be on PATH.
+ (("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
+ (format #f "ReadCompilerIncludePaths(~s"
+ (search-input-file inputs "bin/g++")))
+ ;; Cling uses libclang's CompilerInvocation::GetResourcesPath
+ ;; to resolve Clang's library prefix, but this fails on Guix
+ ;; because it is relative to the output of cling rather than
+ ;; clang (see:
+ ;; https://github.com/root-project/cling/issues/434). Fully
+ ;; shortcut the logic in this method to return the correct
+ ;; static location.
+ (("static std::string getResourceDir.*" all)
+ (string-append all
+ " return std::string(\""
+ #$(this-package-input "clang-cling")
+ "/lib/clang/"
+ #$(first
+ (take (string-split
+ (package-version clang-cling) #\-)
+ 1)) ".0.0" ;e.g. 13.0.0
+ "\");")))
+ ;; Check for the 'lit' command for the tests, not 'lit.py'
+ ;; (see: https://github.com/root-project/cling/issues/432).
+ (substitute* "CMakeLists.txt"
+ (("lit.py")
+ "lit"))))
+ (add-after 'unpack 'adjust-lit.cfg
+ ;; See: https://github.com/root-project/cling/issues/435.
+ (lambda _
+ (substitute* "test/lit.cfg"
+ (("config.llvm_tools_dir \\+ '")
+ "config.cling_obj_root + '/bin"))))
+ (add-after 'install 'delete-static-libraries
+ ;; This reduces the size from 17 MiB to 5.4 MiB.
+ (lambda _
+ (for-each delete-file (find-files #$output "\\.a$")))))))
+ (native-inputs (list python python-lit))
+ (inputs (list clang-cling llvm-cling))
+ (home-page "https://root.cern/cling/")
+ (synopsis "Interactive C++ interpreter")
+ (description "Cling is an interactive C++17 standard compliant
interpreter, built on top of LLVM and Clang. Cling can be used as a
read-eval-print loop (REPL) to assist with rapid application development.
Here's how to print @samp{\"Hello World!\"} using @command{cling}:
@@ -2417,4 +2391,4 @@ (define-public cling
@example
cling '#include <stdio.h>' 'printf(\"Hello World!\\n\");'
@end example")
- (license license:lgpl2.1+)))) ;for the combined work
+ (license license:lgpl2.1+))) ;for the combined work
diff --git a/gnu/packages/patches/clang-cling-13-libc-search-path.patch b/gnu/packages/patches/clang-cling-13-libc-search-path.patch
new file mode 100644
index 0000000000..c7d22eaaa3
--- /dev/null
+++ b/gnu/packages/patches/clang-cling-13-libc-search-path.patch
@@ -0,0 +1,96 @@
+Clang attempts to guess file names based on the OS and distro (yes!),
+but unfortunately, that doesn't work for us.
+
+This patch makes it easy to insert libc's $libdir so that Clang passes the
+correct absolute file name of crt1.o etc. to 'ld'. It also disables all
+the distro-specific stuff and removes the hard-coded FHS directory names
+to make sure Clang also works on foreign distros.
+
+diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp
+index ee4fe841..f0313bbe 100644
+--- a/clang/lib/Driver/Distro.cpp
++++ b/clang/lib/Driver/Distro.cpp
+@@ -93,6 +93,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) {
+ }
+
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
++ // The compiler should always behave the same, even when used via Guix on a
++ // foreign distro.
++ return Distro::UnknownDistro;
++
+ Distro::DistroType Version = Distro::UnknownDistro;
+
+ // Newer freedesktop.org's compilant systemd-based systems
+diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp
+index d14776c5..88bc3ccd 100644
+--- a/clang/lib/Driver/ToolChains/Cuda.cpp
++++ b/clang/lib/Driver/ToolChains/Cuda.cpp
+@@ -119,6 +119,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+ const Driver &D, const llvm::Triple &HostTriple,
+ const llvm::opt::ArgList &Args)
+ : D(D) {
++ // Don't look for CUDA in /usr.
++ return;
++
+ struct Candidate {
+ std::string Path;
+ bool StrictChecking;
+diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -186,6 +186,10 @@
+
+ Generic_GCC::PushPPaths(PPaths);
+
++ // Comment out the distro-specific tweaks so that they don't bite when
++ // using Guix on a foreign distro.
++#if 0
++
+ Distro Distro(D.getVFS(), Triple);
+
+ if (Distro.IsAlpineLinux() || Triple.isAndroid()) {
+@@ -251,6 +255,7 @@
+
+ if (IsAndroid || Distro.IsOpenSU
This message was truncated. Download the full message here.
M
M
Maxim Cournoyer wrote on 26 May 20:20 +0200
[PATCH v2] gnu: cling: Update to 1.0.
(address . 71045@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
3ef47212eb3ca09bc447110fee7fd726986aa74a.1716747526.git.maxim.cournoyer@gmail.com
* gnu/packages/llvm.scm (%cling-version): Delete variable.
(llvm-cling): Inherit from llvm-15 and update to version 13-20240318-01.
[source]: Update source URL. Remove obsolete snippet. Add patches field.
[outputs]: Delete field.
[arguments]: Likewise.
(clang-cling-runtime): Update to 13-20240318-01. Inherit from
clang-runtime-13. Use llvm-cling source.
[phases]: Use gexps. Add change-directory phase.
(clang-cling): Update to 13-20240318-01. Inherit from
clang-13. Use llvm-cling source.
[arguments]: Use gexps. Add change-directory phase.
(cling): Update to 1.0.
[source]: Update URL.
[phases] {patch-paths}: Adjust patching of the 'getResourceDir' variable.
* gnu/packages/patches/cling-use-shared-library.patch: Rebase patch.
* gnu/packages/patches/clang-cling-13-libc-search-path.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register it.

Change-Id: I5d1f2c4d36ca226116bc74c2578154f86413f9e9
---
v2:
- reworked 'cling-use-shared-library.patch' per upstream discussions

gnu/local.mk | 1 +
gnu/packages/llvm.scm | 268 +++++------
.../clang-cling-13-libc-search-path.patch | 96 ++++
.../patches/cling-use-shared-library.patch | 418 ++++--------------
4 files changed, 316 insertions(+), 467 deletions(-)
create mode 100644 gnu/packages/patches/clang-cling-13-libc-search-path.patch

Toggle diff (392 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 502e97ecd5..d6dd9e3679 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1053,6 +1053,7 @@ dist_patch_DATA = \
%D%/packages/patches/clang-17.0-libc-search-path.patch \
%D%/packages/patches/clang-17.0-link-dsymutil-latomic.patch \
%D%/packages/patches/clang-18.0-libc-search-path.patch \
+ %D%/packages/patches/clang-cling-13-libc-search-path.patch \
%D%/packages/patches/clang-runtime-asan-build-fixes.patch \
%D%/packages/patches/clang-runtime-esan-build-fixes.patch \
%D%/packages/patches/clang-runtime-9-libsanitizer-mode-field.patch \
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 55acb8f87b..dc04905992 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -17,11 +17,10 @@
;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2020 Jakub K?dzio?ka <kuba@kadziolka.net>
;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022, 2024 Greg Hogan <code@greghogan.com>
;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2022 Clément Lassieur <clement@lassieur.org>
@@ -2236,180 +2235,155 @@ (define-public llvm-julia
(properties `((hidden? . #t)
,@(package-properties llvm-13)))))
-(define %cling-version "0.9")
-
-(define llvm-cling ;LLVM 9 with approximately 10 patches for cling
- (let ((base llvm-9))
+(define llvm-cling
+ ;; To determine which version of LLVM a given release of Cling should use,
+ ;; consult the
+ ;; https://raw.githubusercontent.com/root-project/cling/master/LastKnownGoodLLVMSVNRevision.txt
+ ;; file.
+ (let ((base llvm-15)) ;for a DYLIB build
(package/inherit base
(name "llvm-cling")
+ (version "13-20240318-01")
(source
(origin
(inherit (package-source base))
(method git-fetch)
(uri (git-reference
- (url "http://root.cern/git/llvm.git")
- (commit (string-append "cling-v" %cling-version))))
- (file-name (git-file-name "llvm-cling" %cling-version))
+ (url "https://github.com/root-project/llvm-project")
+ (commit (string-append "cling-llvm" version))))
+ (file-name (git-file-name "llvm-cling" version))
(sha256
(base32
- "0y3iwv3c9152kybmdrwvadggjs163r25h7rmlxzr3hfpr463pnwf"))
- (modules '((guix build utils)))
- (snippet
- ;; The source is missing an include directive (see:
- ;; https://github.com/vgvassilev/cling/issues/219).
- '(substitute* "utils/benchmark/src/benchmark_register.h"
- (("^#include <vector>.*" all)
- (string-append all "#include <limits>\n"))))))
- (outputs '("out"))
- (arguments
- (substitute-keyword-arguments (package-arguments base)
- ((#:configure-flags _ ''())
- '(list "-DLLVM_PARALLEL_LINK_JOBS=1" ;cater to smaller build machines
- ;; Only enable compiler support for the host architecture to
- ;; save on build time.
- "-DLLVM_TARGETS_TO_BUILD=host;NVPTX"
- "-DLLVM_INSTALL_UTILS=ON"
- "-DLLVM_ENABLE_RTTI=ON"
- "-DLLVM_ENABLE_FFI=ON"
- "-DLLVM_BUILD_LLVM_DYLIB=ON"
- "-DLLVM_LINK_LLVM_DYLIB=ON"))
- ((#:phases phases '%standard-phases)
- #~(modify-phases #$phases
- (delete 'shared-lib-workaround)
- (delete 'install-opt-viewer))))))))
+ "1zh6yp8px9hla7v9i67a6anbph140f8ixxbsz65aj7fizksjs1h3"))
+ (patches (search-patches "clang-cling-13-libc-search-path.patch")))))))
(define clang-cling-runtime
- (let ((base clang-runtime-9))
+ (let ((base clang-runtime-13))
(package/inherit base
(name "clang-cling-runtime")
+ (version (package-version llvm-cling))
+ (source (package-source llvm-cling))
(arguments
(substitute-keyword-arguments (package-arguments base)
((#:phases phases '%standard-phases)
- `(modify-phases ,phases
- (add-after 'install 'delete-static-libraries
- ;; This reduces the size from 22 MiB to 4 MiB.
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (for-each delete-file (find-files out "\\.a$")))))))))
+ #~(modify-phases #$phases
+ (add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "compiler-rt")))
+ (add-after 'install 'delete-static-libraries
+ ;; This reduces the size from 22 MiB to 4 MiB.
+ (lambda _
+ (for-each delete-file (find-files #$output "\\.a$"))))))))
(inputs (modify-inputs (package-inputs base)
(replace "llvm" llvm-cling))))))
-(define clang-cling ;modified clang 9 with ~ 60 patches for cling
- (let ((base clang-9))
+(define clang-cling
+ (let ((base clang-13))
(package/inherit base
(name "clang-cling")
- (source
- (origin
- (inherit (package-source base))
- (method git-fetch)
- (uri (git-reference
- (url "http://root.cern/git/clang.git")
- (commit (string-append "cling-v" %cling-version))))
- (file-name (git-file-name "clang-cling" %cling-version))
- (sha256
- (base32
- "128mxkwghss6589wvm6amzv183aq88rdrnfxjiyjcji5hx84vpby"))))
+ (version (package-version llvm-cling))
+ (source (package-source llvm-cling))
(arguments
(substitute-keyword-arguments (package-arguments base)
((#:phases phases '%standard-phases)
- `(modify-phases ,phases
- (add-after 'install 'delete-static-libraries
- ;; This reduces the size by half, from 220 MiB to 112 MiB.
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (for-each delete-file (find-files out "\\.a$")))))))))
+ #~(modify-phases #$phases
+ (add-after 'unpack 'change-directory
+ (lambda _
+ (chdir "clang")))
+ (add-after 'install 'delete-static-libraries
+ ;; This reduces the size by half, from 220 MiB to 112 MiB.
+ (lambda _
+ (for-each delete-file (find-files #$output "\\.a$"))))))))
(propagated-inputs
(modify-inputs (package-propagated-inputs base)
(replace "llvm" llvm-cling)
(replace "clang-runtime" clang-cling-runtime))))))
(define-public cling
- ;; The tagged v0.9 release doesn't build, so use the latest commit.
- (let ((commit "d78d1a03fedfd2bf6d2b6ff295aca576d98940df")
- (revision "1")
- (version* "0.9"))
- (package
- (name "cling")
- (version (git-version version* revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "http://root.cern/git/cling.git")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "0lsbxv21b4qw11xkw9iipdpca64jjwwqxm0qf5v2cgdlibf8m8n9"))
- ;; Patch submitted upstream here:
- ;; https://github.com/root-project/cling/pull/433.
- (patches (search-patches "cling-use-shared-library.patch"))))
- (build-system cmake-build-system)
- (arguments
- (list
- #:build-type "Release" ;keep the build as lean as possible
- #:tests? #f ;FIXME: 78 tests fail (out of ~200)
- #:test-target "check-cling"
- #:configure-flags
- #~(list (string-append "-DCLING_CXX_PATH="
- (search-input-file %build-inputs "bin/g++"))
- ;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
- ;; be a Python script, not a shell executable.
- (string-append "-DLLVM_EXTERNAL_LIT="
- (search-input-file %build-inputs "bin/.lit-real")))
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'set-version
- (lambda _
- (make-file-writable "VERSION")
- (call-with-output-file "VERSION"
- (lambda (port)
- (format port "~a~%" #$version)))))
- (add-after 'unpack 'patch-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* "lib/Interpreter/CIFactory.cpp"
- (("\\bsed\\b")
- (which "sed"))
- ;; This ensures that the default C++ library used by Cling is
- ;; that of the compiler that was used to build it, rather
- ;; than that of whatever g++ happens to be on PATH.
- (("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
- (format #f "ReadCompilerIncludePaths(~s"
- (search-input-file inputs "bin/g++")))
- ;; Cling uses libclang's CompilerInvocation::GetResourcesPath
- ;; to resolve Clang's library prefix, but this fails on Guix
- ;; because it is relative to the output of cling rather than
- ;; clang (see:
- ;; https://github.com/root-project/cling/issues/434). Fully
- ;; shortcut the logic in this method to return the correct
- ;; static location.
- (("static std::string getResourceDir.*" all)
- (string-append all
- " return std::string(\""
- #$(this-package-input "clang-cling")
- "/lib/clang/" #$(package-version clang-cling)
- "\");")))
- ;; Check for the 'lit' command for the tests, not 'lit.py'
- ;; (see: https://github.com/root-project/cling/issues/432).
- (substitute* "CMakeLists.txt"
- (("lit.py")
- "lit"))))
- (add-after 'unpack 'adjust-lit.cfg
- ;; See: https://github.com/root-project/cling/issues/435.
- (lambda _
- (substitute* "test/lit.cfg"
- (("config.llvm_tools_dir \\+ '")
- "config.cling_obj_root + '/bin"))))
- (add-after 'install 'delete-static-libraries
- ;; This reduces the size from 17 MiB to 5.4 MiB.
- (lambda _
- (for-each delete-file (find-files #$output "\\.a$")))))))
- (native-inputs
- (list python python-lit))
- (inputs
- (list clang-cling llvm-cling))
- (home-page "https://root.cern/cling/")
- (synopsis "Interactive C++ interpreter")
- (description "Cling is an interactive C++17 standard compliant
+ (package
+ (name "cling")
+ (version "1.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/root-project/cling")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "17n66wf5yg1xjc94d6yb8g2gydjz0b8cj4a2pn6xrygdvhh09vv1"))
+ ;; Patch submitted upstream here:
+ ;; https://github.com/root-project/cling/pull/433.
+ (patches (search-patches "cling-use-shared-library.patch"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:build-type "Release" ;keep the build as lean as possible
+ #:tests? #f ;FIXME: 78 tests fail (out of ~200)
+ #:test-target "check-cling"
+ #:configure-flags
+ #~(list (string-append "-DCLING_CXX_PATH="
+ (search-input-file %build-inputs "bin/g++"))
+ ;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
+ ;; be a Python script, not a shell executable.
+ (string-append "-DLLVM_EXTERNAL_LIT="
+ (search-input-file %build-inputs "bin/.lit-real")))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'set-version
+ (lambda _
+ (make-file-writable "VERSION")
+ (call-with-output-file "VERSION"
+ (lambda (port)
+ (format port "~a~%" #$version)))))
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "lib/Interpreter/CIFactory.cpp"
+ (("\\bsed\\b")
+ (which "sed"))
+ ;; This ensures that the default C++ library used by Cling is
+ ;; that of the compiler that was used to build it, rather
+ ;; than that of whatever g++ happens to be on PATH.
+ (("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
+ (format #f "ReadCompilerIncludePaths(~s"
+ (search-input-file inputs "bin/g++")))
+ ;; Cling uses libclang's CompilerInvocation::GetResourcesPath
+ ;; to resolve Clang's library prefix, but this fails on Guix
+ ;; because it is relative to the output of cling rather than
+ ;; clang (see:
+ ;; https://github.com/root-project/cling/issues/434). Fully
+ ;; shortcut the logic in this method to return the correct
+ ;; static location.
+ (("static std::string getResourceDir.*" all)
+ (string-append all
+ " return std::string(\""
+ #$(this-package-input "clang-cling")
+ "/lib/clang/"
+ #$(first
+ (take (string-split
+ (package-version clang-cling) #\-)
+ 1)) ".0.0" ;e.g. 13.0.0
+ "\");")))
+ ;; Check for the 'lit' command for the tests, not 'lit.py'
+ ;; (see: https://github.com/root-project/cling/issues/432).
+ (substitute* "CMakeLists.txt"
+ (("lit.py")
+ "lit"))))
+ (add-after 'unpack 'adjust-lit.cfg
+ ;; See: https://github.com/root-project/cling/issues/435.
+ (lambda _
+ (substitute* "test/lit.cfg"
+ (("config.llvm_tools_dir \\+ '")
+ "config.cling_obj_root + '/bin"))))
+ (add-after 'install 'delete-static-libraries
+ ;; This reduces the size from 17 MiB to 5.4 MiB.
+ (lambda _
+ (for-each delete-file (find-files #$output "\\.a$")))))))
+ (native-inputs (list python python-lit))
+ (inputs (list clang-cling llvm-cling))
+ (home-page "https://root.cern/cling/")
+ (synopsis "Interactive C++ interpreter")
+ (description "Cling is an interactive C++17 standard compliant
interpreter, built on top of LLVM and Clang. Cling can be used as a
read-eval-print loop (REPL) to assist with rapid application development.
Here's how to print @samp{\"Hello World!\"} using @command{cling}:
@@ -2417,4 +2391,4 @@ (define-public cling
@example
cling '#include <stdio.h>' 'printf(\"Hello World!\\n\");'
@end example")
- (license license:lgpl2.1+)))) ;for the combined work
+ (license license:lgpl2.1+))) ;for the combined work
diff --git a/gnu/packages/patches/clang-cling-13-libc-search-path.patch b/gnu/packages/patches/clang-cling-13-libc-search-path.patch
new file mode 100644
index 0000000000..c7d22eaaa3
--- /dev/null
+++ b/gnu/packages/patches/clang-cling-13-libc-search-path.patch
@@ -0,0 +1,96 @@
+Clang attempts to guess file names based on the OS and distro (yes!),
+but unfortunately, that doesn't work for us.
+
+This patch makes it easy to insert libc's $libdir so that Clang passes the
+correct absolute file name of crt1.o etc. to 'ld'. It also disables all
+the distro-specific stuff and removes the hard-coded FHS directory names
+to make sure Clang also works on foreign distros.
+
+diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp
+index ee4fe841..f0313bbe 100644
+--- a/clang/lib/Driver/Distro.cpp
++++ b/clang/lib/Driver/Distro.cpp
+@@ -93,6 +93,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) {
+ }
+
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
++ // The compiler should always behave the same, even when used via Guix on a
++ // foreign distro.
++ return Distro::UnknownDistro;
++
+ Distro::DistroType Version = Distro::UnknownDistro;
+
+ // Newer freedesktop.org's compilant systemd-based systems
+diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp
+index d14776c5..88bc3ccd 100644
+--- a/clang/lib/Driver/ToolChains/Cuda.cpp
++++ b/clang/lib/Driver/ToolChains/Cuda.cpp
+@@ -119,6 +119,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+ const Driver &D, const llvm::Triple &HostTriple,
+ const llvm::opt::ArgList &Args)
+ : D(D) {
++ // Don't look for CUDA in /usr.
++ return;
++
+ struct Candidate {
+ std::string Path;
+ bool StrictChecking;
+diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
+--- a/clang/lib/Driver/ToolChains/Linux.cpp
++++ b/clang/lib/Driver/ToolChains/Linux.cpp
+@@ -186,6 +186,10 @@
+
+ Generic_GCC::PushPPaths(PPaths);
+
++ // Comment out the distro-specific tweaks so that they don't bite when
++ // using Guix on a foreign distro.
++#if 0
++
+ Distro Distro(D.getVFS(), Triple);
+
+ if (Distro.IsAlpineLinux() || Triple
This message was truncated. Download the full message here.
M
M
Maxim Cournoyer wrote on 30 May 04:06 +0200
(address . 71045-done@debbugs.gnu.org)
87zfs8dpe2.fsf@gmail.com
Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

Toggle quote (20 lines)
> * gnu/packages/llvm.scm (%cling-version): Delete variable.
> (llvm-cling): Inherit from llvm-15 and update to version 13-20240318-01.
> [source]: Update source URL. Remove obsolete snippet. Add patches field.
> [outputs]: Delete field.
> [arguments]: Likewise.
> (clang-cling-runtime): Update to 13-20240318-01. Inherit from
> clang-runtime-13. Use llvm-cling source.
> [phases]: Use gexps. Add change-directory phase.
> (clang-cling): Update to 13-20240318-01. Inherit from
> clang-13. Use llvm-cling source.
> [arguments]: Use gexps. Add change-directory phase.
> (cling): Update to 1.0.
> [source]: Update URL.
> [phases] {patch-paths}: Adjust patching of the 'getResourceDir' variable.
> * gnu/packages/patches/cling-use-shared-library.patch: Rebase patch.
> * gnu/packages/patches/clang-cling-13-libc-search-path.patch: New patch.
> * gnu/local.mk (dist_patch_DATA): Register it.
>
> Change-Id: I5d1f2c4d36ca226116bc74c2578154f86413f9e9

Merged with 29a4514a347cf23abf65b7abe03d0d14551ebf56.

--
Thanks,
Maxim
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 71045@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 71045
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch