llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.27k stars 11.68k forks source link

[flang][regression] cannot build flang utilizing low number of cores after #109874 #110425

Open pawosm-arm opened 3 days ago

pawosm-arm commented 3 days ago

It is fairly easy to build flang when doing make -j 64. However, I sometimes need to start a build on smaller machines where I need to build it doing make -j 9. A couple of days ago this became impossible due to this error:

ld.lld: error: undefined symbol: mlir::omp::OffloadModuleInterface::setIsTargetDevice(bool)
>>> referenced by CrossToolHelpers.h:180 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:180)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(setOffloadModuleInterfaceAttributes(mlir::ModuleOp&, OffloadModuleOpts))

ld.lld: error: undefined symbol: mlir::omp::OffloadModuleInterface::setIsGPU(bool)
>>> referenced by CrossToolHelpers.h:181 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:181)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(setOffloadModuleInterfaceAttributes(mlir::ModuleOp&, OffloadModuleOpts))

ld.lld: error: undefined symbol: mlir::omp::OffloadModuleInterface::setRequires(mlir::omp::ClauseRequires)
>>> referenced by CrossToolHelpers.h:183 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:183)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(setOffloadModuleInterfaceAttributes(mlir::ModuleOp&, OffloadModuleOpts))

ld.lld: error: undefined symbol: mlir::omp::OffloadModuleInterface::setFlags(unsigned int, bool, bool, bool, bool, unsigned int, bool)
>>> referenced by CrossToolHelpers.h:186 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:186)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(setOffloadModuleInterfaceAttributes(mlir::ModuleOp&, OffloadModuleOpts))

ld.lld: error: undefined symbol: mlir::omp::OffloadModuleInterface::setHostIRFilePath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
>>> referenced by CrossToolHelpers.h:191 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:191)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(setOffloadModuleInterfaceAttributes(mlir::ModuleOp&, OffloadModuleOpts))

ld.lld: error: undefined symbol: mlir::omp::OffloadModuleInterface::setTargetTriples(llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)
>>> referenced by CrossToolHelpers.h:195 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:195)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(setOffloadModuleInterfaceAttributes(mlir::ModuleOp&, OffloadModuleOpts))

ld.lld: error: undefined symbol: mlir::omp::VersionAttr::get(mlir::MLIRContext*, unsigned int)
>>> referenced by CrossToolHelpers.h:203 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:203)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(setOpenMPVersionAttribute(mlir::ModuleOp&, long))

ld.lld: error: undefined symbol: mlir::omp::VersionAttr::getVersion() const
>>> referenced by CrossToolHelpers.h:209 (~/llvm-project/flang/include/flang/Tools/CrossToolHelpers.h:209)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(getOpenMPVersionAttribute(mlir::ModuleOp, long))

ld.lld: error: undefined symbol: mlir::detail::TypeIDResolver<mlir::omp::VersionAttr, void>::id
>>> referenced by OpenMPOpsAttributes.h.inc:388 (~/build-shared-llvm-project-debug/tools/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsAttributes.h.inc:388)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(mlir::detail::TypeIDResolver<mlir::omp::VersionAttr, void>::resolveTypeID())
>>> referenced by OpenMPOpsAttributes.h.inc:388 (~/build-shared-llvm-project-debug/tools/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsAttributes.h.inc:388)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(mlir::detail::TypeIDResolver<mlir::omp::VersionAttr, void>::resolveTypeID())

ld.lld: error: undefined symbol: llvm::Triple::normalize[abi:cxx11](llvm::StringRef)
>>> referenced by Triple.h:370 (~/llvm-project/llvm/include/llvm/TargetParser/Triple.h:370)
>>>               CMakeFiles/flangPasses.dir/Pipelines.cpp.o:(llvm::Triple::normalize[abi:cxx11]() const)
collect2: error: ld returned 1 exit status
make[2]: *** [tools/flang/lib/Optimizer/Passes/CMakeFiles/flangPasses.dir/build.make:194: lib/libflangPasses.so.20.0git] Error 1

I've tracked it down to the PR #109874 - after reverting it, the error message shown above stops appearing.

tarunprabhu commented 1 day ago

@pawosm-arm

Could you send me your configure and build commands?

I tried ninja -j9 and was not able to reproduce this. I will try again with make.

pawosm-arm commented 1 day ago

Pretty much like this:

cmake .. \
-DBUILD_SHARED_LIBS=True \
-DCMAKE_BUILD_TYPE=Debug \
-DLLVM_BINUTILS_INCDIR=/usr/include \
-DLIBOMP_FORTRAN_MODULES=False \
-DLIBOMP_COPY_EXPORTS=False \
-DLIBOMP_USE_HWLOC=False \
-DLIBOMP_OMPT_SUPPORT=OFF \
-DLLVM_ENABLE_LLD=True \
-DLLVM_ENABLE_FFI=False \
-DLLVM_TARGETS_TO_BUILD="AArch64" \
-DLLVM_ENABLE_PROJECTS="llvm;clang;flang" \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;openmp" \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF

and I'm using make (namely, make -j 9), not ninja.

tarunprabhu commented 1 day ago

Thanks. I think the key is -DBUILD_SHARED_LIBS=True. I don't have that and so far it seems to be going fine with make -j9. I will try with your configuration.

Is this a consistent error or intermittent?

pawosm-arm commented 1 day ago

Yes, it is consistent unless I revert the commit from the mentioned PR

tarunprabhu commented 1 day ago

I managed to reproduce the error. Will work on a fix.