Skip to content

[lldb/cmake] Plugin layering enforcement mechanism #144543

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 23, 2025
Merged

Conversation

labath
Copy link
Collaborator

@labath labath commented Jun 17, 2025

Some inter-plugin dependencies are okay, others are not. Yet others not, but we're sort of stuck with them. The idea is to be able to prevent backsliding while making sure that acceptable dependencies are.. accepted. For context, see #139170 and the attached changes to the documentation.

@labath labath requested review from bulbazord and JDevlieghere June 17, 2025 14:57
@labath
Copy link
Collaborator Author

labath commented Jun 17, 2025

Not completely finished (not least because it doesn't build), but I think the framework is obvious, so I though this would be a good idea for the first round of feedback. (context: #139170)

@labath labath requested a review from royitaqi June 17, 2025 15:00
@labath
Copy link
Collaborator Author

labath commented Jun 17, 2025

As I needed to make sense of these deps, I made the code generate a dependency graph (yay for cmake). This is what it looks like right now:

a

Comment on lines 3 to 4
define_property(DIRECTORY PROPERTY LLDB_PERMITTED_PLUGIN_DEPENDENCIES)
define_property(TARGET PROPERTY LLDB_PERMITTED_PLUGIN_DEPENDENCIES INHERITED)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose one question is whether to create separate categories for "permitted" (okay) and "tolerated" (things we'd rather remove, shown as yellow in the graph) dependencies...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like a nice to have as it makes it easy to track the progress towards our ultimate goal.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SG. I guess the danger there is it increases the bikeshedding opportunities, particularly for this initial checkin.

I have now classified these according to my judgement (see attached image). I have already written why I think that dependencies directed at ObjectFile are fine. Probably some of the others (particularly those directed at TypeSystem should be okay as well, but I haven't given it a deeper thought).

For starters, I suggest moving anything remotely controversial into the yellow category, so let me know if you disagree with some of the green lines.

@labath
Copy link
Collaborator Author

labath commented Jun 18, 2025

Slightly less WIP now (namely, it builds). I still need to write something about the policy.

New graph is here:
a

Copy link
Member

@JDevlieghere JDevlieghere left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks fine to me. I was tempted to ask to add a comment explaining why a dependency is acceptable, but I'm worried that might encourage people from coming up with motivations as to why a new dependency is "acceptable" too. Nothing I saw seems unreasonable and the tolerated ones just reflect the status quo.

Copy link
Member

@bulbazord bulbazord left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM as well. In terms of "Tolerated" vs "Acceptable", I would argue every dependency should be "tolerated" by default and "acceptable" should be the one that requires justification.

@labath labath changed the title [lldb/cmake][WIP] Plugin layering enforcement mechanism [lldb/cmake] Plugin layering enforcement mechanism Jun 19, 2025
@labath labath marked this pull request as ready for review June 19, 2025 12:01
@llvmbot llvmbot added the lldb label Jun 19, 2025
@labath
Copy link
Collaborator Author

labath commented Jun 19, 2025

Okay, lets give this a shot.

@llvmbot
Copy link
Member

llvmbot commented Jun 19, 2025

@llvm/pr-subscribers-lldb

Author: Pavel Labath (labath)

Changes

Some inter-plugin dependencies are okay, others are not. Yet others not, but we're sort of stuck with them. The idea is to be able to prevent backsliding while making sure that acceptable dependencies are.. accepted. For context, see #139170 and the attached changes to the documentation.


Patch is 20.09 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/144543.diff

32 Files Affected:

  • (modified) lldb/CMakeLists.txt (+3)
  • (added) lldb/cmake/modules/LLDBLayeringCheck.cmake (+68)
  • (modified) lldb/docs/resources/contributing.rst (+50)
  • (modified) lldb/source/Plugins/ABI/CMakeLists.txt (+6)
  • (modified) lldb/source/Plugins/Architecture/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/Disassembler/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/DynamicLoader/CMakeLists.txt (+7)
  • (modified) lldb/source/Plugins/ExpressionParser/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/Instruction/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/InstrumentationRuntime/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/JITLoader/CMakeLists.txt (+3)
  • (modified) lldb/source/Plugins/Language/CMakeLists.txt (+6)
  • (modified) lldb/source/Plugins/LanguageRuntime/CMakeLists.txt (+3)
  • (modified) lldb/source/Plugins/MemoryHistory/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/ObjectContainer/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/ObjectFile/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/OperatingSystem/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/Platform/CMakeLists.txt (+7)
  • (modified) lldb/source/Plugins/Process/CMakeLists.txt (+5)
  • (modified) lldb/source/Plugins/Process/Utility/CMakeLists.txt (+3)
  • (modified) lldb/source/Plugins/REPL/CMakeLists.txt (+3)
  • (modified) lldb/source/Plugins/RegisterTypeBuilder/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/ScriptInterpreter/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/StructuredData/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/SymbolFile/CMakeLists.txt (+7)
  • (modified) lldb/source/Plugins/SymbolLocator/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/SymbolVendor/CMakeLists.txt (+3)
  • (modified) lldb/source/Plugins/SystemRuntime/CMakeLists.txt (+3)
  • (modified) lldb/source/Plugins/Trace/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/TraceExporter/CMakeLists.txt (+2)
  • (modified) lldb/source/Plugins/TypeSystem/CMakeLists.txt (+4)
  • (modified) lldb/source/Plugins/UnwindAssembly/CMakeLists.txt (+2)
diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt
index 2aaf75dd87bc3..e3b72e94d4beb 100644
--- a/lldb/CMakeLists.txt
+++ b/lldb/CMakeLists.txt
@@ -37,6 +37,7 @@ endif()
 
 include(LLDBConfig)
 include(AddLLDB)
+include(LLDBLayeringCheck)
 
 set(LLDB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
 
@@ -127,6 +128,8 @@ add_subdirectory(source)
 add_subdirectory(tools)
 add_subdirectory(docs)
 
+check_lldb_plugin_layering()
+
 if (LLDB_ENABLE_PYTHON)
   if(LLDB_BUILD_FRAMEWORK)
     set(lldb_python_target_dir "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Resources/Python/lldb")
diff --git a/lldb/cmake/modules/LLDBLayeringCheck.cmake b/lldb/cmake/modules/LLDBLayeringCheck.cmake
new file mode 100644
index 0000000000000..082bbe37a980f
--- /dev/null
+++ b/lldb/cmake/modules/LLDBLayeringCheck.cmake
@@ -0,0 +1,68 @@
+define_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND)
+define_property(TARGET PROPERTY LLDB_PLUGIN_KIND INHERITED)
+
+define_property(DIRECTORY PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES)
+define_property(TARGET PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES INHERITED)
+
+define_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES)
+define_property(TARGET PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES INHERITED)
+
+option(LLDB_GENERATE_PLUGIN_DEP_GRAPH OFF)
+
+function(check_lldb_plugin_layering)
+  get_property(plugins GLOBAL PROPERTY LLDB_PLUGINS)
+  foreach(plugin ${plugins})
+    get_property(plugin_kind TARGET ${plugin} PROPERTY LLDB_PLUGIN_KIND)
+    get_property(acceptable_deps TARGET ${plugin}
+      PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES)
+    get_property(tolerated_deps TARGET ${plugin}
+      PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES)
+
+    # A plugin is always permitted to depend on its own kind for the purposes
+    # subclassing. Ideally the intra-kind dependencies should not form a loop,
+    # but we're not checking that here.
+    list(APPEND acceptable_deps ${plugin_kind})
+
+    list(APPEND all_plugin_kinds ${plugin_kind})
+
+    get_property(link_libs TARGET ${plugin} PROPERTY LINK_LIBRARIES)
+    foreach(link_lib ${link_libs})
+      if(link_lib IN_LIST plugins)
+        get_property(lib_kind TARGET ${link_lib} PROPERTY LLDB_PLUGIN_KIND)
+        if (lib_kind)
+          if (lib_kind IN_LIST acceptable_deps)
+            set(dep_kind green)
+          elseif (lib_kind IN_LIST tolerated_deps)
+            set(dep_kind yellow)
+          else()
+            set(dep_kind red)
+            message(SEND_ERROR "Plugin ${plugin} cannot depend on ${lib_kind} "
+              "plugin ${link_lib}")
+          endif()
+          list(APPEND dep_${dep_kind}_${plugin_kind}_${lib_kind} ${plugin})
+        endif()
+      endif()
+    endforeach()
+  endforeach()
+
+  if (LLDB_GENERATE_PLUGIN_DEP_GRAPH)
+    set(dep_graph "digraph Plugins {\n")
+    list(REMOVE_DUPLICATES all_plugin_kinds)
+    foreach (from ${all_plugin_kinds})
+      foreach (to ${all_plugin_kinds})
+        foreach (dep_kind green yellow red)
+          if (dep_${dep_kind}_${from}_${to})
+            list(REMOVE_DUPLICATES dep_${dep_kind}_${from}_${to})
+            string(REGEX REPLACE "lldbPlugin|${from}" "" short_deps
+              "${dep_${dep_kind}_${from}_${to}}")
+            string(JOIN "\n" plugins ${short_deps})
+            string(APPEND dep_graph
+              "  ${from}->${to}[color=\"${dep_kind}\" label=\"${plugins}\"];\n")
+          endif()
+        endforeach()
+      endforeach()
+    endforeach()
+    string(APPEND dep_graph "}\n")
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lldb-plugin-deps.dot" "${dep_graph}")
+  endif()
+endfunction()
diff --git a/lldb/docs/resources/contributing.rst b/lldb/docs/resources/contributing.rst
index 48fd000765f66..e7d46c9061d53 100644
--- a/lldb/docs/resources/contributing.rst
+++ b/lldb/docs/resources/contributing.rst
@@ -56,6 +56,56 @@ subset of LLDB tests (the API tests) use a different system. Refer to the
 `lldb/test <https://github.com/llvm/llvm-project/tree/main/lldb/test>`_ folder
 for examples.
 
+
+LLDB plugins and their dependencies
+-----------------------------------
+
+LLDB has a concept of *plugins*, which are used to provide abstraction
+boundaries over functionality that is specific to a certain architecture,
+operating system, programming language, etc. A plugin implements an abstract
+base class (rarely, a set of related base classes), which is a part of LLDB
+core. This setup allows the LLDB core to remain generic while making it possible
+to support for new architectures, languages, and so on. For this to work, all
+code needs to obey certain rules.
+
+The principal rule is that LLDB core (defined as: everything under lldb/source
+*minus* lldb/source/Plugins) must not depend on any specific plugin. The only
+way it can interact with them is through the abstract interface. Explicit
+dependencies such as casting the base class to the plugin type are not permitted
+and neither are more subtle dependencies like checking the name plugin or or
+other situations where some code in LLDB core is tightly coupled to the
+implementation details of a specific plugin.
+
+The rule for interaction between different plugins is more nuanced. We recognize
+that some cross-plugin dependencies are unavoidable or even desirable. For
+example, a plugin may want to extend a plugin of the same kind to
+add/override/refine some functionality (e.g., Android is a "kind of" Linux, but
+it handles some things differently). Alternatively, a plugin of one kind may
+want to build on the functionality offered by a specific plugin of another kind
+(ELFCore Process plugin uses ELF ObjectFile plugin to create a process out of an
+ELF core file).
+
+In cases such as these, direct dependencies are acceptable. However, to keep the
+dependency graph manageable, we still have some rules to govern these
+relationships:
+
+* All dependencies between plugins of the same kind must flow in the same
+  direction (if plugin `A1` depends on plugin `B1`, then `B2` must not depend on
+  `A2`)
+* Dependency graph of plugin kinds must not contain loops (dependencies like
+  `A1->B1`, `B2->C2` and `C3->A3` are forbidden because they induce a cycle in
+  the plugin kind graph even though the plugins themselves are acyclical)
+
+
+The first of these rules is checked via CMake scripts (using the
+`LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES` property). Dependencies in this category
+are expected and permitted (subject to other constraints such as that dependency
+making sense for the particular pair of plugins). Unfortunately, due to historic
+reasons, not all plugin dependencies follow this rule, which is why we have
+another category called `LLDB_TOLERATED_PLUGIN_DEPENDENCIES`. New dependencies
+are forbidden (even though they are accepted by CMake) and existing ones should
+be removed whereever possible.
+
 .. _Error handling:
 
 Error handling and use of assertions in LLDB
diff --git a/lldb/source/Plugins/ABI/CMakeLists.txt b/lldb/source/Plugins/ABI/CMakeLists.txt
index e33ac87354860..97a20364ae7d7 100644
--- a/lldb/source/Plugins/ABI/CMakeLists.txt
+++ b/lldb/source/Plugins/ABI/CMakeLists.txt
@@ -1,3 +1,9 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND ABI)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES
+  ProcessUtility
+  TypeSystem
+)
+
 foreach(target AArch64 ARM ARC Hexagon LoongArch Mips MSP430 PowerPC RISCV SystemZ X86)
   if (${target} IN_LIST LLVM_TARGETS_TO_BUILD)
     add_subdirectory(${target})
