Skip to content

MLIRExecutionEngineShared doesn't build with mingw due to undefined symbols #106859

@Zentrik

Description

@Zentrik

Introduced in 631ae59. I built using mingw on 631ae59 and llvmorg-19.1.0-rc2 with LLVM_BUILD_LLVM_DYLIB.

The error is

ninja: job failed: : && /opt/bin/x86_64-w64-mingw32-libgfortran5-cxx11/x86_64-w64-mingw32-clang++ --target=x86_64-w64-mingw32 --sysroot=/opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/ -remap -D__USING_SJLJ_EXCEPTIONS__ -D__CRT__NO_INLINE -pthread -DMLIR_CAPI_ENABLE_WINDOWS_DLL_DECLSPEC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -ffunction-sections -fdata-sections -Wundef -Werror=mismatched-tags -O3 -DNDEBUG  -Wl,--gc-sections -shared -o bin/libMLIRExecutionEngineShared.dll -Wl,--out-implib,lib/libMLIRExecutionEngineShared.dll.a -Wl,--major-image-version,0,--minor-image-version,0 tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj  lib/libMLIR.dll.a  lib/libLLVM-19jl.dll.a  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && :
clang++: warning: argument unused during compilation: '-remap' [-Wunused-command-line-argument]
ld.lld: error: undefined symbol: mlir::openOutputFile(llvm::StringRef, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*)
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(mlir::SimpleObjectCache::dumpToObjectFile(llvm::StringRef))

ld.lld: error: undefined symbol: llvm::ilist_detail::SpecificNodeAccess<llvm::ilist_detail::node_options<mlir::Operation, false, false, void, false, void>>::getValuePtr(llvm::ilist_node_impl<llvm::ilist_detail::node_options<mlir::Operation, false, false, void, false, void>>*)
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(mlir::ExecutionEngine::create(mlir::Operation*, mlir::ExecutionEngineOptions const&, std::unique_ptr<llvm::TargetMachine, std::default_delete<llvm::TargetMachine>>))
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(mlir::ExecutionEngine::create(mlir::Operation*, mlir::ExecutionEngineOptions const&, std::unique_ptr<llvm::TargetMachine, std::default_delete<llvm::TargetMachine>>))
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(llvm::iterator_range<mlir::detail::op_iterator<mlir::LLVM::LLVMFuncOp, mlir::Region::OpIterator>> mlir::Region::getOps<mlir::LLVM::LLVMFuncOp>())
>>> referenced 1 more times

ld.lld: error: undefined symbol: mlir::LLVM::LLVMFuncOp::getSymName()
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(mlir::ExecutionEngine::create(mlir::Operation*, mlir::ExecutionEngineOptions const&, std::unique_ptr<llvm::TargetMachine, std::default_delete<llvm::TargetMachine>>))

ld.lld: error: undefined symbol: mlir::Region::OpIterator::operator++()
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(mlir::ExecutionEngine::create(mlir::Operation*, mlir::ExecutionEngineOptions const&, std::unique_ptr<llvm::TargetMachine, std::default_delete<llvm::TargetMachine>>))
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(llvm::iterator_range<mlir::detail::op_iterator<mlir::LLVM::LLVMFuncOp, mlir::Region::OpIterator>> mlir::Region::getOps<mlir::LLVM::LLVMFuncOp>())
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(llvm::iterator_range<mlir::detail::op_iterator<mlir::LLVM::LLVMFuncOp, mlir::Region::OpIterator>> mlir::Region::getOps<mlir::LLVM::LLVMFuncOp>())

ld.lld: error: undefined symbol: mlir::translateModuleToLLVMIR(mlir::Operation*, llvm::LLVMContext&, llvm::StringRef, bool)
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(mlir::ExecutionEngine::create(mlir::Operation*, mlir::ExecutionEngineOptions const&, std::unique_ptr<llvm::TargetMachine, std::default_delete<llvm::TargetMachine>>))

ld.lld: error: undefined symbol: mlir::Region::OpIterator::OpIterator(mlir::Region*, bool)
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(llvm::iterator_range<mlir::detail::op_iterator<mlir::LLVM::LLVMFuncOp, mlir::Region::OpIterator>> mlir::Region::getOps<mlir::LLVM::LLVMFuncOp>())
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(llvm::iterator_range<mlir::detail::op_iterator<mlir::LLVM::LLVMFuncOp, mlir::Region::OpIterator>> mlir::Region::getOps<mlir::LLVM::LLVMFuncOp>())

ld.lld: error: undefined symbol: mlir::detail::TypeIDResolver<mlir::LLVM::LLVMFuncOp, void>::id
>>> referenced by tools/mlir/lib/ExecutionEngine/CMakeFiles/MLIRExecutionEngineShared.dir/ExecutionEngine.cpp.obj:(.refptr._ZN4mlir6detail14TypeIDResolverINS_4LLVM10LLVMFuncOpEvE2idE)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Applying Zentrik@e781d06 fixes mlir::openOutputFile being undefined. Not sure if the fix is to just include some other libraries as well or something different.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions