From 10464485d45a3c86ca9697a6c9fdaa585092116d Mon Sep 17 00:00:00 2001 From: Tulio Magno Quites Machado Filho Date: Mon, 25 Sep 2023 16:05:44 -0300 Subject: [PATCH] Update to LLVM 17.0.1 Manually set CLANG_RESOURCE_DIR based on the rpm macros in order to avoid using a path that depends on LLVM_LIBDIR_SUFFIX, which is not used anymore since 2ad36cffbc3fe9169c3c86fa794159841aae9dd0. --- ...ing-LLDB-standlone-without-framework.patch | 40 ++++++++++ ...-logic-to-find-clang-resource-dir-in.patch | 80 +++++++++++++++++++ lldb.spec | 12 ++- 3 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 0001-lldb-Fix-building-LLDB-standlone-without-framework.patch create mode 100644 0001-lldb-NFCI-Change-logic-to-find-clang-resource-dir-in.patch diff --git a/0001-lldb-Fix-building-LLDB-standlone-without-framework.patch b/0001-lldb-Fix-building-LLDB-standlone-without-framework.patch new file mode 100644 index 0000000..5f257d6 --- /dev/null +++ b/0001-lldb-Fix-building-LLDB-standlone-without-framework.patch @@ -0,0 +1,40 @@ +From 6888de118707e6392b46073fc35738804f9f1d80 Mon Sep 17 00:00:00 2001 +From: Alex Langford +Date: Mon, 31 Jul 2023 16:30:17 -0700 +Subject: [PATCH] [lldb] Fix building LLDB standlone without framework + +In a809720102fae8d1b5a7073f99f9dae9395c5f41 I refactored some logic to +deal with the clang resource directory in standalone LLDB builds. +However, this logic escaped me because it only runs when you do not +build LLDB.framework. + +Differential Revision: https://reviews.llvm.org/D156763 +--- + lldb/source/API/CMakeLists.txt | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/lldb/source/API/CMakeLists.txt b/lldb/source/API/CMakeLists.txt +index a55754726c58..39ac451c471c 100644 +--- a/lldb/source/API/CMakeLists.txt ++++ b/lldb/source/API/CMakeLists.txt +@@ -204,13 +204,11 @@ else() + # When building the LLDB framework, this isn't necessary as there we copy everything we need into + # the framework (including the Clang resourece directory). + if(NOT LLDB_BUILD_FRAMEWORK) +- set(LLDB_CLANG_RESOURCE_DIR_PARENT "$/clang") +- file(MAKE_DIRECTORY "${LLDB_CLANG_RESOURCE_DIR_PARENT}") ++ set(LLDB_CLANG_RESOURCE_DIR "$/clang") + add_custom_command(TARGET liblldb POST_BUILD +- COMMENT "Linking Clang resource dir into LLDB build directory: ${LLDB_CLANG_RESOURCE_DIR_PARENT}" +- COMMAND ${CMAKE_COMMAND} -E make_directory "${LLDB_CLANG_RESOURCE_DIR_PARENT}" +- COMMAND ${CMAKE_COMMAND} -E create_symlink "${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}" +- "${LLDB_CLANG_RESOURCE_DIR_PARENT}/${LLDB_CLANG_RESOURCE_DIR_NAME}" ++ COMMENT "Linking Clang resource dir into LLDB build directory: ${LLDB_CLANG_RESOURCE_DIR}" ++ COMMAND ${CMAKE_COMMAND} -E create_symlink ++ "${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}" "${LLDB_CLANG_RESOURCE_DIR}" + ) + endif() + endif() +-- +2.41.0 + diff --git a/0001-lldb-NFCI-Change-logic-to-find-clang-resource-dir-in.patch b/0001-lldb-NFCI-Change-logic-to-find-clang-resource-dir-in.patch new file mode 100644 index 0000000..f636645 --- /dev/null +++ b/0001-lldb-NFCI-Change-logic-to-find-clang-resource-dir-in.patch @@ -0,0 +1,80 @@ +From a809720102fae8d1b5a7073f99f9dae9395c5f41 Mon Sep 17 00:00:00 2001 +From: Alex Langford +Date: Tue, 25 Jul 2023 15:38:04 -0700 +Subject: [PATCH] [lldb][NFCI] Change logic to find clang resource dir in + standalone builds + +As of 0beffb854209a41f31beb18f9631258349a99299 there is a CMake +function to actually calculate the relative path to the clang resource +directory. Currently we have some bespoke logic that looks in a few +places, but with this new function we should be able to eliminate some +complexity here. + +Also, I moved the functionality from LLDBConfig to LLDBStandalone since +it is only used in standalone builds. + +Differential Revision: https://reviews.llvm.org/D156270 +--- + lldb/cmake/modules/LLDBConfig.cmake | 24 ------------------------ + lldb/cmake/modules/LLDBStandalone.cmake | 13 +++++++++++++ + 2 files changed, 13 insertions(+), 24 deletions(-) + +diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake +index 1393342dd5cb..ce90ecabc6a5 100644 +--- a/lldb/cmake/modules/LLDBConfig.cmake ++++ b/lldb/cmake/modules/LLDBConfig.cmake +@@ -282,30 +282,6 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + endif() + endif() + +- +-# If LLDB is building against a prebuilt Clang, then the Clang resource +-# directory that LLDB is using for its embedded Clang instance needs to point +-# to the resource directory of the used Clang installation. +-if (NOT TARGET clang-resource-headers) +- set(LLDB_CLANG_RESOURCE_DIR_NAME "${LLVM_VERSION_MAJOR}") +- # Iterate over the possible places where the external resource directory +- # could be and pick the first that exists. +- foreach(CANDIDATE "${Clang_DIR}/../.." "${LLVM_DIR}" "${LLVM_LIBRARY_DIRS}" +- "${LLVM_BUILD_LIBRARY_DIR}" +- "${LLVM_LIBRARY_DIR}") +- # Build the resource directory path by appending 'clang/'. +- set(CANDIDATE_RESOURCE_DIR "${CANDIDATE}/clang/${LLDB_CLANG_RESOURCE_DIR_NAME}") +- if (IS_DIRECTORY "${CANDIDATE_RESOURCE_DIR}") +- set(LLDB_EXTERNAL_CLANG_RESOURCE_DIR "${CANDIDATE_RESOURCE_DIR}") +- break() +- endif() +- endforeach() +- +- if (NOT LLDB_EXTERNAL_CLANG_RESOURCE_DIR) +- message(FATAL_ERROR "Expected directory for clang-resource headers not found: ${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}") +- endif() +-endif() +- + # Find Apple-specific libraries or frameworks that may be needed. + if (APPLE) + if(NOT APPLE_EMBEDDED) +diff --git a/lldb/cmake/modules/LLDBStandalone.cmake b/lldb/cmake/modules/LLDBStandalone.cmake +index e9bcabcb63de..fd16716d7141 100644 +--- a/lldb/cmake/modules/LLDBStandalone.cmake ++++ b/lldb/cmake/modules/LLDBStandalone.cmake +@@ -128,3 +128,16 @@ endif() + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) ++ ++# If LLDB is building against a prebuilt Clang, then the Clang resource ++# directory that LLDB is using for its embedded Clang instance needs to point to ++# the resource directory of the used Clang installation. ++if (NOT TARGET clang-resource-headers) ++ include(GetClangResourceDir) ++ get_clang_resource_dir(LLDB_EXTERNAL_CLANG_RESOURCE_DIR ++ PREFIX "${Clang_DIR}/../../../") ++ ++ if (NOT EXISTS ${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}) ++ message(FATAL_ERROR "Expected directory for clang-resource-headers not found: ${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}") ++ endif() ++endif() +-- +2.41.0 + diff --git a/lldb.spec b/lldb.spec index 6ec57ce..a05bca9 100644 --- a/lldb.spec +++ b/lldb.spec @@ -4,8 +4,8 @@ # https://bugzilla.redhat.com/show_bug.cgi?id=2158587 %undefine _include_frame_pointers -%global lldb_version 17.0.0 -%global rc_ver 4 +%global lldb_version 17.0.1 +#global rc_ver 4 %global lldb_srcdir %{name}-%{lldb_version}%{?rc_ver:rc%{rc_ver}}.src Name: lldb @@ -19,6 +19,10 @@ Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{lldb_v Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{lldb_version}%{?rc_ver:-rc%{rc_ver}}/%{lldb_srcdir}.tar.xz.sig Source2: release-keys.asc +# Backports from LLVM 18. +Patch: 0001-lldb-NFCI-Change-logic-to-find-clang-resource-dir-in.patch +Patch: 0001-lldb-Fix-building-LLDB-standlone-without-framework.patch + BuildRequires: clang BuildRequires: cmake BuildRequires: ninja-build @@ -93,6 +97,7 @@ The package contains the LLDB Python module. -DPYTHON_VERSION_MINOR:STRING=$(%{__python3} -c "import sys; print(sys.version_info.minor)") \ -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ -DCLANG_LINK_CLANG_DYLIB=ON \ + -DCLANG_RESOURCE_DIR=$(realpath --relative-to=/usr/bin %{clang_resource_dir}) \ -DLLVM_LIT_ARGS="-sv \ --path %{_libdir}/llvm" \ @@ -133,6 +138,9 @@ rm -f %{buildroot}%{python3_sitearch}/six.* %{python3_sitearch}/lldb %changelog +* Mon Sep 25 2023 Tulio Magno Quites Machado Filho - 17.0.1-1 +- Update to LLVM 17.0.1 + * Mon Sep 11 2023 Tulio Magno Quites Machado Filho - 17.0.0~rc4-1 - Update to LLVM 17.0.0 RC4