diff --git a/lldb/source/Plugins/Architecture/CMakeLists.txt b/lldb/source/Plugins/Architecture/CMakeLists.txt
index 9ed8edf70af3f..0f898ef5116e9 100644
--- a/lldb/source/Plugins/Architecture/CMakeLists.txt
+++ b/lldb/source/Plugins/Architecture/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND Architecture)
+
 add_subdirectory(Arm)
 add_subdirectory(Mips)
 add_subdirectory(PPC64)
diff --git a/lldb/source/Plugins/Disassembler/CMakeLists.txt b/lldb/source/Plugins/Disassembler/CMakeLists.txt
index bec56765b60fd..1d1ea206e2774 100644
--- a/lldb/source/Plugins/Disassembler/CMakeLists.txt
+++ b/lldb/source/Plugins/Disassembler/CMakeLists.txt
@@ -1 +1,3 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND Disassembler)
+
 add_subdirectory(LLVMC)
diff --git a/lldb/source/Plugins/DynamicLoader/CMakeLists.txt b/lldb/source/Plugins/DynamicLoader/CMakeLists.txt
index 30607159acdc0..01aba34b94169 100644
--- a/lldb/source/Plugins/DynamicLoader/CMakeLists.txt
+++ b/lldb/source/Plugins/DynamicLoader/CMakeLists.txt
@@ -1,3 +1,10 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND DynamicLoader)
+set_property(DIRECTORY PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES ObjectFile)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES
+  Process # part of a loop (Process<->DynamicLoader).
+  TypeSystem
+)
+
 add_subdirectory(Darwin-Kernel)
 add_subdirectory(FreeBSD-Kernel)
 add_subdirectory(MacOSX-DYLD)
