gnu: cling: Update to 1.0.
* 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: I5d1f2c4d36ca226116bc74c2578154f86413f9e9master
parent
412d99a657
commit
29a4514a34
|
@ -1053,6 +1053,7 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/clang-17.0-libc-search-path.patch \
|
%D%/packages/patches/clang-17.0-libc-search-path.patch \
|
||||||
%D%/packages/patches/clang-17.0-link-dsymutil-latomic.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-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-asan-build-fixes.patch \
|
||||||
%D%/packages/patches/clang-runtime-esan-build-fixes.patch \
|
%D%/packages/patches/clang-runtime-esan-build-fixes.patch \
|
||||||
%D%/packages/patches/clang-runtime-9-libsanitizer-mode-field.patch \
|
%D%/packages/patches/clang-runtime-9-libsanitizer-mode-field.patch \
|
||||||
|
|
|
@ -17,11 +17,10 @@
|
||||||
;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
|
;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
|
||||||
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
|
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
|
||||||
;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be>
|
;;; 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 Julien Lepiller <julien@lepiller.eu>
|
||||||
;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
|
;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
|
||||||
;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv@posteo.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, 2024 Greg Hogan <code@greghogan.com>
|
||||||
;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
|
;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
|
||||||
;;; Copyright © 2022 Clément Lassieur <clement@lassieur.org>
|
;;; Copyright © 2022 Clément Lassieur <clement@lassieur.org>
|
||||||
|
@ -2236,180 +2235,155 @@ LLVM bitcode files.")
|
||||||
(properties `((hidden? . #t)
|
(properties `((hidden? . #t)
|
||||||
,@(package-properties llvm-13)))))
|
,@(package-properties llvm-13)))))
|
||||||
|
|
||||||
(define %cling-version "0.9")
|
(define llvm-cling
|
||||||
|
;; To determine which version of LLVM a given release of Cling should use,
|
||||||
(define llvm-cling ;LLVM 9 with approximately 10 patches for cling
|
;; consult the
|
||||||
(let ((base llvm-9))
|
;; https://raw.githubusercontent.com/root-project/cling/master/LastKnownGoodLLVMSVNRevision.txt
|
||||||
|
;; file.
|
||||||
|
(let ((base llvm-15)) ;for a DYLIB build
|
||||||
(package/inherit base
|
(package/inherit base
|
||||||
(name "llvm-cling")
|
(name "llvm-cling")
|
||||||
|
(version "13-20240318-01")
|
||||||
(source
|
(source
|
||||||
(origin
|
(origin
|
||||||
(inherit (package-source base))
|
(inherit (package-source base))
|
||||||
(method git-fetch)
|
(method git-fetch)
|
||||||
(uri (git-reference
|
(uri (git-reference
|
||||||
(url "http://root.cern/git/llvm.git")
|
(url "https://github.com/root-project/llvm-project")
|
||||||
(commit (string-append "cling-v" %cling-version))))
|
(commit (string-append "cling-llvm" version))))
|
||||||
(file-name (git-file-name "llvm-cling" %cling-version))
|
(file-name (git-file-name "llvm-cling" version))
|
||||||
(sha256
|
(sha256
|
||||||
(base32
|
(base32
|
||||||
"0y3iwv3c9152kybmdrwvadggjs163r25h7rmlxzr3hfpr463pnwf"))
|
"1zh6yp8px9hla7v9i67a6anbph140f8ixxbsz65aj7fizksjs1h3"))
|
||||||
(modules '((guix build utils)))
|
(patches (search-patches "clang-cling-13-libc-search-path.patch")))))))
|
||||||
(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))))))))
|
|
||||||
|
|
||||||
(define clang-cling-runtime
|
(define clang-cling-runtime
|
||||||
(let ((base clang-runtime-9))
|
(let ((base clang-runtime-13))
|
||||||
(package/inherit base
|
(package/inherit base
|
||||||
(name "clang-cling-runtime")
|
(name "clang-cling-runtime")
|
||||||
|
(version (package-version llvm-cling))
|
||||||
|
(source (package-source llvm-cling))
|
||||||
(arguments
|
(arguments
|
||||||
(substitute-keyword-arguments (package-arguments base)
|
(substitute-keyword-arguments (package-arguments base)
|
||||||
((#:phases phases '%standard-phases)
|
((#:phases phases '%standard-phases)
|
||||||
`(modify-phases ,phases
|
#~(modify-phases #$phases
|
||||||
(add-after 'install 'delete-static-libraries
|
(add-after 'unpack 'change-directory
|
||||||
;; This reduces the size from 22 MiB to 4 MiB.
|
(lambda _
|
||||||
(lambda* (#:key outputs #:allow-other-keys)
|
(chdir "compiler-rt")))
|
||||||
(let ((out (assoc-ref outputs "out")))
|
(add-after 'install 'delete-static-libraries
|
||||||
(for-each delete-file (find-files out "\\.a$")))))))))
|
;; 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)
|
(inputs (modify-inputs (package-inputs base)
|
||||||
(replace "llvm" llvm-cling))))))
|
(replace "llvm" llvm-cling))))))
|
||||||
|
|
||||||
(define clang-cling ;modified clang 9 with ~ 60 patches for cling
|
(define clang-cling
|
||||||
(let ((base clang-9))
|
(let ((base clang-13))
|
||||||
(package/inherit base
|
(package/inherit base
|
||||||
(name "clang-cling")
|
(name "clang-cling")
|
||||||
(source
|
(version (package-version llvm-cling))
|
||||||
(origin
|
(source (package-source llvm-cling))
|
||||||
(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"))))
|
|
||||||
(arguments
|
(arguments
|
||||||
(substitute-keyword-arguments (package-arguments base)
|
(substitute-keyword-arguments (package-arguments base)
|
||||||
((#:phases phases '%standard-phases)
|
((#:phases phases '%standard-phases)
|
||||||
`(modify-phases ,phases
|
#~(modify-phases #$phases
|
||||||
(add-after 'install 'delete-static-libraries
|
(add-after 'unpack 'change-directory
|
||||||
;; This reduces the size by half, from 220 MiB to 112 MiB.
|
(lambda _
|
||||||
(lambda* (#:key outputs #:allow-other-keys)
|
(chdir "clang")))
|
||||||
(let ((out (assoc-ref outputs "out")))
|
(add-after 'install 'delete-static-libraries
|
||||||
(for-each delete-file (find-files out "\\.a$")))))))))
|
;; This reduces the size by half, from 220 MiB to 112 MiB.
|
||||||
|
(lambda _
|
||||||
|
(for-each delete-file (find-files #$output "\\.a$"))))))))
|
||||||
(propagated-inputs
|
(propagated-inputs
|
||||||
(modify-inputs (package-propagated-inputs base)
|
(modify-inputs (package-propagated-inputs base)
|
||||||
(replace "llvm" llvm-cling)
|
(replace "llvm" llvm-cling)
|
||||||
(replace "clang-runtime" clang-cling-runtime))))))
|
(replace "clang-runtime" clang-cling-runtime))))))
|
||||||
|
|
||||||
(define-public cling
|
(define-public cling
|
||||||
;; The tagged v0.9 release doesn't build, so use the latest commit.
|
(package
|
||||||
(let ((commit "d78d1a03fedfd2bf6d2b6ff295aca576d98940df")
|
(name "cling")
|
||||||
(revision "1")
|
(version "1.0")
|
||||||
(version* "0.9"))
|
(source (origin
|
||||||
(package
|
(method git-fetch)
|
||||||
(name "cling")
|
(uri (git-reference
|
||||||
(version (git-version version* revision commit))
|
(url "https://github.com/root-project/cling")
|
||||||
(source (origin
|
(commit (string-append "v" version))))
|
||||||
(method git-fetch)
|
(file-name (git-file-name name version))
|
||||||
(uri (git-reference
|
(sha256
|
||||||
(url "http://root.cern/git/cling.git")
|
(base32
|
||||||
(commit commit)))
|
"17n66wf5yg1xjc94d6yb8g2gydjz0b8cj4a2pn6xrygdvhh09vv1"))
|
||||||
(file-name (git-file-name name version))
|
;; Patch submitted upstream here:
|
||||||
(sha256
|
;; https://github.com/root-project/cling/pull/433.
|
||||||
(base32
|
(patches (search-patches "cling-use-shared-library.patch"))))
|
||||||
"0lsbxv21b4qw11xkw9iipdpca64jjwwqxm0qf5v2cgdlibf8m8n9"))
|
(build-system cmake-build-system)
|
||||||
;; Patch submitted upstream here:
|
(arguments
|
||||||
;; https://github.com/root-project/cling/pull/433.
|
(list
|
||||||
(patches (search-patches "cling-use-shared-library.patch"))))
|
#:build-type "Release" ;keep the build as lean as possible
|
||||||
(build-system cmake-build-system)
|
#:tests? #f ;FIXME: 78 tests fail (out of ~200)
|
||||||
(arguments
|
#:test-target "check-cling"
|
||||||
(list
|
#:configure-flags
|
||||||
#:build-type "Release" ;keep the build as lean as possible
|
#~(list (string-append "-DCLING_CXX_PATH="
|
||||||
#:tests? #f ;FIXME: 78 tests fail (out of ~200)
|
(search-input-file %build-inputs "bin/g++"))
|
||||||
#:test-target "check-cling"
|
;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
|
||||||
#:configure-flags
|
;; be a Python script, not a shell executable.
|
||||||
#~(list (string-append "-DCLING_CXX_PATH="
|
(string-append "-DLLVM_EXTERNAL_LIT="
|
||||||
(search-input-file %build-inputs "bin/g++"))
|
(search-input-file %build-inputs "bin/.lit-real")))
|
||||||
;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
|
#:phases
|
||||||
;; be a Python script, not a shell executable.
|
#~(modify-phases %standard-phases
|
||||||
(string-append "-DLLVM_EXTERNAL_LIT="
|
(add-after 'unpack 'set-version
|
||||||
(search-input-file %build-inputs "bin/.lit-real")))
|
(lambda _
|
||||||
#:phases
|
(make-file-writable "VERSION")
|
||||||
#~(modify-phases %standard-phases
|
(call-with-output-file "VERSION"
|
||||||
(add-after 'unpack 'set-version
|
(lambda (port)
|
||||||
(lambda _
|
(format port "~a~%" #$version)))))
|
||||||
(make-file-writable "VERSION")
|
(add-after 'unpack 'patch-paths
|
||||||
(call-with-output-file "VERSION"
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
(lambda (port)
|
(substitute* "lib/Interpreter/CIFactory.cpp"
|
||||||
(format port "~a~%" #$version)))))
|
(("\\bsed\\b")
|
||||||
(add-after 'unpack 'patch-paths
|
(which "sed"))
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
;; This ensures that the default C++ library used by Cling is
|
||||||
(substitute* "lib/Interpreter/CIFactory.cpp"
|
;; that of the compiler that was used to build it, rather
|
||||||
(("\\bsed\\b")
|
;; than that of whatever g++ happens to be on PATH.
|
||||||
(which "sed"))
|
(("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
|
||||||
;; This ensures that the default C++ library used by Cling is
|
(format #f "ReadCompilerIncludePaths(~s"
|
||||||
;; that of the compiler that was used to build it, rather
|
(search-input-file inputs "bin/g++")))
|
||||||
;; than that of whatever g++ happens to be on PATH.
|
;; Cling uses libclang's CompilerInvocation::GetResourcesPath
|
||||||
(("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
|
;; to resolve Clang's library prefix, but this fails on Guix
|
||||||
(format #f "ReadCompilerIncludePaths(~s"
|
;; because it is relative to the output of cling rather than
|
||||||
(search-input-file inputs "bin/g++")))
|
;; clang (see:
|
||||||
;; Cling uses libclang's CompilerInvocation::GetResourcesPath
|
;; https://github.com/root-project/cling/issues/434). Fully
|
||||||
;; to resolve Clang's library prefix, but this fails on Guix
|
;; shortcut the logic in this method to return the correct
|
||||||
;; because it is relative to the output of cling rather than
|
;; static location.
|
||||||
;; clang (see:
|
(("static std::string getResourceDir.*" all)
|
||||||
;; https://github.com/root-project/cling/issues/434). Fully
|
(string-append all
|
||||||
;; shortcut the logic in this method to return the correct
|
" return std::string(\""
|
||||||
;; static location.
|
#$(this-package-input "clang-cling")
|
||||||
(("static std::string getResourceDir.*" all)
|
"/lib/clang/"
|
||||||
(string-append all
|
#$(first
|
||||||
" return std::string(\""
|
(take (string-split
|
||||||
#$(this-package-input "clang-cling")
|
(package-version clang-cling) #\-)
|
||||||
"/lib/clang/" #$(package-version clang-cling)
|
1)) ".0.0" ;e.g. 13.0.0
|
||||||
"\");")))
|
"\");")))
|
||||||
;; Check for the 'lit' command for the tests, not 'lit.py'
|
;; Check for the 'lit' command for the tests, not 'lit.py'
|
||||||
;; (see: https://github.com/root-project/cling/issues/432).
|
;; (see: https://github.com/root-project/cling/issues/432).
|
||||||
(substitute* "CMakeLists.txt"
|
(substitute* "CMakeLists.txt"
|
||||||
(("lit.py")
|
(("lit.py")
|
||||||
"lit"))))
|
"lit"))))
|
||||||
(add-after 'unpack 'adjust-lit.cfg
|
(add-after 'unpack 'adjust-lit.cfg
|
||||||
;; See: https://github.com/root-project/cling/issues/435.
|
;; See: https://github.com/root-project/cling/issues/435.
|
||||||
(lambda _
|
(lambda _
|
||||||
(substitute* "test/lit.cfg"
|
(substitute* "test/lit.cfg"
|
||||||
(("config.llvm_tools_dir \\+ '")
|
(("config.llvm_tools_dir \\+ '")
|
||||||
"config.cling_obj_root + '/bin"))))
|
"config.cling_obj_root + '/bin"))))
|
||||||
(add-after 'install 'delete-static-libraries
|
(add-after 'install 'delete-static-libraries
|
||||||
;; This reduces the size from 17 MiB to 5.4 MiB.
|
;; This reduces the size from 17 MiB to 5.4 MiB.
|
||||||
(lambda _
|
(lambda _
|
||||||
(for-each delete-file (find-files #$output "\\.a$")))))))
|
(for-each delete-file (find-files #$output "\\.a$")))))))
|
||||||
(native-inputs
|
(native-inputs (list python python-lit))
|
||||||
(list python python-lit))
|
(inputs (list clang-cling llvm-cling))
|
||||||
(inputs
|
(home-page "https://root.cern/cling/")
|
||||||
(list clang-cling llvm-cling))
|
(synopsis "Interactive C++ interpreter")
|
||||||
(home-page "https://root.cern/cling/")
|
(description "Cling is an interactive C++17 standard compliant
|
||||||
(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
|
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.
|
read-eval-print loop (REPL) to assist with rapid application development.
|
||||||
Here's how to print @samp{\"Hello World!\"} using @command{cling}:
|
Here's how to print @samp{\"Hello World!\"} using @command{cling}:
|
||||||
|
@ -2417,4 +2391,4 @@ Here's how to print @samp{\"Hello World!\"} using @command{cling}:
|
||||||
@example
|
@example
|
||||||
cling '#include <stdio.h>' 'printf(\"Hello World!\\n\");'
|
cling '#include <stdio.h>' 'printf(\"Hello World!\\n\");'
|
||||||
@end example")
|
@end example")
|
||||||
(license license:lgpl2.1+)))) ;for the combined work
|
(license license:lgpl2.1+))) ;for the combined work
|
||||||
|
|
|
@ -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 {
|
|
@ -1,329 +1,107 @@
|
||||||
From 811f0a575231496318b5e9c9a0ff0ed195b16dc0 Mon Sep 17 00:00:00 2001
|
Upstream status: https://github.com/root-project/root/pull/15563
|
||||||
From: Maxim Cournoyer <maxim.cournoyer@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
|
diff --git a/interpreter/cling/CMakeLists.txt b/interpreter/cling/CMakeLists.txt
|
||||||
is via the LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB CMake
|
index 9775b07f10..7028042096 100644
|
||||||
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
|
|
||||||
--- a/CMakeLists.txt
|
--- a/CMakeLists.txt
|
||||||
+++ b/CMakeLists.txt
|
+++ b/CMakeLists.txt
|
||||||
@@ -23,6 +23,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
|
@@ -13,81 +13,22 @@ endif(WIN32)
|
||||||
"--libdir"
|
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
|
||||||
"--includedir"
|
project(Cling)
|
||||||
"--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)
|
- # Rely on llvm-config.
|
||||||
set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS}
|
- set(CONFIG_OUTPUT)
|
||||||
@@ -427,7 +429,11 @@ macro(add_cling_library name)
|
- 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
|
||||||
|
- )
|
||||||
|
- 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)
|
||||||
|
-
|
||||||
|
- 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()
|
||||||
|
-
|
||||||
|
- # 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)
|
||||||
|
-
|
||||||
|
+ 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()
|
endif()
|
||||||
|
|
||||||
if(TARGET ${name})
|
- include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}")
|
||||||
- target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
|
+ include_directories("${LLVM_INCLUDE_DIRS}")
|
||||||
+ if(LLVM_LIB_IS_SHARED)
|
link_directories("${LLVM_LIBRARY_DIR}")
|
||||||
+ 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")
|
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
|
||||||
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
|
|
||||||
- )
|
|
||||||
+ )
|
|
||||||
+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
|
|
||||||
-
|
|
||||||
- clangFrontendTool
|
|
||||||
-
|
|
||||||
- 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
|
|
||||||
-
|
|
||||||
- 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()
|
|
||||||
|
|
||||||
set( LLVM_LINK_COMPONENTS
|
|
||||||
analysis
|
|
||||||
@@ -63,10 +67,6 @@ option(LIBCLING_BUILD_STATIC
|
|
||||||
# set(LLVM_EXPORTED_SYMBOL_FILE)
|
|
||||||
#endif()
|
|
||||||
|
|
||||||
-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
|
|
||||||
|
|
||||||
|
|
Reference in New Issue