cmake/Tests/RunCMake/InterfaceLibrary/unique_dependencies.cmake
Simon Tatham 725ea968ac De-duplicate dependencies propagated through interface libraries
When processing an indirect dependency of target `A` on target `C` via
an interface library B, `cmComputeTargetDepends::AddTargetDepend` was
not checking for duplicate dependencies, so that if `A` depended on `C`
via multiple interface libraries, the dependency graph built in
cmComputeTargetDepends would have duplicate edges.  In a real project
(LLVM libc) this was causing cmake to consume multiple gigabytes of RAM.

Fixes: #27386
2025-11-26 14:48:45 +00:00

20 lines
669 B
CMake

# Make two interface libraries.
add_library(lib1 INTERFACE)
add_library(lib2 INTERFACE)
# Top-level target that depends on both of them.
add_custom_target(top
COMMAND ${CMAKE_COMMAND} -E echo top
DEPENDS lib1 lib2)
# Lowest-level utility target that both libraries depend on.
add_custom_target(util
COMMAND ${CMAKE_COMMAND} -E echo util)
add_dependencies(lib1 util)
add_dependencies(lib2 util)
# The dependency graph computed by cmComputeTargetDepends will include
# an edge directly from 'top' to 'util'. But it should only include
# one copy of it, even though there are two paths via lib1 and lib2.
set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)