diff --git a/lldb/source/Plugins/ExpressionParser/CMakeLists.txt b/lldb/source/Plugins/ExpressionParser/CMakeLists.txt
index 17c40aee44cc2..8a8089879bd9f 100644
--- a/lldb/source/Plugins/ExpressionParser/CMakeLists.txt
+++ b/lldb/source/Plugins/ExpressionParser/CMakeLists.txt
@@ -1 +1,3 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND ExpressionParser)
+
 add_subdirectory(Clang)
diff --git a/lldb/source/Plugins/Instruction/CMakeLists.txt b/lldb/source/Plugins/Instruction/CMakeLists.txt
index 46d610f261e0d..bf48a1c1cc11e 100644
--- a/lldb/source/Plugins/Instruction/CMakeLists.txt
+++ b/lldb/source/Plugins/Instruction/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND Instruction)
+
 add_subdirectory(ARM)
 add_subdirectory(ARM64)
 add_subdirectory(LoongArch)
diff --git a/lldb/source/Plugins/InstrumentationRuntime/CMakeLists.txt b/lldb/source/Plugins/InstrumentationRuntime/CMakeLists.txt
index 7f301bca14a83..2a6cf930945d1 100644
--- a/lldb/source/Plugins/InstrumentationRuntime/CMakeLists.txt
+++ b/lldb/source/Plugins/InstrumentationRuntime/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND InstrumentationRuntime)
+
 add_subdirectory(ASan)
 add_subdirectory(ASanLibsanitizers)
 add_subdirectory(MainThreadChecker)
