-
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.