cling: 1.0 -> 1.2 (#439741)

Emily d72864f3 c8e7f49b

Changed files
+182 -63
pkgs
applications
editors
by-name
+85
pkgs/applications/editors/jupyter-kernels/xeus-cling/0003-Remove-unsupported-src-root-flag.patch
···
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index 43718f5..d0d8670 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -63,8 +63,7 @@ if(LLVM_CONFIG)
+
"--bindir"
+
"--libdir"
+
"--includedir"
+
- "--prefix"
+
- "--src-root")
+
+ "--prefix")
+
execute_process(COMMAND ${CONFIG_COMMAND}
+
RESULT_VARIABLE HAD_ERROR
+
OUTPUT_VARIABLE CONFIG_OUTPUT)
+
diff --git a/src/xmagics/executable.cpp b/src/xmagics/executable.cpp
+
index 391c8c9..aba5e03 100644
+
--- a/src/xmagics/executable.cpp
+
+++ b/src/xmagics/executable.cpp
+
@@ -12,6 +12,7 @@
+
#include <iterator>
+
#include <fstream>
+
#include <memory>
+
+#include <optional>
+
#include <string>
+
#include <vector>
+
+
@@ -25,7 +26,7 @@
+
#include "clang/AST/ASTContext.h"
+
#include "clang/AST/DeclGroup.h"
+
#include "clang/AST/RecursiveASTVisitor.h"
+
-#include "clang/Basic/DebugInfoOptions.h"
+
+#include "llvm/Frontend/Debug/Options.h"
+
#include "clang/Basic/Sanitizers.h"
+
#include "clang/Basic/TargetInfo.h"
+
#include "clang/CodeGen/BackendUtil.h"
+
@@ -115,7 +116,7 @@ namespace xcpp
+
// Filter out functions added by Cling.
+
if (auto Identifier = D->getIdentifier())
+
{
+
- if (Identifier->getName().startswith("__cling"))
+
+ if (Identifier->getName().starts_with("__cling"))
+
{
+
return true;
+
}
+
@@ -153,12 +154,13 @@ namespace xcpp
+
if (EnableDebugInfo)
+
{
+
CodeGenOpts.setDebugInfo(
+
- clang::codegenoptions::DebugInfoKind::FullDebugInfo);
+
+ llvm::codegenoptions::DebugInfoKind::FullDebugInfo);
+
}
+
+
std::unique_ptr<clang::CodeGenerator> CG(clang::CreateLLVMCodeGen(
+
- CI->getDiagnostics(), "object", HeaderSearchOpts,
+
- CI->getPreprocessorOpts(), CodeGenOpts, *Context));
+
+ CI->getDiagnostics(), "object",
+
+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>(&CI->getVirtualFileSystem()),
+
+ HeaderSearchOpts, CI->getPreprocessorOpts(), CodeGenOpts, *Context));
+
CG->Initialize(AST);
+
+
FindTopLevelDecls Visitor(CG.get());
+
@@ -186,7 +188,9 @@ namespace xcpp
+
EmitBackendOutput(CI->getDiagnostics(), HeaderSearchOpts,
+
CodeGenOpts, CI->getTargetOpts(),
+
CI->getLangOpts(), DataLayout, CG->GetModule(),
+
- clang::Backend_EmitObj, std::move(OS));
+
+ clang::Backend_EmitObj,
+
+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>(&CI->getVirtualFileSystem()),
+
+ std::move(OS));
+
return true;
+
}
+
+
@@ -222,10 +226,10 @@ namespace xcpp
+
+
llvm::StringRef OutputFileStr(OutputFile);
+
llvm::StringRef ErrorFileStr(ErrorFile);
+
- llvm::SmallVector<llvm::Optional<llvm::StringRef>, 16> Redirects = {llvm::NoneType::None, OutputFileStr, ErrorFileStr};
+
+ llvm::SmallVector<std::optional<llvm::StringRef>, 16> Redirects = {std::nullopt, OutputFileStr, ErrorFileStr};
+
+
// Finally run the linker.
+
- int ret = llvm::sys::ExecuteAndWait(Compiler, Args, llvm::NoneType::None,
+
+ int ret = llvm::sys::ExecuteAndWait(Compiler, Args, std::nullopt,
+
Redirects);
+
+
// Read back output and error streams.
+3 -2
pkgs/applications/editors/jupyter-kernels/xeus-cling/xeus-cling.nix
···
clangStdenv,
cmake,
fetchFromGitHub,
-
llvmPackages_13,
# Libraries
argparse,
cling,
···
patches = [
./0001-Fix-bug-in-extract_filename.patch
./0002-Don-t-pass-extra-includes-configure-this-with-flags.patch
];
nativeBuildInputs = [ cmake ];
···
cling.unwrapped
cppzmq
libuuid
-
llvmPackages_13.llvm
ncurses
openssl
pugixml
···
clangStdenv,
cmake,
fetchFromGitHub,
+
llvmPackages_18,
# Libraries
argparse,
cling,
···
patches = [
./0001-Fix-bug-in-extract_filename.patch
./0002-Don-t-pass-extra-includes-configure-this-with-flags.patch
+
./0003-Remove-unsupported-src-root-flag.patch
];
nativeBuildInputs = [ cmake ];
···
cling.unwrapped
cppzmq
libuuid
+
llvmPackages_18.llvm
ncurses
openssl
pugixml
+54
pkgs/by-name/cl/cling/fix-new-parser.patch
···
···
+
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.
-13
pkgs/by-name/cl/cling/no-clang-cpp.patch
···
-
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})
···
+40 -48
pkgs/by-name/cl/cling/package.nix
···
git,
lib,
libffi,
-
llvmPackages_13,
makeWrapper,
ncurses,
python3,
zlib,
-
# *NOT* from LLVM 13!
# 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.
···
let
stdenv = clangStdenv;
-
# The patched clang lives in the LLVM megarepo
-
clangSrc = fetchFromGitHub {
owner = "root-project";
-
repo = "llvm-project";
-
# cling-llvm13 branch
-
rev = "3610201fbe0352a63efb5cb45f4ea4987702c735";
-
sha256 = "sha256-Cb7BvV7yobG+mkaYe7zD2KcnPvm8/vmVATNWssklXyk=";
-
sparseCheckout = [ "clang" ];
};
-
llvm = llvmPackages_13.llvm.override { enableSharedLibraries = false; };
-
-
unwrapped = stdenv.mkDerivation rec {
pname = "cling-unwrapped";
-
version = "1.0";
-
-
src = "${clangSrc}/clang";
-
clingSrc = fetchFromGitHub {
owner = "root-project";
-
repo = "cling";
-
rev = "v${version}";
-
sha256 = "sha256-Ye8EINzt+dyNvUIRydACXzb/xEPLm0YSkz08Xxw3xp4=";
};
-
prePatch = ''
-
echo "add_llvm_external_project(cling)" >> tools/CMakeLists.txt
-
cp -r $clingSrc tools/cling
-
chmod -R a+w tools/cling
-
'';
-
patches = [
-
./no-clang-cpp.patch
-
];
nativeBuildInputs = [
python3
···
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_TARGETS_TO_BUILD=host;NVPTX"
"-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=Debug"
···
CPPFLAGS = if useLLVMLibcxx then [ "-stdlib=libc++" ] else [ ];
-
postInstall = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
mkdir -p $out/share/Jupyter
-
cp -r /build/clang/tools/cling/tools/Jupyter/kernel $out/share/Jupyter
'';
dontStrip = debug;
···
"-nostdinc++"
"-resource-dir"
-
"${llvm.lib}/lib"
"-isystem"
-
"${lib.getLib unwrapped}/lib/clang/${llvmPackages_13.clang.version}/include"
]
++ lib.optionals useLLVMLibcxx [
"-I"
-
"${lib.getDev llvmPackages_13.libcxx}/include/c++/v1"
"-L"
-
"${llvmPackages_13.libcxx}/lib"
"-l"
-
"${llvmPackages_13.libcxx}/lib/libc++${stdenv.hostPlatform.extensions.sharedLibrary}"
]
++ lib.optionals (!useLLVMLibcxx) [
"-I"
···
git,
lib,
libffi,
+
llvmPackages_18,
makeWrapper,
ncurses,
python3,
zlib,
+
# *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.
···
let
stdenv = clangStdenv;
+
version = "1.2";
+
+
clingSrc = fetchFromGitHub {
owner = "root-project";
+
repo = "cling";
+
rev = "v${version}";
+
sha256 = "sha256-ay9FXANJmB/+AdnCR4WOKHuPm6P88wLqoOgiKJwJ8JM=";
};
+
unwrapped = stdenv.mkDerivation {
pname = "cling-unwrapped";
+
inherit version;
+
src = fetchFromGitHub {
owner = "root-project";
+
repo = "llvm-project";
+
rev = "cling-llvm18-20250721-01";
+
sha256 = "sha256-JGteapyujU5w81DsfPQfTq76cYHgk5PbAFbdYfYIDo4=";
};
+
preConfigure = ''
+
cp -r ${clingSrc} cling-source
+
# 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
+
'';
nativeBuildInputs = [
python3
···
strictDeps = true;
cmakeFlags = [
+
"-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"
+
]
+
++ lib.optionals (!debug) [
+
"-DCMAKE_BUILD_TYPE=Release"
]
++ lib.optionals debug [
"-DCMAKE_BUILD_TYPE=Debug"
···
CPPFLAGS = if useLLVMLibcxx then [ "-stdlib=libc++" ] else [ ];
+
postInstall = ''
mkdir -p $out/share/Jupyter
+
cp -r ../../cling-source/tools/Jupyter/kernel $out/share/Jupyter
'';
+
+
buildTargets = [ "cling" ];
dontStrip = debug;
···
"-nostdinc++"
"-resource-dir"
+
"${llvmPackages_18.llvm.lib}/lib"
"-isystem"
+
"${lib.getLib unwrapped}/lib/clang/18/include"
]
++ lib.optionals useLLVMLibcxx [
"-I"
+
"${lib.getDev llvmPackages_18.libcxx}/include/c++/v1"
"-L"
+
"${llvmPackages_18.libcxx}/lib"
"-l"
+
"${llvmPackages_18.libcxx}/lib/libc++${stdenv.hostPlatform.extensions.sharedLibrary}"
]
++ lib.optionals (!useLLVMLibcxx) [
"-I"