diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2021-09-03 09:08:22 -0400 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2021-11-11 12:18:25 -0500 |
commit | 5f818705b4527f8aaae411d25b6f0cd55021614d (patch) | |
tree | 50c5a8bd99f121e70dd4d5297a9e47682754615c /gnu/packages/patches/cling-use-shared-library.patch | |
parent | 35b91ada739e08d7ef3be130a5af5955195055b4 (diff) | |
download | guix-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.patch | 329 |
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 + |