diff options
Diffstat (limited to 'gnu/packages/patches/cling-use-shared-library.patch')
-rw-r--r-- | gnu/packages/patches/cling-use-shared-library.patch | 418 |
1 files changed, 98 insertions, 320 deletions
diff --git a/gnu/packages/patches/cling-use-shared-library.patch b/gnu/packages/patches/cling-use-shared-library.patch index 6385b307b3d..415f542add8 100644 --- a/gnu/packages/patches/cling-use-shared-library.patch +++ b/gnu/packages/patches/cling-use-shared-library.patch @@ -1,329 +1,107 @@ -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. +Upstream status: https://github.com/root-project/root/pull/15563 -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 +diff --git a/interpreter/cling/CMakeLists.txt b/interpreter/cling/CMakeLists.txt +index 9775b07f10..7028042096 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 +@@ -13,81 +13,22 @@ endif(WIN32) + if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + project(Cling) + +- # Rely on llvm-config. +- set(CONFIG_OUTPUT) +- 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 - ) -+ ) -+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 +- 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) - -- clangFrontendTool +- 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() - -- 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 +- # 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) - -- 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() ++ 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() - set( LLVM_LINK_COMPONENTS - analysis -@@ -63,10 +67,6 @@ option(LIBCLING_BUILD_STATIC - # set(LLVM_EXPORTED_SYMBOL_FILE) - #endif() +- include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}") ++ include_directories("${LLVM_INCLUDE_DIRS}") + link_directories("${LLVM_LIBRARY_DIR}") --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 - + set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) |