From 2d1fac1918a82e522e15219c31fcdb3f0f191218 Mon Sep 17 00:00:00 2001 From: dragon-archer Date: Mon, 5 Jan 2026 23:30:54 +0800 Subject: [PATCH 1/2] fix: linking required LLVM libs only This patch restricts the GLOB expression to only LLVM & Clang libraries, avoiding linking to a large list of libraries when using system LLVM. Also, this patch explicitly avoids linking to `LLVM-` and `clang-cpp`, as they will cause lots of duplicate symbol errors --- cmake/llvm.cmake | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cmake/llvm.cmake b/cmake/llvm.cmake index be527c22e..3d7ab40a6 100644 --- a/cmake/llvm.cmake +++ b/cmake/llvm.cmake @@ -101,8 +101,13 @@ function(setup_llvm LLVM_VERSION) clangToolingSyntax ) else() - file(GLOB LLVM_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/*${CMAKE_STATIC_LIBRARY_SUFFIX}") - target_link_libraries(llvm-libs INTERFACE ${LLVM_LIBRARIES}) + file(GLOB LLVM_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/libLLVM[a-zA-Z]*${CMAKE_STATIC_LIBRARY_SUFFIX}") + file(GLOB CLANG_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/libclang[a-zA-Z]*${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(OTHER_REQUIRED_LIBS + "${LLVM_INSTALL_PATH}/lib/libz${CMAKE_STATIC_LIBRARY_SUFFIX}" + "${LLVM_INSTALL_PATH}/lib/libzstd${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + target_link_libraries(llvm-libs INTERFACE ${LLVM_LIBRARIES} ${CLANG_LIBRARIES} ${OTHER_REQUIRED_LIBS}) target_compile_definitions(llvm-libs INTERFACE CLANG_BUILD_STATIC=1) endif() endfunction() From 426c3e39826e088f769e101f290de2d426e77347 Mon Sep 17 00:00:00 2001 From: dragon-archer Date: Tue, 6 Jan 2026 01:02:56 +0800 Subject: [PATCH 2/2] fix: link zlib and zstd if present Also, use CMAKE_STATIC_LIBRARY_PREFIX to make the GLOB pattern more robust --- cmake/llvm.cmake | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cmake/llvm.cmake b/cmake/llvm.cmake index 3d7ab40a6..066f92ca7 100644 --- a/cmake/llvm.cmake +++ b/cmake/llvm.cmake @@ -101,11 +101,13 @@ function(setup_llvm LLVM_VERSION) clangToolingSyntax ) else() - file(GLOB LLVM_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/libLLVM[a-zA-Z]*${CMAKE_STATIC_LIBRARY_SUFFIX}") - file(GLOB CLANG_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/libclang[a-zA-Z]*${CMAKE_STATIC_LIBRARY_SUFFIX}") - set(OTHER_REQUIRED_LIBS - "${LLVM_INSTALL_PATH}/lib/libz${CMAKE_STATIC_LIBRARY_SUFFIX}" - "${LLVM_INSTALL_PATH}/lib/libzstd${CMAKE_STATIC_LIBRARY_SUFFIX}" + file(GLOB LLVM_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LLVM[a-zA-Z]*${CMAKE_STATIC_LIBRARY_SUFFIX}") + file(GLOB CLANG_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}clang[a-zA-Z]*${CMAKE_STATIC_LIBRARY_SUFFIX}") + # TODO: find a better way to find out whether zlib and zstd are needed + # Currently link if present in the LLVM lib directory + file(GLOB OTHER_REQUIRED_LIBS CONFIGURE_DEPENDS + "${LLVM_INSTALL_PATH}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}z${CMAKE_STATIC_LIBRARY_SUFFIX}" + "${LLVM_INSTALL_PATH}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zstd${CMAKE_STATIC_LIBRARY_SUFFIX}" ) target_link_libraries(llvm-libs INTERFACE ${LLVM_LIBRARIES} ${CLANG_LIBRARIES} ${OTHER_REQUIRED_LIBS}) target_compile_definitions(llvm-libs INTERFACE CLANG_BUILD_STATIC=1)