diff --git a/lldb/source/Plugins/JITLoader/CMakeLists.txt b/lldb/source/Plugins/JITLoader/CMakeLists.txt
index e52230199109f..ffba54f8b287b 100644
--- a/lldb/source/Plugins/JITLoader/CMakeLists.txt
+++ b/lldb/source/Plugins/JITLoader/CMakeLists.txt
@@ -1 +1,4 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND JITLoader)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES ObjectFile)
+
 add_subdirectory(GDB)
diff --git a/lldb/source/Plugins/Language/CMakeLists.txt b/lldb/source/Plugins/Language/CMakeLists.txt
index 7869074566d1e..b432dd300668e 100644
--- a/lldb/source/Plugins/Language/CMakeLists.txt
+++ b/lldb/source/Plugins/Language/CMakeLists.txt
@@ -1,3 +1,9 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND Language)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES
+  LanguageRuntime
+  TypeSystem
+)
+
 add_subdirectory(ClangCommon)
 add_subdirectory(CPlusPlus)
 add_subdirectory(ObjC)
diff --git a/lldb/source/Plugins/LanguageRuntime/CMakeLists.txt b/lldb/source/Plugins/LanguageRuntime/CMakeLists.txt
index 034ae1545ae88..32528d6d6171f 100644
--- a/lldb/source/Plugins/LanguageRuntime/CMakeLists.txt
+++ b/lldb/source/Plugins/LanguageRuntime/CMakeLists.txt
@@ -1,2 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND LanguageRuntime)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES TypeSystem)
+
 add_subdirectory(CPlusPlus)
 add_subdirectory(ObjC)
diff --git a/lldb/source/Plugins/MemoryHistory/CMakeLists.txt b/lldb/source/Plugins/MemoryHistory/CMakeLists.txt
index 113f063625789..50838bb8a0770 100644
--- a/lldb/source/Plugins/MemoryHistory/CMakeLists.txt
+++ b/lldb/source/Plugins/MemoryHistory/CMakeLists.txt
@@ -1 +1,3 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND MemoryHistory)
+
 add_subdirectory(asan)
diff --git a/lldb/source/Plugins/ObjectContainer/CMakeLists.txt b/lldb/source/Plugins/ObjectContainer/CMakeLists.txt
index cda0c8151dd8a..4ae1bb138a9a4 100644
--- a/lldb/source/Plugins/ObjectContainer/CMakeLists.txt
+++ b/lldb/source/Plugins/ObjectContainer/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND ObjectContainer)
+
 add_subdirectory(BSD-Archive)
 add_subdirectory(Universal-Mach-O)
 add_subdirectory(Mach-O-Fileset)
diff --git a/lldb/source/Plugins/ObjectFile/CMakeLists.txt b/lldb/source/Plugins/ObjectFile/CMakeLists.txt
index 7abd0c96f4fd7..6004b1f414d43 100644
--- a/lldb/source/Plugins/ObjectFile/CMakeLists.txt
+++ b/lldb/source/Plugins/ObjectFile/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND ObjectFile)
+
 add_subdirectory(Breakpad)
 add_subdirectory(COFF)
 add_subdirectory(ELF)
diff --git a/lldb/source/Plugins/OperatingSystem/CMakeLists.txt b/lldb/source/Plugins/OperatingSystem/CMakeLists.txt
index 06d909b862a04..1a29f9ad3af4c 100644
--- a/lldb/source/Plugins/OperatingSystem/CMakeLists.txt
+++ b/lldb/source/Plugins/OperatingSystem/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND OperatingSystem)
+
 if (LLDB_ENABLE_PYTHON)
   add_subdirectory(Python)
 endif()
diff --git a/lldb/source/Plugins/Platform/CMakeLists.txt b/lldb/source/Plugins/Platform/CMakeLists.txt
index 0220e734b36d1..f4753ab47ce11 100644
--- a/lldb/source/Plugins/Platform/CMakeLists.txt
+++ b/lldb/source/Plugins/Platform/CMakeLists.txt
@@ -1,3 +1,10 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND Platform)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES
+  DynamicLoader
+  ObjectContainer
+  Process
+)
+
 add_subdirectory(AIX)
 add_subdirectory(Android)
 add_subdirectory(FreeBSD)
