Package: guix-patches;
Reported by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Date: Sat, 18 May 2024 20:58:02 UTC
Severity: normal
Tags: patch
Done: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 71045 in the body.
You can then email your comments to 71045 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
guix-patches <at> gnu.org
:bug#71045
; Package guix-patches
.
(Sat, 18 May 2024 20:58:02 GMT) Full text and rfc822 format available.Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
:guix-patches <at> gnu.org
.
(Sat, 18 May 2024 20:58:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com> To: guix-patches <at> gnu.org Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com> Subject: [PATCH] gnu: cling: Update to 1.0. Date: Sat, 18 May 2024 16:56:38 -0400
* 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 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 <at> autistici.org> ;;; Copyright © 2020 Jakub Kądziołka <kuba <at> kadziolka.net> ;;; Copyright © 2021, 2022 Maxime Devos <maximedevos <at> telenet.be> -;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer <at> gmail.com> +;;; Copyright © 2020, 2021, 2022, 2024 Maxim Cournoyer <maxim.cournoyer <at> gmail.com> ;;; Copyright © 2021 Julien Lepiller <julien <at> lepiller.eu> ;;; Copyright © 2021 Lars-Dominik Braun <lars <at> 6xq.net> ;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv <at> posteo.net> -;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer <at> gmail.com> ;;; Copyright © 2022, 2024 Greg Hogan <code <at> greghogan.com> ;;; Copyright © 2022 John Kehayias <john.kehayias <at> protonmail.com> ;;; Copyright © 2022 Clément Lassieur <clement <at> 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.IsOpenSUSE()) + ExtraOpts.push_back("--enable-new-dtags"); ++#endif + + // The selection of paths to try here is designed to match the patterns which + // the GCC driver itself uses, as this is part of the GCC-compatible driver. +@@ -264,6 +269,7 @@ + + Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths); + ++#if 0 + addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths); + addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths); + +@@ -295,9 +301,11 @@ + addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths); + addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths); + } ++#endif + + Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths); + ++#if 0 + // Similar to the logic for GCC above, if we are currently running Clang + // inside of the requested system root, add its parent library path to those + // searched. +@@ -305,9 +313,14 @@ + // directory ('Dir' below) or the ResourceDir. + if (StringRef(D.Dir).startswith(SysRoot)) + addPathIfExists(D, D.Dir + "/../lib", Paths); ++#endif ++ ++ // Add libc's lib/ directory to the search path, so that crt1.o, crti.o, ++ // and friends can be found. ++ addPathIfExists(D, "@GLIBC_LIBDIR@", Paths); + +- addPathIfExists(D, SysRoot + "/lib", Paths); +- addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ // Add GCC's lib/ directory so libstdc++.so can be found. ++ addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths); + } + + ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const { diff --git a/gnu/packages/patches/cling-use-shared-library.patch b/gnu/packages/patches/cling-use-shared-library.patch index 6385b307b3..cb79c916b9 100644 --- a/gnu/packages/patches/cling-use-shared-library.patch +++ b/gnu/packages/patches/cling-use-shared-library.patch @@ -1,58 +1,30 @@ -From 811f0a575231496318b5e9c9a0ff0ed195b16dc0 Mon Sep 17 00:00:00 2001 -From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com> -Date: Tue, 7 Sep 2021 16:35:07 -0400 -Subject: [PATCH] build: Allow building Cling using the Clang shared library. - -The officially supported way to build LLVM/Clang as a shared library -is via the LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB CMake -options (see: https://llvm.org/docs/BuildingADistribution.html). When -built this way, the whole of Clang API is exposed as a shared -library (libclang-cpp.so). - -* CMakeLists.txt: Query if we're in shared mode via llvm-config, and -register the result as LLVM_LIB_IS_SHARED. -[LLVM_LIB_IS_SHARED] <target_link_libraries>: Use the PUBLIC interface of the -LLVM shared library. -* lib/Interpreter/CMakeLists.txt [LLVM_LIB_IS_SHARED]: When defined, replace the -individual Clang components by clang-cpp. -* lib/MetaProcessor/CMakeLists.txt: Likewise. -* lib/Utils/CMakeLists.txt: Likewise. -* tools/Jupyter/CMakeLists.txt: Likewise. -* tools/driver/CMakeLists.txt: Likewise. -* tools/libcling/CMakeLists.txt: Likewise. ---- - CMakeLists.txt | 10 ++++++-- - lib/Interpreter/CMakeLists.txt | 40 ++++++++++++++++++-------------- - lib/MetaProcessor/CMakeLists.txt | 16 +++++++++---- - lib/Utils/CMakeLists.txt | 34 +++++++++++++++------------ - tools/Jupyter/CMakeLists.txt | 11 ++++++++- - tools/driver/CMakeLists.txt | 16 +++---------- - tools/libcling/CMakeLists.txt | 38 +++++++++++++++--------------- - 7 files changed, 93 insertions(+), 72 deletions(-) +Allow linking Cling to a LLVM shared library +Upstream status: https://github.com/root-project/root/pull/15563 diff --git a/CMakeLists.txt b/CMakeLists.txt -index 65b14b27..888f7ee9 100644 +index 9775b07f..31dd58fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -23,6 +23,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) +@@ -23,7 +23,8 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + "--bindir" "--libdir" "--includedir" - "--prefix" -+ "--shared-mode" - "--src-root") +- "--prefix") ++ "--prefix" ++ "--shared-mode") execute_process( COMMAND ${CONFIG_COMMAND} -@@ -47,7 +48,8 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + RESULT_VARIABLE HAD_ERROR +@@ -47,6 +48,8 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) -- list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) + list(GET CONFIG_OUTPUT 5 LLVM_LIB_IS_SHARED) + list(GET CONFIG_OUTPUT 6 MAIN_SRC_DIR) if(NOT MSVC_IDE) set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS} -@@ -427,7 +429,11 @@ macro(add_cling_library name) +@@ -444,7 +447,11 @@ macro(add_cling_library name) endif() if(TARGET ${name}) @@ -66,7 +38,7 @@ index 65b14b27..888f7ee9 100644 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libcling") install(TARGETS ${name} diff --git a/lib/Interpreter/CMakeLists.txt b/lib/Interpreter/CMakeLists.txt -index 921c773c..af65c020 100644 +index e397da97..9a50ad2c 100644 --- a/lib/Interpreter/CMakeLists.txt +++ b/lib/Interpreter/CMakeLists.txt @@ -6,22 +6,28 @@ @@ -114,13 +86,6 @@ index 921c773c..af65c020 100644 set(LLVM_LINK_COMPONENTS analysis -@@ -369,4 +375,4 @@ if ((NOT builtin_llvm) AND builtin_clang) - get_property(P SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES) - list(INSERT P 0 ${FixInclude}) - set_property(SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES "${P}") --endif() -\ No newline at end of file -+endif() diff --git a/lib/MetaProcessor/CMakeLists.txt b/lib/MetaProcessor/CMakeLists.txt index e753dca3..5f4641bb 100644 --- a/lib/MetaProcessor/CMakeLists.txt @@ -230,19 +195,18 @@ index aad5f3f7..8b4ac36f 100644 if( LLVM_ENABLE_PIC ) set(ENABLE_SHARED SHARED) diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt -index 1968b97f..5ed53fb7 100644 +index d107dd7d..49fbaef8 100644 --- a/tools/driver/CMakeLists.txt +++ b/tools/driver/CMakeLists.txt -@@ -9,23 +9,13 @@ - # Keep symbols for JIT resolution +@@ -10,16 +10,9 @@ set(LLVM_NO_DEAD_STRIP 1) + set(LLVM_LINK_COMPONENTS Support) -if(BUILD_SHARED_LIBS) - set(LIBS -- LLVMSupport - - clangFrontendTool -- + - clingInterpreter - clingMetaProcessor - clingUserInterface @@ -253,13 +217,7 @@ index 1968b97f..5ed53fb7 100644 add_cling_executable(cling cling.cpp ) - else() - set(LIBS -- LLVMSupport - - clangASTMatchers - clangFrontendTool -@@ -38,7 +28,7 @@ else() +@@ -36,7 +29,7 @@ else() $<TARGET_OBJECTS:obj.clingMetaProcessor> $<TARGET_OBJECTS:obj.clingUtils> ) @@ -269,7 +227,7 @@ index 1968b97f..5ed53fb7 100644 set_target_properties(cling PROPERTIES ENABLE_EXPORTS 1) diff --git a/tools/libcling/CMakeLists.txt b/tools/libcling/CMakeLists.txt -index 143d3bdb..ba000d44 100644 +index 2a2b15e0..06d07138 100644 --- a/tools/libcling/CMakeLists.txt +++ b/tools/libcling/CMakeLists.txt @@ -10,21 +10,25 @@ set(SOURCES @@ -313,7 +271,7 @@ index 143d3bdb..ba000d44 100644 set( LLVM_LINK_COMPONENTS analysis -@@ -63,10 +67,6 @@ option(LIBCLING_BUILD_STATIC +@@ -64,10 +68,6 @@ option(LIBCLING_BUILD_STATIC # set(LLVM_EXPORTED_SYMBOL_FILE) #endif() @@ -324,6 +282,3 @@ index 143d3bdb..ba000d44 100644 if((NOT LLVM_ENABLE_PIC OR LIBCLING_BUILD_STATIC) AND NOT WIN32) set(ENABLE_STATIC STATIC) endif() --- -2.33.0 - base-commit: e9b25a6c6c626a560d28a1f732e6e5d362d584a4 -- 2.41.0
maxim.cournoyer <at> gmail.com, guix-patches <at> gnu.org
:bug#71045
; Package guix-patches
.
(Sun, 26 May 2024 18:23:02 GMT) Full text and rfc822 format available.Message #8 received at 71045 <at> debbugs.gnu.org (full text, mbox):
From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com> To: 71045 <at> debbugs.gnu.org Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com> Subject: [PATCH v2] gnu: cling: Update to 1.0. Date: Sun, 26 May 2024 14:20:36 -0400
* 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 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 <at> autistici.org> ;;; Copyright © 2020 Jakub Kądziołka <kuba <at> kadziolka.net> ;;; Copyright © 2021, 2022 Maxime Devos <maximedevos <at> telenet.be> -;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer <at> gmail.com> +;;; Copyright © 2020, 2021, 2022, 2024 Maxim Cournoyer <maxim.cournoyer <at> gmail.com> ;;; Copyright © 2021 Julien Lepiller <julien <at> lepiller.eu> ;;; Copyright © 2021 Lars-Dominik Braun <lars <at> 6xq.net> ;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv <at> posteo.net> -;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer <at> gmail.com> ;;; Copyright © 2022, 2024 Greg Hogan <code <at> greghogan.com> ;;; Copyright © 2022 John Kehayias <john.kehayias <at> protonmail.com> ;;; Copyright © 2022 Clément Lassieur <clement <at> 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.IsOpenSUSE()) + ExtraOpts.push_back("--enable-new-dtags"); ++#endif + + // The selection of paths to try here is designed to match the patterns which + // the GCC driver itself uses, as this is part of the GCC-compatible driver. +@@ -264,6 +269,7 @@ + + Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths); + ++#if 0 + addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths); + addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths); + +@@ -295,9 +301,11 @@ + addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths); + addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths); + } ++#endif + + Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths); + ++#if 0 + // Similar to the logic for GCC above, if we are currently running Clang + // inside of the requested system root, add its parent library path to those + // searched. +@@ -305,9 +313,14 @@ + // directory ('Dir' below) or the ResourceDir. + if (StringRef(D.Dir).startswith(SysRoot)) + addPathIfExists(D, D.Dir + "/../lib", Paths); ++#endif ++ ++ // Add libc's lib/ directory to the search path, so that crt1.o, crti.o, ++ // and friends can be found. ++ addPathIfExists(D, "@GLIBC_LIBDIR@", Paths); + +- addPathIfExists(D, SysRoot + "/lib", Paths); +- addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ // Add GCC's lib/ directory so libstdc++.so can be found. ++ addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths); + } + + ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const { diff --git a/gnu/packages/patches/cling-use-shared-library.patch b/gnu/packages/patches/cling-use-shared-library.patch index 6385b307b3..415f542add 100644 --- a/gnu/packages/patches/cling-use-shared-library.patch +++ b/gnu/packages/patches/cling-use-shared-library.patch @@ -1,329 +1,107 @@ -From 811f0a575231496318b5e9c9a0ff0ed195b16dc0 Mon Sep 17 00:00:00 2001 -From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com> -Date: Tue, 7 Sep 2021 16:35:07 -0400 -Subject: [PATCH] build: Allow building Cling using the Clang shared library. +Upstream status: https://github.com/root-project/root/pull/15563 -The officially supported way to build LLVM/Clang as a shared library -is via the LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB CMake -options (see: https://llvm.org/docs/BuildingADistribution.html). When -built this way, the whole of Clang API is exposed as a shared -library (libclang-cpp.so). - -* CMakeLists.txt: Query if we're in shared mode via llvm-config, and -register the result as LLVM_LIB_IS_SHARED. -[LLVM_LIB_IS_SHARED] <target_link_libraries>: Use the PUBLIC interface of the -LLVM shared library. -* lib/Interpreter/CMakeLists.txt [LLVM_LIB_IS_SHARED]: When defined, replace the -individual Clang components by clang-cpp. -* lib/MetaProcessor/CMakeLists.txt: Likewise. -* lib/Utils/CMakeLists.txt: Likewise. -* tools/Jupyter/CMakeLists.txt: Likewise. -* tools/driver/CMakeLists.txt: Likewise. -* tools/libcling/CMakeLists.txt: Likewise. ---- - CMakeLists.txt | 10 ++++++-- - lib/Interpreter/CMakeLists.txt | 40 ++++++++++++++++++-------------- - lib/MetaProcessor/CMakeLists.txt | 16 +++++++++---- - lib/Utils/CMakeLists.txt | 34 +++++++++++++++------------ - tools/Jupyter/CMakeLists.txt | 11 ++++++++- - tools/driver/CMakeLists.txt | 16 +++---------- - tools/libcling/CMakeLists.txt | 38 +++++++++++++++--------------- - 7 files changed, 93 insertions(+), 72 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 65b14b27..888f7ee9 100644 +diff --git a/interpreter/cling/CMakeLists.txt b/interpreter/cling/CMakeLists.txt +index 9775b07f10..7028042096 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -23,6 +23,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) - "--libdir" - "--includedir" - "--prefix" -+ "--shared-mode" - "--src-root") - execute_process( - COMMAND ${CONFIG_COMMAND} -@@ -47,7 +48,8 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) - list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) - list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) - list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) -- list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) -+ list(GET CONFIG_OUTPUT 5 LLVM_LIB_IS_SHARED) -+ list(GET CONFIG_OUTPUT 6 MAIN_SRC_DIR) - - if(NOT MSVC_IDE) - set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS} -@@ -427,7 +429,11 @@ macro(add_cling_library name) - endif() - - if(TARGET ${name}) -- target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS}) -+ if(LLVM_LIB_IS_SHARED) -+ target_link_libraries(${name} PUBLIC LLVM) -+ else() -+ target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS}) -+ endif() - - if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libcling") - install(TARGETS ${name} -diff --git a/lib/Interpreter/CMakeLists.txt b/lib/Interpreter/CMakeLists.txt -index 921c773c..af65c020 100644 ---- a/lib/Interpreter/CMakeLists.txt -+++ b/lib/Interpreter/CMakeLists.txt -@@ -6,22 +6,28 @@ - # LICENSE.TXT for details. - #------------------------------------------------------------------------------ - --set(LIBS -- clingUtils -- clangCodeGen -- clangDriver -- clangFrontend -- clangParse -- clangSema -- clangAnalysis -- clangEdit -- clangRewrite -- clangRewriteFrontend -- clangSerialization -- clangAST -- clangBasic -- clangLex --) -+if (LLVM_LIB_IS_SHARED) -+ set(LIBS -+ clang-cpp -+ clingUtils) -+else() -+ set(LIBS -+ clingUtils -+ clangCodeGen -+ clangDriver -+ clangFrontend -+ clangParse -+ clangSema -+ clangAnalysis -+ clangEdit -+ clangRewrite -+ clangRewriteFrontend -+ clangSerialization -+ clangAST -+ clangBasic -+ clangLex -+ ) -+endif() - - set(LLVM_LINK_COMPONENTS - analysis -@@ -369,4 +375,4 @@ if ((NOT builtin_llvm) AND builtin_clang) - get_property(P SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES) - list(INSERT P 0 ${FixInclude}) - set_property(SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES "${P}") --endif() -\ No newline at end of file -+endif() -diff --git a/lib/MetaProcessor/CMakeLists.txt b/lib/MetaProcessor/CMakeLists.txt -index e753dca3..5f4641bb 100644 ---- a/lib/MetaProcessor/CMakeLists.txt -+++ b/lib/MetaProcessor/CMakeLists.txt -@@ -10,7 +10,16 @@ set( LLVM_LINK_COMPONENTS - core - support - binaryformat --) -+ ) -+ -+if (LLVM_LIB_IS_SHARED) -+ set(LIBS clang-cpp) -+else() -+ set(LIBS -+ clangLex -+ clangAST -+ clangBasic) -+endif() - - add_cling_library(clingMetaProcessor OBJECT - Display.cpp -@@ -21,10 +30,7 @@ add_cling_library(clingMetaProcessor OBJECT - MetaSema.cpp - - LINK_LIBS -- clangLex -- clangAST -- clangBasic -- -+ ${LIBS} - clingInterpreter - clingUtils - ) -diff --git a/lib/Utils/CMakeLists.txt b/lib/Utils/CMakeLists.txt -index 327c9fff..fbe4bd87 100644 ---- a/lib/Utils/CMakeLists.txt -+++ b/lib/Utils/CMakeLists.txt -@@ -26,21 +26,25 @@ set(LLVM_LINK_COMPONENTS - ${LLVM_TARGETS_TO_BUILD} - ) - --set(LIBS -- clangCodeGen -- clangDriver -- clangFrontend -- clangParse -- clangSema -- clangAnalysis -- clangEdit -- clangRewrite -- clangRewriteFrontend -- clangSerialization -- clangAST -- clangBasic -- clangLex --) -+if (LLVM_LIB_IS_SHARED) -+ set(LIBS clang-cpp) -+else() -+ set(LIBS -+ clangCodeGen -+ clangDriver -+ clangFrontend -+ clangParse -+ clangSema -+ clangAnalysis -+ clangEdit -+ clangRewrite -+ clangRewriteFrontend -+ clangSerialization -+ clangAST -+ clangBasic -+ clangLex -+ ) -+endif() - - find_library(DL_LIBRARY_PATH dl) - if (DL_LIBRARY_PATH) -diff --git a/tools/Jupyter/CMakeLists.txt b/tools/Jupyter/CMakeLists.txt -index aad5f3f7..8b4ac36f 100644 ---- a/tools/Jupyter/CMakeLists.txt -+++ b/tools/Jupyter/CMakeLists.txt -@@ -39,6 +39,14 @@ else() - endif() - endif() - -+if (LLVM_LIB_IS_SHARED) -+ set(LIBS -+ clang-cpp -+ clingUserInterface -+ clingMetaProcessor -+ ${INTERPRETER} -+ clingUtils) -+else() - set(LIBS - clangAST - clangBasic -@@ -54,7 +62,8 @@ set(LIBS - clingMetaProcessor - ${INTERPRETER} - clingUtils +@@ -13,81 +13,22 @@ endif(WIN32) + if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + project(Cling) + +- # Rely on llvm-config. +- set(CONFIG_OUTPUT) +- find_program(LLVM_CONFIG "llvm-config") +- if(LLVM_CONFIG) +- message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") +- set(CONFIG_COMMAND ${LLVM_CONFIG} +- "--assertion-mode" +- "--bindir" +- "--libdir" +- "--includedir" +- "--prefix") +- execute_process( +- COMMAND ${CONFIG_COMMAND} +- RESULT_VARIABLE HAD_ERROR +- OUTPUT_VARIABLE CONFIG_OUTPUT - ) -+ ) -+endif() - - if( LLVM_ENABLE_PIC ) - set(ENABLE_SHARED SHARED) -diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt -index 1968b97f..5ed53fb7 100644 ---- a/tools/driver/CMakeLists.txt -+++ b/tools/driver/CMakeLists.txt -@@ -9,23 +9,13 @@ - # Keep symbols for JIT resolution - set(LLVM_NO_DEAD_STRIP 1) - --if(BUILD_SHARED_LIBS) -- set(LIBS -- LLVMSupport +- if(NOT HAD_ERROR) +- string(REGEX REPLACE +- "[ \t]*[\r\n]+[ \t]*" ";" +- CONFIG_OUTPUT ${CONFIG_OUTPUT}) +- else() +- string(REPLACE ";" " " CONFIG_COMMAND_STR "${CONFIG_COMMAND}") +- message(STATUS "${CONFIG_COMMAND_STR}") +- message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}") +- endif() +- else() +- message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}") +- endif() ++ # See <https://llvm.org/docs/CMake.html#embedding-llvm-in-your-project>. ++ find_package(LLVM REQUIRED CONFIG) ++ message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") ++ message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") + +- list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) +- list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) +- list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) +- list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) +- list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) - -- clangFrontendTool +- if(NOT MSVC_IDE) +- set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS} +- CACHE BOOL "Enable assertions") +- # Assertions should follow llvm-config's. +- mark_as_advanced(LLVM_ENABLE_ASSERTIONS) +- endif() ++ separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) ++ add_definitions(${LLVM_DEFINITIONS_LIST}) + +- set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin") +- set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib") +- set(LLVM_MAIN_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include") +- set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree") ++ find_package(Clang REQUIRED CONFIG) ++ message(STATUS "Found supported version: Clang ${CLANG_PACKAGE_VERSION}") ++ message(STATUS "Using ClangConfig.cmake in: ${Clang_DIR}") + + find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR} + NO_DEFAULT_PATH) + +- set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm") +- set(LLVMCONFIG_FILE "${LLVM_CMAKE_PATH}/LLVMConfig.cmake") +- if(EXISTS ${LLVMCONFIG_FILE}) +- list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}") +- include(${LLVMCONFIG_FILE}) +- else() +- message(FATAL_ERROR "Not found: ${LLVMCONFIG_FILE}") +- endif() - -- clingInterpreter -- clingMetaProcessor -- clingUserInterface -- clingUtils -- ) -+if(LLVM_LIB_IS_SHARED) -+ set(LIBS clang-cpp clingUserInterface) - add_cling_executable(cling - cling.cpp - ) - else() - set(LIBS -- LLVMSupport - - clangASTMatchers - clangFrontendTool -@@ -38,7 +28,7 @@ else() - $<TARGET_OBJECTS:obj.clingMetaProcessor> - $<TARGET_OBJECTS:obj.clingUtils> - ) --endif(BUILD_SHARED_LIBS) -+endif(LLVM_LIB_IS_SHARED) - - set_target_properties(cling - PROPERTIES ENABLE_EXPORTS 1) -diff --git a/tools/libcling/CMakeLists.txt b/tools/libcling/CMakeLists.txt -index 143d3bdb..ba000d44 100644 ---- a/tools/libcling/CMakeLists.txt -+++ b/tools/libcling/CMakeLists.txt -@@ -10,21 +10,25 @@ set(SOURCES - ADDITIONAL_HEADERS - ) - --set(LIBS -- clangAnalysis -- clangDriver -- clangFrontend -- clangParse -- clangSema -- clangAST -- clangLex -- clangSerialization -- clangCodeGen -- clangBasic -- clangEdit +- # They are used as destination of target generators. +- set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) +- set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) +- if(WIN32 OR CYGWIN) +- # DLL platform -- put DLLs into bin. +- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) +- else() +- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) +- endif() +- +- option(LLVM_INSTALL_TOOLCHAIN_ONLY +- "Only include toolchain files in the 'install' target." OFF) +- +- option(LLVM_FORCE_USE_OLD_HOST_TOOLCHAIN +- "Set to ON to force using an old, unsupported host toolchain." OFF) - -- clingUtils --) -+if (LLVM_LIB_IS_SHARED) -+ set(LIBS clang-cpp) -+else() -+ set(LIBS -+ clangAnalysis -+ clangDriver -+ clangFrontend -+ clangParse -+ clangSema -+ clangAST -+ clangLex -+ clangSerialization -+ clangCodeGen -+ clangBasic -+ clangEdit -+ -+ clingUtils -+ ) -+endif() ++ list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") + include(AddLLVM) + include(TableGen) + include(HandleLLVMOptions) +@@ -99,7 +40,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + set(LLVM_INCLUDE_TESTS ON) + endif() - set( LLVM_LINK_COMPONENTS - analysis -@@ -63,10 +67,6 @@ option(LIBCLING_BUILD_STATIC - # set(LLVM_EXPORTED_SYMBOL_FILE) - #endif() +- include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}") ++ include_directories("${LLVM_INCLUDE_DIRS}") + link_directories("${LLVM_LIBRARY_DIR}") --if( LLVM_ENABLE_PIC ) -- set(ENABLE_SHARED SHARED) --endif() -- - if((NOT LLVM_ENABLE_PIC OR LIBCLING_BUILD_STATIC) AND NOT WIN32) - set(ENABLE_STATIC STATIC) - endif() --- -2.33.0 - + set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) base-commit: dc8fb5672464b6386f6b4b94723f9b36edc4e625 -- 2.41.0
Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
:Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
:Message #13 received at 71045-done <at> debbugs.gnu.org (full text, mbox):
From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com> To: 71045-done <at> debbugs.gnu.org Subject: Re: [bug#71045] [PATCH v2] gnu: cling: Update to 1.0. Date: Wed, 29 May 2024 22:06:45 -0400
Hi, Maxim Cournoyer <maxim.cournoyer <at> gmail.com> writes: > * 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
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Thu, 27 Jun 2024 11:24:08 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.