summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/cling-use-shared-library.patch
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-09-03 09:08:22 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-11-11 12:18:25 -0500
commit5f818705b4527f8aaae411d25b6f0cd55021614d (patch)
tree50c5a8bd99f121e70dd4d5297a9e47682754615c /gnu/packages/patches/cling-use-shared-library.patch
parent35b91ada739e08d7ef3be130a5af5955195055b4 (diff)
downloadguix-patches-5f818705b4527f8aaae411d25b6f0cd55021614d.tar
guix-patches-5f818705b4527f8aaae411d25b6f0cd55021614d.tar.gz
gnu: Add cling.
* gnu/packages/cpp.scm (cling): New variable. (llvm-cling): New private variable. (clang-cling): Likewise. * gnu/packages/patches/cling-use-shared-library.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it.
Diffstat (limited to 'gnu/packages/patches/cling-use-shared-library.patch')
-rw-r--r--gnu/packages/patches/cling-use-shared-library.patch329
1 files changed, 329 insertions, 0 deletions
diff --git a/gnu/packages/patches/cling-use-shared-library.patch b/gnu/packages/patches/cling-use-shared-library.patch
new file mode 100644
index 0000000000..6385b307b3
--- /dev/null
+++ b/gnu/packages/patches/cling-use-shared-library.patch
@@ -0,0 +1,329 @@
+From 811f0a575231496318b5e9c9a0ff0ed195b16dc0 Mon Sep 17 00:00:00 2001
+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
+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
+--- 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
+- )
++ )
++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
+