diff --git a/lldb/source/Plugins/Process/CMakeLists.txt b/lldb/source/Plugins/Process/CMakeLists.txt
index 058b4b9ad2157..bd9b1b86dbf13 100644
--- a/lldb/source/Plugins/Process/CMakeLists.txt
+++ b/lldb/source/Plugins/Process/CMakeLists.txt
@@ -1,3 +1,8 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND Process)
+set_property(DIRECTORY PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES ObjectFile)
+# This dependency is part of a loop (Process<->DynamicLoader).
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES DynamicLoader)
+
 if (CMAKE_SYSTEM_NAME MATCHES "Linux|Android")
   add_subdirectory(Linux)
   add_subdirectory(POSIX)
diff --git a/lldb/source/Plugins/Process/Utility/CMakeLists.txt b/lldb/source/Plugins/Process/Utility/CMakeLists.txt
index fd3019613892a..48646b784f931 100644
--- a/lldb/source/Plugins/Process/Utility/CMakeLists.txt
+++ b/lldb/source/Plugins/Process/Utility/CMakeLists.txt
@@ -1,3 +1,6 @@
+# TODO: Clean up this directory and its dependencies
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND ProcessUtility)
+
 add_lldb_library(lldbPluginProcessUtility
   AuxVector.cpp
   FreeBSDSignals.cpp
diff --git a/lldb/source/Plugins/REPL/CMakeLists.txt b/lldb/source/Plugins/REPL/CMakeLists.txt
index 17c40aee44cc2..8b51b3899625b 100644
--- a/lldb/source/Plugins/REPL/CMakeLists.txt
+++ b/lldb/source/Plugins/REPL/CMakeLists.txt
@@ -1 +1,4 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND REPL)
+set_property(DIRECTORY PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES TypeSystem)
+
 add_subdirectory(Clang)
diff --git a/lldb/source/Plugins/RegisterTypeBuilder/CMakeLists.txt b/lldb/source/Plugins/RegisterTypeBuilder/CMakeLists.txt
index 336ae91058021..7411b24c86cbd 100644
--- a/lldb/source/Plugins/RegisterTypeBuilder/CMakeLists.txt
+++ b/lldb/source/Plugins/RegisterTypeBuilder/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND RegisterTypeBuilder)
+
 add_lldb_library(lldbPluginRegisterTypeBuilderClang PLUGIN
   RegisterTypeBuilderClang.cpp
 
diff --git a/lldb/source/Plugins/ScriptInterpreter/CMakeLists.txt b/lldb/source/Plugins/ScriptInterpreter/CMakeLists.txt
index fa1c72a32fe13..4429b006173a7 100644
--- a/lldb/source/Plugins/ScriptInterpreter/CMakeLists.txt
+++ b/lldb/source/Plugins/ScriptInterpreter/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND ScriptInterpreter)
+
 add_subdirectory(None)
 if (LLDB_ENABLE_PYTHON)
   add_subdirectory(Python)
diff --git a/lldb/source/Plugins/StructuredData/CMakeLists.txt b/lldb/source/Plugins/StructuredData/CMakeLists.txt
index 40d64558482db..a6caa233f2220 100644
--- a/lldb/source/Plugins/StructuredData/CMakeLists.txt
+++ b/lldb/source/Plugins/StructuredData/CMakeLists.txt
@@ -1,2 +1,4 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND StructuredData)
+
 add_subdirectory(DarwinLog)
 
diff --git a/lldb/source/Plugins/SymbolFile/CMakeLists.txt b/lldb/source/Plugins/SymbolFile/CMakeLists.txt
index 106387b45ec1a..3516528464200 100644
--- a/lldb/source/Plugins/SymbolFile/CMakeLists.txt
+++ b/lldb/source/Plugins/SymbolFile/CMakeLists.txt
@@ -1,3 +1,10 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND SymbolFile)
+set_property(DIRECTORY PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES ObjectFile)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES
+  Language
+  TypeSystem  # part of a loop (TypeSystem<->SymbolFile).
+)
+
 add_subdirectory(Breakpad)
 add_subdirectory(CTF)
 add_subdirectory(DWARF)
diff --git a/lldb/source/Plugins/SymbolLocator/CMakeLists.txt b/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
index 3367022639ab8..3b466f71dca58 100644
--- a/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
+++ b/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND SymbolLocator)
+
 # Order matters here: the first symbol locator prevents further searching.
 # For DWARF binaries that are both stripped and split, the Default plugin
 # will return the stripped binary when asked for the ObjectFile, which then
diff --git a/lldb/source/Plugins/SymbolVendor/CMakeLists.txt b/lldb/source/Plugins/SymbolVendor/CMakeLists.txt
index 1981706e06f4a..a07330d7d8bc4 100644
--- a/lldb/source/Plugins/SymbolVendor/CMakeLists.txt
+++ b/lldb/source/Plugins/SymbolVendor/CMakeLists.txt
@@ -1,3 +1,6 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND SymbolVendor)
+set_property(DIRECTORY PROPERTY LLDB_ACCEPTABLE_PLUGIN_DEPENDENCIES ObjectFile)
+
 add_subdirectory(ELF)
 
 if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
