cling: 1.0 -> 1.2

This commit is contained in:
thomasjm 2024-10-29 15:19:30 -07:00 committed by Tom McLaughlin
parent 1c3ece86ab
commit 22c7d6a3d7
3 changed files with 94 additions and 61 deletions

View file

@ -0,0 +1,54 @@
From cd4d1d8c4963620a6a84834948845df81fbbd70b Mon Sep 17 00:00:00 2001
From: Jonas Hahnfeld <jonas.hahnfeld@cern.ch>
Date: Tue, 17 Dec 2024 14:54:18 +0100
Subject: [PATCH] Use single Parser for LookupHelper
It is the only construction of a temporary parser, and it seems not
necessary (anymore).
---
include/cling/Interpreter/LookupHelper.h | 2 +-
lib/Interpreter/Interpreter.cpp | 11 ++++-------
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/include/cling/Interpreter/LookupHelper.h b/include/cling/Interpreter/LookupHelper.h
index 6e6e281470..cd79b2a65c 100644
--- a/include/cling/Interpreter/LookupHelper.h
+++ b/include/cling/Interpreter/LookupHelper.h
@@ -56,7 +56,7 @@ namespace cling {
WithDiagnostics
};
private:
- std::unique_ptr<clang::Parser> m_Parser;
+ clang::Parser* m_Parser;
Interpreter* m_Interpreter; // we do not own.
std::array<const clang::Type*, kNumCachedStrings> m_StringTy = {{}};
/// A map containing the hash of the lookup buffer. This allows us to avoid
diff --git a/lib/Interpreter/Interpreter.cpp b/lib/Interpreter/Interpreter.cpp
index 13c8409cc5..f04695439b 100644
--- a/lib/Interpreter/Interpreter.cpp
+++ b/lib/Interpreter/Interpreter.cpp
@@ -265,13 +265,6 @@ namespace cling {
}
Sema& SemaRef = getSema();
- Preprocessor& PP = SemaRef.getPreprocessor();
-
- m_LookupHelper.reset(new LookupHelper(new Parser(PP, SemaRef,
- /*SkipFunctionBodies*/false,
- /*isTemp*/true), this));
- if (!m_LookupHelper)
- return;
if (!isInSyntaxOnlyMode() && !m_Opts.CompilerOpts.CUDADevice) {
m_Executor.reset(new IncrementalExecutor(SemaRef.Diags, *getCI(),
@@ -317,6 +310,10 @@ namespace cling {
return;
}
+ m_LookupHelper.reset(new LookupHelper(m_IncrParser->getParser(), this));
+ if (!m_LookupHelper)
+ return;
+
// When not using C++ modules, we now have a PCH and we can safely setup
// our callbacks without fearing that they get overwritten by clang code.
// The modules setup is handled above.

View file

@ -1,13 +0,0 @@
diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt
index 590d708d83..340ae529d4 100644
--- a/tools/driver/CMakeLists.txt
+++ b/tools/driver/CMakeLists.txt
@@ -63,7 +63,7 @@ endif()
add_dependencies(clang clang-resource-headers)
if(NOT CLANG_LINKS_TO_CREATE)
- set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
+ set(CLANG_LINKS_TO_CREATE clang++ clang-cl)
endif()
foreach(link ${CLANG_LINKS_TO_CREATE})

View file

@ -5,13 +5,13 @@
git,
lib,
libffi,
llvmPackages_13,
llvmPackages_18,
makeWrapper,
ncurses,
python3,
zlib,
# *NOT* from LLVM 13!
# *NOT* from LLVM 18!
# The compiler used to compile Cling may affect the runtime include and lib
# directories it expects to be run with. Cling builds against (a fork of) Clang,
# so we prefer to use Clang as the compiler as well for consistency.
@ -34,42 +34,39 @@
let
stdenv = clangStdenv;
# The patched clang lives in the LLVM megarepo
clangSrc = fetchFromGitHub {
version = "1.2";
clingSrc = fetchFromGitHub {
owner = "root-project";
repo = "llvm-project";
# cling-llvm13 branch
rev = "3610201fbe0352a63efb5cb45f4ea4987702c735";
sha256 = "sha256-Cb7BvV7yobG+mkaYe7zD2KcnPvm8/vmVATNWssklXyk=";
sparseCheckout = [ "clang" ];
repo = "cling";
rev = "v${version}";
sha256 = "sha256-ay9FXANJmB/+AdnCR4WOKHuPm6P88wLqoOgiKJwJ8JM=";
};
llvm = llvmPackages_13.llvm.override { enableSharedLibraries = false; };
unwrapped = stdenv.mkDerivation rec {
unwrapped = stdenv.mkDerivation {
pname = "cling-unwrapped";
version = "1.0";
inherit version;
src = "${clangSrc}/clang";
clingSrc = fetchFromGitHub {
src = fetchFromGitHub {
owner = "root-project";
repo = "cling";
rev = "v${version}";
sha256 = "sha256-Ye8EINzt+dyNvUIRydACXzb/xEPLm0YSkz08Xxw3xp4=";
repo = "llvm-project";
rev = "cling-llvm18-20250721-01";
sha256 = "sha256-JGteapyujU5w81DsfPQfTq76cYHgk5PbAFbdYfYIDo4=";
};
prePatch = ''
echo "add_llvm_external_project(cling)" >> tools/CMakeLists.txt
preConfigure = ''
cp -r ${clingSrc} cling-source
cp -r $clingSrc tools/cling
chmod -R a+w tools/cling
# Patch a bug in version 1.2 by backporting a fix. See
# https://github.com/root-project/cling/issues/556
chmod -R u+w cling-source
pushd cling-source
patch -p1 < ${./fix-new-parser.patch}
popd
cd llvm
'';
patches = [
./no-clang-cpp.patch
];
nativeBuildInputs = [
python3
git
@ -84,22 +81,15 @@ let
strictDeps = true;
cmakeFlags = [
"-DLLVM_BINARY_DIR=${llvm.out}"
"-DLLVM_CONFIG=${llvm.dev}/bin/llvm-config"
"-DLLVM_LIBRARY_DIR=${llvm.lib}/lib"
"-DLLVM_MAIN_INCLUDE_DIR=${llvm.dev}/include"
"-DLLVM_TABLEGEN_EXE=${llvm.out}/bin/llvm-tblgen"
"-DLLVM_TOOLS_BINARY_DIR=${llvm.out}/bin"
"-DLLVM_BUILD_TOOLS=Off"
"-DLLVM_TOOL_CLING_BUILD=ON"
"-DLLVM_EXTERNAL_PROJECTS=cling"
"-DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling-source"
"-DLLVM_ENABLE_PROJECTS=clang"
"-DLLVM_TARGETS_TO_BUILD=host;NVPTX"
"-DLLVM_INCLUDE_TESTS=OFF"
"-DLLVM_ENABLE_RTTI=ON"
# Setting -DCLING_INCLUDE_TESTS=ON causes the cling/tools targets to be built;
# see cling/tools/CMakeLists.txt
"-DCLING_INCLUDE_TESTS=ON"
"-DCLANG-TOOLS=OFF"
]
++ lib.optionals (!debug) [
"-DCMAKE_BUILD_TYPE=Release"
]
++ lib.optionals debug [
"-DCMAKE_BUILD_TYPE=Debug"
@ -111,11 +101,13 @@ let
CPPFLAGS = if useLLVMLibcxx then [ "-stdlib=libc++" ] else [ ];
postInstall = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
postInstall = ''
mkdir -p $out/share/Jupyter
cp -r /build/clang/tools/cling/tools/Jupyter/kernel $out/share/Jupyter
cp -r ../../cling-source/tools/Jupyter/kernel $out/share/Jupyter
'';
buildTargets = [ "cling" ];
dontStrip = debug;
meta = with lib; {
@ -147,18 +139,18 @@ let
"-nostdinc++"
"-resource-dir"
"${llvm.lib}/lib"
"${llvmPackages_18.llvm.lib}/lib"
"-isystem"
"${lib.getLib unwrapped}/lib/clang/${llvmPackages_13.clang.version}/include"
"${lib.getLib unwrapped}/lib/clang/18/include"
]
++ lib.optionals useLLVMLibcxx [
"-I"
"${lib.getDev llvmPackages_13.libcxx}/include/c++/v1"
"${lib.getDev llvmPackages_18.libcxx}/include/c++/v1"
"-L"
"${llvmPackages_13.libcxx}/lib"
"${llvmPackages_18.libcxx}/lib"
"-l"
"${llvmPackages_13.libcxx}/lib/libc++${stdenv.hostPlatform.extensions.sharedLibrary}"
"${llvmPackages_18.libcxx}/lib/libc++${stdenv.hostPlatform.extensions.sharedLibrary}"
]
++ lib.optionals (!useLLVMLibcxx) [
"-I"