-
Notifications
You must be signed in to change notification settings - Fork 14.9k
Description
There appears to be a circular dependency issue with the [MLIR
mlir-pdll
tool](https://github.com/llvm/llvm-project/blob/main/mlir/tools/mlir-pdll/CMakeLists.txt):
set(LIBS
MLIRIR
MLIRPDLLAST
MLIRPDLLCodeGen
MLIRPDLLODS
MLIRPDLLParser
)
add_tablegen(mlir-pdll MLIR_PDLL
DESTINATION "${MLIR_TOOLS_INSTALL_DIR}"
EXPORT MLIR
mlir-pdll.cpp
DEPENDS
${LIBS}
)
Some of the libraries in LIBS
here will link libLLVM
when LLVM_LINK_LLVM_DYLIB=ON
. This includes MLIRIR but also MLIRPDLLCodeGen
and others. TableGen binaries are explictly linked statically against LLVM.
This results in ODR violation messages when building with both ASAN and LLVM_LINK_LLVM_DYLIB=ON
:
==1842017==ERROR: AddressSanitizer: odr-violation (0x61a21d591220):
[1] size=1 'llvm::vfs::FileSystem::ID' /llvm-project/llvm/lib/Support/VirtualFileSystem.cpp in /build/bin/mlir-pdll
[2] size=1 'llvm::vfs::FileSystem::ID' /llvm-project/llvm/lib/Support/VirtualFileSystem.cpp in /build/bin/../lib/libLLVM.so.21.0git
These globals were registered at these points:
...
Looking at the dependency graph, we need to force mlir-pdll
to link all its dependencies statically. That can be done by swapping out targets that aren't explicitly declared STATIc (e.g. MLIRIR
) with object lib (obj.MLIRIR
) targets if available, However, you have to transitively resolve all the dependencies required. It looks like the set it needs is (MLIRIR
, MLIRSupport
, MLIRPDLDialect
, and some builtin op interface libraries). In some cases, object libraries are currently not built (e.g. if BUILD_SHARED_LIBS=ON
and LLVM_LINK_LLVM_DYLIB=ON
and (too be added in PR#155488) MLIR_BUILD_MLIR_DYLIB=OFF
. Therefore we would need to start explicitly requesting that object libraries be built for at least this subset of libraries.