I had an older post regarding another build issue, and was in doubt if I should bring up the old post or make a new one. I decided to make a new one, since the problem seems to be something else.
We are trying to follow the Flang development, and regularly build Flang from git sources. In the last weeks we have been unsuccessful building Flang with offloading enabled.
The way we try to build LLVM + Flang now, is:
cmake -GNinja \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX="/opt/llvm/llvm-project/install" \
-DCMAKE_CUDA_COMPILER=${CUDACXX} \
-DCMAKE_CUDA_ARCHITECTURES="89;120" \
-DLLVM_ENABLE_PROJECTS="clang;lld;flang;lldb" \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;openmp;offload;flang-rt" \
-DLLVM_TARGETS_TO_BUILD="X86;NVPTX" \
-DLLVM_ENABLE_RTTI="ON" \
-DOPENMP_ENABLE_LIBOMPTARGET="ON" \
-DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT="OpenMP" \
-DFLANG_RT_DEVICE_ARCHITECTURES="sm_89;sm_120" \
-DFLANG_RT_ENABLE_STATIC=ON \
../llvm
This fails with a linking error:
[219/225] Linking CXX shared library /opt/llvm/llvm-project/build/lib/libomptarget.so.23.0git
FAILED: /opt/llvm/llvm-project/build/lib/libomptarget.so.23.0git
: && /opt/llvm/llvm-project/build/bin/clang++ --target=x86_64-unknown-linux-gnu -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Xclang -fno-pch-timestamp -O3 -DNDEBUG -Wl,-z,defs -Wl,-z,nodelete -Wl,--gc-sections -fopenmp -fvisibility=hidden -fopenmp-cuda-mode --offload-arch=sm_89,sm_120 -foffload-lto -Xlinker --dependency-file=offload/libomptarget/CMakeFiles/omptarget.dir/link.d -shared -Wl,-soname,libomptarget.so.23.0git -o /opt/llvm/llvm-project/build/lib/libomptarget.so.23.0git offload/libomptarget/CMakeFiles/omptarget.dir/device.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/interface.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/omptarget.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/OffloadRTL.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/LegacyAPI.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/PluginManager.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/DeviceImage.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/OpenMP/API.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/OpenMP/Mapping.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/OpenMP/InteropAPI.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/OpenMP/OMPT/Callback.cpp.o offload/libomptarget/CMakeFiles/omptarget.dir/KernelLanguage/API.cpp.o -Wl,-rpath,"\$ORIGIN:/opt/llvm/llvm-project/build/runtimes/runtimes-bins/offload/libomptarget/..:/opt/llvm/llvm-project/build/runtimes/runtimes-bins/openmp/runtime/src:" openmp/runtime/src/libomp.so /opt/llvm/llvm-project/build/lib/libLLVMFrontendOpenMP.a /opt/llvm/llvm-project/build/lib/libLLVMSupport.a /opt/llvm/llvm-project/build/lib/libLLVMObject.a -Wl,--version-script=/opt/llvm/llvm-project/offload/libomptarget/exports /opt/llvm/llvm-project/build/lib/libomptarget.rtl.amdgpu.a /opt/llvm/llvm-project/build/lib/libomptarget.rtl.cuda.a /opt/llvm/llvm-project/build/lib/libomptarget.rtl.host.a -lm /opt/llvm/llvm-project/build/lib/libLLVMExtensions.a /opt/llvm/llvm-project/build/lib/libLLVMPasses.a /opt/llvm/llvm-project/build/lib/libLLVMCFGuard.a /opt/llvm/llvm-project/build/lib/libLLVMGlobalISel.a /opt/llvm/llvm-project/build/lib/libLLVMCoroutines.a /opt/llvm/llvm-project/build/lib/libLLVMHipStdPar.a /opt/llvm/llvm-project/build/lib/libLLVMIRPrinter.a /opt/llvm/llvm-project/build/lib/libLLVMNVPTXCodeGen.a /opt/llvm/llvm-project/build/lib/libLLVMipo.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendOpenMP.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendOffloading.a /opt/llvm/llvm-project/build/lib/libLLVMObjectYAML.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendAtomic.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendDirective.a /opt/llvm/llvm-project/build/lib/libLLVMInstrumentation.a /opt/llvm/llvm-project/build/lib/libLLVMLinker.a /opt/llvm/llvm-project/build/lib/libLLVMVectorize.a /opt/llvm/llvm-project/build/lib/libLLVMSandboxIR.a /opt/llvm/llvm-project/build/lib/libLLVMSelectionDAG.a /opt/llvm/llvm-project/build/lib/libLLVMAsmPrinter.a /opt/llvm/llvm-project/build/lib/libLLVMCodeGen.a /opt/llvm/llvm-project/build/lib/libLLVMScalarOpts.a /opt/llvm/llvm-project/build/lib/libLLVMAggressiveInstCombine.a /opt/llvm/llvm-project/build/lib/libLLVMInstCombine.a /opt/llvm/llvm-project/build/lib/libLLVMCGData.a /opt/llvm/llvm-project/build/lib/libLLVMBitWriter.a /opt/llvm/llvm-project/build/lib/libLLVMObjCARCOpts.a /opt/llvm/llvm-project/build/lib/libLLVMTransformUtils.a /opt/llvm/llvm-project/build/lib/libLLVMTarget.a /opt/llvm/llvm-project/build/lib/libLLVMAnalysis.a /opt/llvm/llvm-project/build/lib/libLLVMProfileData.a /opt/llvm/llvm-project/build/lib/libLLVMSymbolize.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoGSYM.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoPDB.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoMSF.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoBTF.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendHLSL.a /opt/llvm/llvm-project/build/lib/libLLVMCodeGenTypes.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoDWARF.a /opt/llvm/llvm-project/build/lib/libLLVMObject.a /opt/llvm/llvm-project/build/lib/libLLVMIRReader.a /opt/llvm/llvm-project/build/lib/libLLVMBitReader.a /opt/llvm/llvm-project/build/lib/libLLVMAsmParser.a /opt/llvm/llvm-project/build/lib/libLLVMCore.a /opt/llvm/llvm-project/build/lib/libLLVMRemarks.a /opt/llvm/llvm-project/build/lib/libLLVMBitstreamReader.a /opt/llvm/llvm-project/build/lib/libLLVMMCParser.a /opt/llvm/llvm-project/build/lib/libLLVMTextAPI.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoCodeView.a /opt/llvm/llvm-project/build/lib/libLLVMNVPTXDesc.a /opt/llvm/llvm-project/build/lib/libLLVMNVPTXInfo.a /opt/llvm/llvm-project/build/lib/libLLVMMC.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoDWARFLowLevel.a /opt/llvm/llvm-project/build/lib/libLLVMBinaryFormat.a /opt/llvm/llvm-project/build/lib/libLLVMTargetParser.a /opt/llvm/llvm-project/build/lib/libLLVMSupport.a /opt/llvm/llvm-project/build/lib/libLLVMDemangle.a -lrt -ldl -lm /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libzstd.so /opt/llvm/llvm-project/build/lib/clang/23/lib/x86_64-unknown-linux-gnu/libflang_rt.runtime.a /usr/lib/x86_64-linux-gnu/libffi.a && :
/opt/llvm/llvm-project/build/bin/clang-linker-wrapper: error: unable to find library -lomp
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
[220/225] Linking CXX shared library /opt/llvm/llvm-project/build/lib/libLLVMOffload.so.23.0git
FAILED: /opt/llvm/llvm-project/build/lib/libLLVMOffload.so.23.0git
: && /opt/llvm/llvm-project/build/bin/clang++ --target=x86_64-unknown-linux-gnu -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Xclang -fno-pch-timestamp -O3 -DNDEBUG -Wl,-z,defs -Wl,-z,nodelete -Wl,-rpath-link,/opt/llvm/llvm-project/build/./lib -Wl,--gc-sections -fopenmp -fvisibility=hidden -fopenmp-cuda-mode --offload-arch=sm_89,sm_120 -foffload-lto -Xlinker --dependency-file=offload/liboffload/CMakeFiles/LLVMOffload.dir/link.d -shared -Wl,-soname,libLLVMOffload.so.23.0git -o /opt/llvm/llvm-project/build/lib/libLLVMOffload.so.23.0git offload/liboffload/CMakeFiles/LLVMOffload.dir/src/OffloadLib.cpp.o offload/liboffload/CMakeFiles/LLVMOffload.dir/src/OffloadImpl.cpp.o -Wl,-rpath,"\$ORIGIN:/opt/llvm/llvm-project/build/runtimes/runtimes-bins/offload/liboffload/..:" /opt/llvm/llvm-project/build/lib/libLLVMFrontendOpenMP.a /opt/llvm/llvm-project/build/lib/libLLVMSupport.a /opt/llvm/llvm-project/build/lib/libomptarget.rtl.amdgpu.a /opt/llvm/llvm-project/build/lib/libomptarget.rtl.cuda.a /opt/llvm/llvm-project/build/lib/libomptarget.rtl.host.a -Wl,--version-script=/opt/llvm/llvm-project/offload/liboffload/exports /opt/llvm/llvm-project/build/lib/libLLVMExtensions.a /opt/llvm/llvm-project/build/lib/libLLVMPasses.a /opt/llvm/llvm-project/build/lib/libLLVMCFGuard.a /opt/llvm/llvm-project/build/lib/libLLVMGlobalISel.a /opt/llvm/llvm-project/build/lib/libLLVMCoroutines.a /opt/llvm/llvm-project/build/lib/libLLVMHipStdPar.a /opt/llvm/llvm-project/build/lib/libLLVMIRPrinter.a /opt/llvm/llvm-project/build/lib/libLLVMNVPTXCodeGen.a /opt/llvm/llvm-project/build/lib/libLLVMipo.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendOpenMP.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendOffloading.a /opt/llvm/llvm-project/build/lib/libLLVMObjectYAML.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendAtomic.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendDirective.a /opt/llvm/llvm-project/build/lib/libLLVMInstrumentation.a /opt/llvm/llvm-project/build/lib/libLLVMLinker.a /opt/llvm/llvm-project/build/lib/libLLVMVectorize.a /opt/llvm/llvm-project/build/lib/libLLVMSandboxIR.a /opt/llvm/llvm-project/build/lib/libLLVMSelectionDAG.a /opt/llvm/llvm-project/build/lib/libLLVMAsmPrinter.a /opt/llvm/llvm-project/build/lib/libLLVMCodeGen.a /opt/llvm/llvm-project/build/lib/libLLVMScalarOpts.a /opt/llvm/llvm-project/build/lib/libLLVMAggressiveInstCombine.a /opt/llvm/llvm-project/build/lib/libLLVMInstCombine.a /opt/llvm/llvm-project/build/lib/libLLVMCGData.a /opt/llvm/llvm-project/build/lib/libLLVMBitWriter.a /opt/llvm/llvm-project/build/lib/libLLVMObjCARCOpts.a /opt/llvm/llvm-project/build/lib/libLLVMTransformUtils.a /opt/llvm/llvm-project/build/lib/libLLVMTarget.a /opt/llvm/llvm-project/build/lib/libLLVMAnalysis.a /opt/llvm/llvm-project/build/lib/libLLVMProfileData.a /opt/llvm/llvm-project/build/lib/libLLVMSymbolize.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoGSYM.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoPDB.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoMSF.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoBTF.a /opt/llvm/llvm-project/build/lib/libLLVMFrontendHLSL.a /opt/llvm/llvm-project/build/lib/libLLVMCodeGenTypes.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoDWARF.a /opt/llvm/llvm-project/build/lib/libLLVMObject.a /opt/llvm/llvm-project/build/lib/libLLVMIRReader.a /opt/llvm/llvm-project/build/lib/libLLVMBitReader.a /opt/llvm/llvm-project/build/lib/libLLVMAsmParser.a /opt/llvm/llvm-project/build/lib/libLLVMCore.a /opt/llvm/llvm-project/build/lib/libLLVMRemarks.a /opt/llvm/llvm-project/build/lib/libLLVMBitstreamReader.a /opt/llvm/llvm-project/build/lib/libLLVMMCParser.a /opt/llvm/llvm-project/build/lib/libLLVMTextAPI.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoCodeView.a /opt/llvm/llvm-project/build/lib/libLLVMNVPTXDesc.a /opt/llvm/llvm-project/build/lib/libLLVMNVPTXInfo.a /opt/llvm/llvm-project/build/lib/libLLVMMC.a /opt/llvm/llvm-project/build/lib/libLLVMDebugInfoDWARFLowLevel.a /opt/llvm/llvm-project/build/lib/libLLVMBinaryFormat.a /opt/llvm/llvm-project/build/lib/libLLVMTargetParser.a /opt/llvm/llvm-project/build/lib/libLLVMSupport.a /opt/llvm/llvm-project/build/lib/libLLVMDemangle.a -lrt -ldl -lm /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libzstd.so /opt/llvm/llvm-project/build/lib/clang/23/lib/x86_64-unknown-linux-gnu/libflang_rt.runtime.a /usr/lib/x86_64-linux-gnu/libffi.a && :
/opt/llvm/llvm-project/build/bin/clang-linker-wrapper: error: unable to find library -lomp
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
FAILED: runtimes/runtimes-stamps/runtimes-build /opt/llvm/llvm-project/build/runtimes/runtimes-stamps/runtimes-build
cd /opt/llvm/llvm-project/build/runtimes/runtimes-bins && /opt/llvm/cmake-3.31.10-linux-x86_64/bin/cmake --build .
ninja: build stopped: subcommand failed.
The build failure seems to go away if we remove the arguments -DFLANG_RT_. However, dropping these gives me a compiler that gives the following error when enabling OpenMP:
/opt/llvm/llvm-project/install-step2/bin/clang-nvlink-wrapper: error: unable to find library -lompdevice
clang: error: nvlink command failed with exit code 1 (use -v to see invocation)
/opt/llvm/llvm-project/install-step2/bin/clang-linker-wrapper: error: 'clang' failed
flang-23: error: linker command failed with exit code 1 (use -v to see invocation)
So the -DFLANG_RT_ seems needed to produce the ompdevice library needed to actually do offloading.
Then we tried to manually do a 2-stage build, first building a host-compiler, with everything enabled except offloading, then using this compiler building an offloading-capable flang, but this got us stuch in the same -lomp error as before.
Does anyone have a “recipe” for building an offloading capable compiler, or any idea on what we do wrong?