From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms1.migadu.com with LMTPS id SO4/NEYdSWZ2GgEAqHPOHw:P1 (envelope-from ) for ; Sat, 18 May 2024 23:27:35 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0.migadu.com with LMTPS id SO4/NEYdSWZ2GgEAqHPOHw (envelope-from ) for ; Sat, 18 May 2024 23:27:34 +0200 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20230601 header.b=VM8dgUNW; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1716067654; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=gRUvf5NgCJHTBxx+nhZLkIEIwxVJdGpvA5+LkyvCw6Q=; b=WkuFL4j2Lttlzh5PrOmQWrLRLm6/dsm50E3B1k12lhlCrIcOrYsbIIBKWmKXxs0O6M/skK chy7g5W/oeVI3SUpjEgw+K4Hs3BgLAhQNoCRd99kMz1Bf2v+KwbhlXM1EGwbL9BH6lIlRj 4Wd2AhfClbPQUrrKaJp4wvAqp+Brysz/Tt7dzHjjM53j+AQHkOYFeUxNASVgnGqYJYFvyq Cvau+trHPmosI3bKqW51ecpkjW9C7geAssA762ZHjo4RFrmv02UHoW5c3w0YBhPz1bHngG QLzV6GhqhPLhHS9sLFWopWVVdthiYp0fv+eL7EbHJoPEHlh+6bp7syTZezTn7g== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20230601 header.b=VM8dgUNW; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none) ARC-Seal: i=1; s=key1; d=yhetil.org; t=1716067654; a=rsa-sha256; cv=none; b=MnshBLNhUtWs9uPUhHtWNrNAkFDHeIOVH6Z4u9nsmJFp7vMWZVV+b7givihshs71KVcnGA 1pbeBK/oJFwfq8kwU3gN4ZAJPbZzxbDaK7kSMG83VYCVOAkr2Wv+oQqq+I/O3Fe6+KmnD4 yGV99x+N5pC0VL7IQQRoR8Nco83MkLpvF427uogYET2LCaYCHdqLyEODNYtmFljS7PQ62P ajDiTw/86/qF860ggvAed7NIAv0p6gnxrf/h306JRFtlEpoySTIo+K0CbuIut/mlXN7Oan VYvRdVJWg/a5Z8OEEaMBFQ2AHvBU3OkWePGhKqVJO05I0XbNagmGkl90CoInVg== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 82BEE7DD61 for ; Sat, 18 May 2024 23:27:34 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s8R7w-0001o4-Cc; Sat, 18 May 2024 16:58:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s8R7v-0001no-IT for guix-patches@gnu.org; Sat, 18 May 2024 16:57:59 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s8R7v-0006oh-AS for guix-patches@gnu.org; Sat, 18 May 2024 16:57:59 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1s8R7y-0005LC-BS for guix-patches@gnu.org; Sat, 18 May 2024 16:58:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#71045] [PATCH] gnu: cling: Update to 1.0. Resent-From: Maxim Cournoyer Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 18 May 2024 20:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 71045 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 71045@debbugs.gnu.org Cc: Maxim Cournoyer X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.171606586320509 (code B ref -1); Sat, 18 May 2024 20:58:02 +0000 Received: (at submit) by debbugs.gnu.org; 18 May 2024 20:57:43 +0000 Received: from localhost ([127.0.0.1]:35499 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s8R7d-0005Ki-PM for submit@debbugs.gnu.org; Sat, 18 May 2024 16:57:43 -0400 Received: from lists.gnu.org ([209.51.188.17]:40012) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s8R7Y-0005Kb-MB for submit@debbugs.gnu.org; Sat, 18 May 2024 16:57:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s8R7U-0001mI-Ha for guix-patches@gnu.org; Sat, 18 May 2024 16:57:32 -0400 Received: from mail-qv1-xf31.google.com ([2607:f8b0:4864:20::f31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s8R7P-0006hD-Lj for guix-patches@gnu.org; Sat, 18 May 2024 16:57:32 -0400 Received: by mail-qv1-xf31.google.com with SMTP id 6a1803df08f44-6a9673f1045so1596636d6.3 for ; Sat, 18 May 2024 13:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716065845; x=1716670645; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=gRUvf5NgCJHTBxx+nhZLkIEIwxVJdGpvA5+LkyvCw6Q=; b=VM8dgUNW5hx740KXNPavyQJgJR7rjrsvJ18m7iG94NtbcVAcuh6ZDLE9D28PjtUqSR f226S+K35iMbAbCl14Kqkc8H3GV+7RXTcyJhTKaHyyVkrFtipZjEqC0gNP8jWBAHfbWv M52C/dRfEQ3mGTTqArq3gOx+E9ABQ3laUqkWT45SneiEaA3HtGcRU1x/fjOKZqfSJ5o4 igan66NQoDBW00agkVSgpayz21AtB2IiWGwwTeBrE12RrKn/4HaCKekzToRrk18oLLsU bt+yVhc/cfNh3ocQ2k29sBYLT5ioIkGq5LaUhcdWzco9ZV/+YM28SZieVNaZg12ngslA YYKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716065845; x=1716670645; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gRUvf5NgCJHTBxx+nhZLkIEIwxVJdGpvA5+LkyvCw6Q=; b=RgAQbTLFsTBA+suTTRnK40+ZVXxWtVud4iWjTxhwn9wR4GLZpmZVzxUwmoqKgyY5pz ULKh6E04tIVJWH0WuRW3gWeV3GF0eo95za4RBiQ7U69n1VQJ4ozjQUJPxXue7LC81mTO EhAoSIWM+qyMxRyWMB1Hp1/0GnZdILEReQUYXistcg+q+k1FveljuQz+Ztfe4cXwX3Pi ZPHZbJgdI8nZwyNkvjeoXQbypXQhRmL9EmW2j1yT7dGImI8a6LwfhA/jm7ya+ZtTO7Bb /elS0uctdUDX0G4Ixrtm4Sw47ueeMKmprNbTdDNmuFQx7zfpYJNglRzROjbI3qsKt4/Q 4AAQ== X-Gm-Message-State: AOJu0Yz9DjvnrdTVVTPIMHz04GbJaTHj+vIR86ri1TG86DVbNNgIEMtI bI3M9iTCn/ah1uH8nDsDBq00cq0qHFP2pK/2T2fg6KJ/NDQnspJk5/ZlaQ== X-Google-Smtp-Source: AGHT+IGlciZ8IMU/kzIPL0l14zQYn1fikre0A2XLG6PoUJuvVuCGjrLXa2CMgDNxjxdCx10Lv3t5nQ== X-Received: by 2002:a05:6214:3c87:b0:6a0:cf48:5196 with SMTP id 6a1803df08f44-6a168235561mr305989396d6.54.1716065844481; Sat, 18 May 2024 13:57:24 -0700 (PDT) Received: from localhost.localdomain (dsl-141-4.b2b2c.ca. [66.158.141.4]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6a35ba07275sm36104226d6.27.2024.05.18.13.57.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 May 2024 13:57:23 -0700 (PDT) From: Maxim Cournoyer Date: Sat, 18 May 2024 16:56:38 -0400 Message-ID: <3e237a99a9a79a4904e5616eb364b5a9063eef9d.1716065797.git.maxim.cournoyer@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::f31; envelope-from=maxim.cournoyer@gmail.com; helo=mail-qv1-xf31.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Spam-Score: 2.44 X-Migadu-Queue-Id: 82BEE7DD61 X-Migadu-Scanner: mx10.migadu.com X-Migadu-Spam-Score: 2.44 X-TUID: im+9FP20vyQu * 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 ;;; Copyright © 2020 Jakub Kądziołka ;;; Copyright © 2021, 2022 Maxime Devos -;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer +;;; Copyright © 2020, 2021, 2022, 2024 Maxim Cournoyer ;;; Copyright © 2021 Julien Lepiller ;;; Copyright © 2021 Lars-Dominik Braun ;;; Copyright © 2021, 2022 Guillaume Le Vaillant -;;; Copyright © 2021, 2022 Maxim Cournoyer ;;; Copyright © 2022, 2024 Greg Hogan ;;; Copyright © 2022 John Kehayias ;;; Copyright © 2022 Clément Lassieur @@ -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 .*" all) - (string-append all "#include \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 ' '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 -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] : 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() $ $ ) @@ -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