diff --git a/lldb/source/Plugins/SystemRuntime/CMakeLists.txt b/lldb/source/Plugins/SystemRuntime/CMakeLists.txt
index 0955a9eb74c2d..58fdc060bda3a 100644
--- a/lldb/source/Plugins/SystemRuntime/CMakeLists.txt
+++ b/lldb/source/Plugins/SystemRuntime/CMakeLists.txt
@@ -1 +1,4 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND SystemRuntime)
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES TypeSystem)
+
 add_subdirectory(MacOSX)
diff --git a/lldb/source/Plugins/Trace/CMakeLists.txt b/lldb/source/Plugins/Trace/CMakeLists.txt
index 955f88cec3404..331b48f95f1a4 100644
--- a/lldb/source/Plugins/Trace/CMakeLists.txt
+++ b/lldb/source/Plugins/Trace/CMakeLists.txt
@@ -1,3 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND Trace)
+
 option(LLDB_BUILD_INTEL_PT "Enable Building of Intel(R) Processor Trace Tool" OFF)
 
 add_subdirectory(common)
diff --git a/lldb/source/Plugins/TraceExporter/CMakeLists.txt b/lldb/source/Plugins/TraceExporter/CMakeLists.txt
index e0252ee36720c..7130548d7a9f8 100644
--- a/lldb/source/Plugins/TraceExporter/CMakeLists.txt
+++ b/lldb/source/Plugins/TraceExporter/CMakeLists.txt
@@ -1,2 +1,4 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND TraceExporter)
+
 add_subdirectory(common)
 add_subdirectory(ctf)
diff --git a/lldb/source/Plugins/TypeSystem/CMakeLists.txt b/lldb/source/Plugins/TypeSystem/CMakeLists.txt
index 17c40aee44cc2..47e32ff176d8c 100644
--- a/lldb/source/Plugins/TypeSystem/CMakeLists.txt
+++ b/lldb/source/Plugins/TypeSystem/CMakeLists.txt
@@ -1 +1,5 @@
+set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND TypeSystem)
+# This dependency is part of a loop (TypeSystem<->SymbolFile).
+set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES SymbolFile)
+
 add_subdirectory(Clang)
diff --git a/lldb/source/Plugins/UnwindAssembly/CMakeLists.txt b/lldb/source/Plugins/UnwindAssembly/CMakeLists.txt
index 1723a06045804..1f505599c3fff 100644
--- a/lldb/source/Plugins/UnwindAssembly/CMakeLists.txt
+++ b/lldb/source/Plugins/UnwindAssembly/CMakeLists.txt
@@ -1,2 +1,4 @@
+set_property(DIRECTORY PROPERTY L...
[truncated]

Copy link
Member

@JDevlieghere JDevlieghere left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, I'm very happy with this :-)

@medismailben
Copy link
Member

Cool stuff!

@labath labath merged commit e7c1da7 into llvm:main Jun 23, 2025
11 checks passed
@labath labath deleted the layer branch June 23, 2025 09:31
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jun 23, 2025

LLVM Buildbot has detected a new failure on builder cross-project-tests-sie-ubuntu-dwarf5 running on doug-worker-1b while building lldb at step 4 "cmake-configure".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/163/builds/21408

Here is the relevant piece of the build log for the reference
Step 4 (cmake-configure) failure: cmake (failure)
...
-- Looking for gettid
-- Looking for gettid - found
-- Not building llvm-mt because libxml2 is not available
-- Failed to find LLVM FileCheck
-- Google Benchmark version: v0.0.0, normalized to 0.0.0
-- Looking for shm_open in rt
-- Looking for shm_open in rt - found
-- Performing Test HAVE_CXX_FLAG_WALL
-- Performing Test HAVE_CXX_FLAG_WALL - Success
-- Performing Test HAVE_CXX_FLAG_WEXTRA
-- Performing Test HAVE_CXX_FLAG_WEXTRA - Success
-- Performing Test HAVE_CXX_FLAG_WSHADOW
-- Performing Test HAVE_CXX_FLAG_WSHADOW - Success
-- Performing Test HAVE_CXX_FLAG_WFLOAT_EQUAL
-- Performing Test HAVE_CXX_FLAG_WFLOAT_EQUAL - Success
-- Performing Test HAVE_CXX_FLAG_WOLD_STYLE_CAST
-- Performing Test HAVE_CXX_FLAG_WOLD_STYLE_CAST - Success
-- Performing Test HAVE_CXX_FLAG_WSUGGEST_OVERRIDE
-- Performing Test HAVE_CXX_FLAG_WSUGGEST_OVERRIDE - Success
-- Performing Test HAVE_CXX_FLAG_PEDANTIC
-- Performing Test HAVE_CXX_FLAG_PEDANTIC - Success
-- Performing Test HAVE_CXX_FLAG_PEDANTIC_ERRORS
-- Performing Test HAVE_CXX_FLAG_PEDANTIC_ERRORS - Success
-- Performing Test HAVE_CXX_FLAG_WSHORTEN_64_TO_32
-- Performing Test HAVE_CXX_FLAG_WSHORTEN_64_TO_32 - Failed
-- Performing Test HAVE_CXX_FLAG_FSTRICT_ALIASING
-- Performing Test HAVE_CXX_FLAG_FSTRICT_ALIASING - Success
-- Performing Test HAVE_CXX_FLAG_WNO_DEPRECATED_DECLARATIONS
-- Performing Test HAVE_CXX_FLAG_WNO_DEPRECATED_DECLARATIONS - Success
-- Performing Test HAVE_CXX_FLAG_FNO_EXCEPTIONS
-- Performing Test HAVE_CXX_FLAG_FNO_EXCEPTIONS - Success
-- Performing Test HAVE_CXX_FLAG_WSTRICT_ALIASING
-- Performing Test HAVE_CXX_FLAG_WSTRICT_ALIASING - Success
-- Performing Test HAVE_CXX_FLAG_WD654
-- Performing Test HAVE_CXX_FLAG_WD654 - Failed
-- Performing Test HAVE_CXX_FLAG_WTHREAD_SAFETY
-- Performing Test HAVE_CXX_FLAG_WTHREAD_SAFETY - Failed
-- Performing Test HAVE_CXX_FLAG_COVERAGE
-- Performing Test HAVE_CXX_FLAG_COVERAGE - Success
-- Compiling and running to test HAVE_GNU_POSIX_REGEX
-- Performing Test HAVE_GNU_POSIX_REGEX -- failed to compile
-- Compiling and running to test HAVE_POSIX_REGEX
-- Performing Test HAVE_POSIX_REGEX -- success
-- Compiling and running to test HAVE_STEADY_CLOCK
-- Performing Test HAVE_STEADY_CLOCK -- success
-- Compiling and running to test HAVE_PTHREAD_AFFINITY
-- Performing Test HAVE_PTHREAD_AFFINITY -- success
-- Configuring incomplete, errors occurred!
See also "/home/buildbot/buildbot-root/cross-project-tests-sie-ubuntu-dwarf5/build/CMakeFiles/CMakeOutput.log".
See also "/home/buildbot/buildbot-root/cross-project-tests-sie-ubuntu-dwarf5/build/CMakeFiles/CMakeError.log".

labath added a commit that referenced this pull request Jun 23, 2025
It seems some cmake versions require it.
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jun 23, 2025

LLVM Buildbot has detected a new failure on builder lldb-aarch64-ubuntu running on linaro-lldb-aarch64-ubuntu while building lldb at step 6 "test".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/59/builds/19802

Here is the relevant piece of the build log for the reference
Step 6 (test) failure: build (failure)
...
PASS: lldb-unit :: ValueObject/./LLDBValueObjectTests/8/12 (2258 of 2267)
PASS: lldb-unit :: ValueObject/./LLDBValueObjectTests/9/12 (2259 of 2267)
PASS: lldb-unit :: tools/lldb-server/tests/./LLDBServerTests/0/2 (2260 of 2267)
PASS: lldb-unit :: tools/lldb-server/tests/./LLDBServerTests/1/2 (2261 of 2267)
PASS: lldb-unit :: Utility/./UtilityTests/4/9 (2262 of 2267)
PASS: lldb-unit :: Target/./TargetTests/11/14 (2263 of 2267)
PASS: lldb-unit :: Host/./HostTests/6/8 (2264 of 2267)
PASS: lldb-unit :: Host/./HostTests/4/8 (2265 of 2267)
PASS: lldb-unit :: Process/gdb-remote/./ProcessGdbRemoteTests/8/9 (2266 of 2267)
UNRESOLVED: lldb-api :: tools/lldb-server/TestLldbGdbServer.py (2267 of 2267)
******************** TEST 'lldb-api :: tools/lldb-server/TestLldbGdbServer.py' FAILED ********************
Script:
--
/usr/bin/python3.10 /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/llvm-project/lldb/test/API/dotest.py -u CXXFLAGS -u CFLAGS --env LLVM_LIBS_DIR=/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/./lib --env LLVM_INCLUDE_DIR=/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/include --env LLVM_TOOLS_DIR=/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/./bin --arch aarch64 --build-dir /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/lldb-test-build.noindex --lldb-module-cache-dir /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/lldb-test-build.noindex/module-cache-lldb/lldb-api --clang-module-cache-dir /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/lldb-test-build.noindex/module-cache-clang/lldb-api --executable /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/./bin/lldb --compiler /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/./bin/clang --dsymutil /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/./bin/dsymutil --make /usr/bin/gmake --llvm-tools-dir /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/./bin --lldb-obj-root /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/tools/lldb --lldb-libs-dir /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/./lib --cmake-build-type Release /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/llvm-project/lldb/test/API/tools/lldb-server -p TestLldbGdbServer.py
--
Exit Code: 1

Command Output (stdout):
--
lldb version 21.0.0git (https://github.com/llvm/llvm-project.git revision e7c1da7c8ef31c258619c1668062985e7ae83b70)
  clang revision e7c1da7c8ef31c258619c1668062985e7ae83b70
  llvm revision e7c1da7c8ef31c258619c1668062985e7ae83b70
Skipping the following test categories: ['libc++', 'dsym', 'gmodules', 'debugserver', 'objc']

--
Command Output (stderr):
--
UNSUPPORTED: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_Hc_then_Csignal_signals_correct_thread_launch_debugserver (TestLldbGdbServer.LldbGdbServerTestCase) (test case does not fall in any category of interest for this run) 
PASS: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_Hc_then_Csignal_signals_correct_thread_launch_llgs (TestLldbGdbServer.LldbGdbServerTestCase)
PASS: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_Hg_fails_on_another_pid_llgs (TestLldbGdbServer.LldbGdbServerTestCase)
PASS: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_Hg_fails_on_minus_one_pid_llgs (TestLldbGdbServer.LldbGdbServerTestCase)
PASS: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_Hg_fails_on_zero_pid_llgs (TestLldbGdbServer.LldbGdbServerTestCase)
UNSUPPORTED: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_Hg_switches_to_3_threads_launch_debugserver (TestLldbGdbServer.LldbGdbServerTestCase) (test case does not fall in any category of interest for this run) 
PASS: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_Hg_switches_to_3_threads_launch_llgs (TestLldbGdbServer.LldbGdbServerTestCase)
UNSUPPORTED: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_P_and_p_thread_suffix_work_debugserver (TestLldbGdbServer.LldbGdbServerTestCase) (test case does not fall in any category of interest for this run) 
PASS: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_P_and_p_thread_suffix_work_llgs (TestLldbGdbServer.LldbGdbServerTestCase)
UNSUPPORTED: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_P_writes_all_gpr_registers_debugserver (TestLldbGdbServer.LldbGdbServerTestCase) (test case does not fall in any category of interest for this run) 
PASS: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_P_writes_all_gpr_registers_llgs (TestLldbGdbServer.LldbGdbServerTestCase)
UNSUPPORTED: LLDB (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang-aarch64) :: test_attach_commandline_continue_app_exits_debugserver (TestLldbGdbServer.LldbGdbServerTestCase) (test case does not fall in any category of interest for this run) 
Program aborted due to an unhandled Error:
Operation not permitted
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/lldb-server gdbserver --attach=708184 --reverse-connect [127.0.0.1]:56463
 #0 0x0000aaaac29e7798 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/lldb-server+0x4d7798)
 #1 0x0000aaaac29e57d0 llvm::sys::RunSignalHandlers() (/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/lldb-server+0x4d57d0)
 #2 0x0000aaaac29e7ec8 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x0000ffff947d57dc (linux-vdso.so.1+0x7dc)
 #4 0x0000ffff93fdf1f0 __pthread_kill_implementation ./nptl/pthread_kill.c:44:76

labath added a commit that referenced this pull request Jun 23, 2025
Causes failures on several bots.

This reverts commits 714b2fd and
e7c1da7.
labath added a commit to labath/llvm-project that referenced this pull request Jun 23, 2025
)"

The only difference from the original PR are the added BRIEF and
FULL_DOCS arguments to define_property, which are required for
cmake<3.23.
miguelcsx pushed a commit to miguelcsx/llvm-project that referenced this pull request Jun 23, 2025
Some inter-plugin dependencies are okay, others are not. Yet others not,
but we're sort of stuck with them. The idea is to be able to prevent
backsliding while making sure that acceptable dependencies are..
accepted. For context, see
llvm#139170 and the attached
changes to the documentation.
miguelcsx pushed a commit to miguelcsx/llvm-project that referenced this pull request Jun 23, 2025
miguelcsx pushed a commit to miguelcsx/llvm-project that referenced this pull request Jun 23, 2025
…)"

Causes failures on several bots.

This reverts commits 714b2fd and
e7c1da7.
Jaddyen pushed a commit to Jaddyen/llvm-project that referenced this pull request Jun 23, 2025
Some inter-plugin dependencies are okay, others are not. Yet others not,
but we're sort of stuck with them. The idea is to be able to prevent
backsliding while making sure that acceptable dependencies are..
accepted. For context, see
llvm#139170 and the attached
changes to the documentation.
Jaddyen pushed a commit to Jaddyen/llvm-project that referenced this pull request Jun 23, 2025
Jaddyen pushed a commit to Jaddyen/llvm-project that referenced this pull request Jun 23, 2025
…)"

Causes failures on several bots.

This reverts commits 714b2fd and
e7c1da7.
labath added a commit that referenced this pull request Jun 24, 2025
#145305)

The only difference from the original PR are the added BRIEF and
FULL_DOCS arguments to define_property, which are required for
cmake<3.23.
DrSergei pushed a commit to DrSergei/llvm-project that referenced this pull request Jun 24, 2025
)" (llvm#145305)

The only difference from the original PR are the added BRIEF and
FULL_DOCS arguments to define_property, which are required for
cmake<3.23.
anthonyhatran pushed a commit to anthonyhatran/llvm-project that referenced this pull request Jun 26, 2025
)" (llvm#145305)

The only difference from the original PR are the added BRIEF and
FULL_DOCS arguments to define_property, which are required for
cmake<3.23.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants