Polygeist icon indicating copy to clipboard operation
Polygeist copied to clipboard

Undefined reference to `cc1_main` during linking time

Open agostini01 opened this issue 3 years ago • 6 comments

Hi,

First of all, super cool work. I watched your presentation at PACT and had to try this project out. But I am running into an issue during compilation.

Error:

ninja check-mlir-clang
[1/2] Linking CXX executable mlir-clang/mlir-clang
FAILED: mlir-clang/mlir-clang
: && /usr/bin/clang++-10 -fPIC -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 -Wstring-conversion -Wmisleading-indentation -fdiagnostics-color -g -Wl,-rpath-link, mlir-clang/CMakeFiles/mlir-clang.dir/__/llvm-project/clang/tools/driver/cc1_main.cpp.o mlir-clang/CMakeFiles/mlir-clang.dir/__/llvm-project/clang/tools/driver/cc1as_main.cpp.o mlir-clang/CMakeFiles/mlir-clang.dir/__/llvm-project/clang/tools/driver/cc1gen_reproducer_main.cpp.o mlir-clang/CMakeFiles/mlir-clang.dir/mlir-clang.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/utils.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/AffineUtils.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/pragmaHandler.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/ValueCategory.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/CGStmt.cc.o -o mlir-clang/mlir-clang -L/working_dir/llvm-project/build/./lib -Wl,-rpath,"\$ORIGIN/../lib:/working_dir/llvm-project/build/./lib"  ../llvm-project/build/lib/libLLVMX86CodeGen.a  ../llvm-project/build/lib/libLLVMX86AsmParser.a  ../llvm-project/build/lib/libLLVMX86Desc.a  ../llvm-project/build/lib/libLLVMX86Disassembler.a  ../llvm-project/build/lib/libLLVMX86Info.a  ../llvm-project/build/lib/libLLVMAnalysis.a  ../llvm-project/build/lib/libLLVMCodeGen.a  ../llvm-project/build/lib/libLLVMCore.a  ../llvm-project/build/lib/libLLVMAggressiveInstCombine.a  ../llvm-project/build/lib/libLLVMInstCombine.a  ../llvm-project/build/lib/libLLVMInstrumentation.a  ../llvm-project/build/lib/libLLVMMC.a  ../llvm-project/build/lib/libLLVMMCParser.a  ../llvm-project/build/lib/libLLVMObjCARCOpts.a  ../llvm-project/build/lib/libLLVMOption.a  ../llvm-project/build/lib/libLLVMScalarOpts.a  ../llvm-project/build/lib/libLLVMSupport.a  ../llvm-project/build/lib/libLLVMTransformUtils.a  ../llvm-project/build/lib/libLLVMVectorize.a  -lpthread  ../llvm-project/build/lib/libMLIRSCFTransforms.a  lib/polygeist/libMLIRPolygeist.a  ../llvm-project/build/lib/libMLIRSupport.a  ../llvm-project/build/lib/libMLIRIR.a  ../llvm-project/build/lib/libMLIRAnalysis.a  ../llvm-project/build/lib/libMLIRLLVMIR.a  ../llvm-project/build/lib/libMLIRNVVMIR.a  ../llvm-project/build/lib/libMLIROpenMP.a  ../llvm-project/build/lib/libMLIRGPUOps.a  ../llvm-project/build/lib/libMLIRTransforms.a  ../llvm-project/build/lib/libMLIRSCFToStandard.a  ../llvm-project/build/lib/libMLIRStandardToLLVM.a  ../llvm-project/build/lib/libMLIRAffineTransforms.a  ../llvm-project/build/lib/libMLIRAffineToStandard.a  ../llvm-project/build/lib/libMLIRMathToLLVM.a  ../llvm-project/build/lib/libMLIRTargetLLVMIRImport.a  lib/polygeist/Passes/libMLIRPolygeistTransforms.a  ../llvm-project/build/lib/libMLIRLLVMToLLVMIRTranslation.a  ../llvm-project/build/lib/libMLIRSCFToOpenMP.a  ../llvm-project/build/lib/libMLIROpenMPToLLVM.a  ../llvm-project/build/lib/libMLIROpenMPToLLVMIRTranslation.a  ../llvm-project/build/lib/libclangAST.a  ../llvm-project/build/lib/libclangBasic.a  ../llvm-project/build/lib/libclangCodeGen.a  ../llvm-project/build/lib/libclangDriver.a  ../llvm-project/build/lib/libclangFrontend.a  ../llvm-project/build/lib/libclangFrontendTool.a  ../llvm-project/build/lib/libclangLex.a  ../llvm-project/build/lib/libclangSerialization.a  ../llvm-project/build/lib/libLLVMAsmPrinter.a  ../llvm-project/build/lib/libLLVMDebugInfoDWARF.a  ../llvm-project/build/lib/libLLVMDebugInfoMSF.a  ../llvm-project/build/lib/libLLVMGlobalISel.a  ../llvm-project/build/lib/libLLVMSelectionDAG.a  ../llvm-project/build/lib/libLLVMCFGuard.a  ../llvm-project/build/lib/libLLVMMCDisassembler.a  ../llvm-project/build/lib/libMLIRVectorToLLVM.a  ../llvm-project/build/lib/libMLIRArmNeon.a  ../llvm-project/build/lib/libMLIRArmSVETransforms.a  ../llvm-project/build/lib/libMLIRArmSVE.a  ../llvm-project/build/lib/libMLIRAMXTransforms.a  ../llvm-project/build/lib/libMLIRAMX.a  ../llvm-project/build/lib/libMLIRX86VectorTransforms.a  ../llvm-project/build/lib/libMLIRX86Vector.a  lib/polygeist/libMLIRPolygeist.a  ../llvm-project/build/lib/libMLIRNVVMIR.a  ../llvm-project/build/lib/libMLIRGPUOps.a  ../llvm-project/build/lib/libMLIRDLTI.a  ../llvm-project/build/lib/libMLIRSCFToStandard.a  ../llvm-project/build/lib/libMLIRStandardOpsTransforms.a  ../llvm-project/build/lib/libMLIRArithmeticTransforms.a  ../llvm-project/build/lib/libMLIRStandardToLLVM.a  ../llvm-project/build/lib/libMLIRArithmeticToLLVM.a  ../llvm-project/build/lib/libMLIRMemRefToLLVM.a  ../llvm-project/build/lib/libMLIRLLVMCommonConversion.a  ../llvm-project/build/lib/libMLIRTransforms.a  ../llvm-project/build/lib/libMLIRCopyOpInterface.a  ../llvm-project/build/lib/libMLIRVector.a  ../llvm-project/build/lib/libMLIRAffineUtils.a  ../llvm-project/build/lib/libMLIRTransformUtils.a  ../llvm-project/build/lib/libMLIRRewrite.a  ../llvm-project/build/lib/libMLIRPDLToPDLInterp.a  ../llvm-project/build/lib/libMLIRPDLInterp.a  ../llvm-project/build/lib/libMLIRPDL.a  ../llvm-project/build/lib/libMLIRLoopAnalysis.a  ../llvm-project/build/lib/libMLIRPresburger.a  ../llvm-project/build/lib/libMLIRLinalg.a
 ../llvm-project/build/lib/libMLIRAffine.a  ../llvm-project/build/lib/libMLIRSCF.a  ../llvm-project/build/lib/libMLIRMemRef.a  ../llvm-project/build/lib/libMLIRMemRefUtils.a  ../llvm-project/build/lib/libMLIRLoopLikeInterface.a  ../llvm-project/build/lib/libMLIRTensor.a  ../llvm-project/build/lib/libMLIRStandard.a  ../llvm-project/build/lib/libMLIRArithmetic.a  ../llvm-project/build/lib/libMLIRVectorInterfaces.a  ../llvm-project/build/lib/libMLIRCastInterfaces.a  ../llvm-project/build/lib/libMLIRMath.a  ../llvm-project/build/lib/libMLIRDialect.a  ../llvm-project/build/lib/libMLIRDialectUtils.a  ../llvm-project/build/lib/libMLIRTilingInterface.a
../llvm-project/build/lib/libMLIROpenMP.a  ../llvm-project/build/lib/libMLIRTargetLLVMIRExport.a  ../llvm-project/build/lib/libMLIRTranslation.a  ../llvm-project/build/lib/libMLIRParser.a  ../llvm-project/build/lib/libMLIRLLVMIRTransforms.a  ../llvm-project/build/lib/libMLIRLLVMIR.a  ../llvm-project/build/lib/libMLIRPass.a  ../llvm-project/build/lib/libMLIRAnalysis.a  ../llvm-project/build/lib/libMLIRCallInterfaces.a  ../llvm-project/build/lib/libMLIRControlFlowInterfaces.a  ../llvm-project/build/lib/libMLIRDataLayoutInterfaces.a  ../llvm-project/build/lib/libMLIRInferTypeOpInterface.a  ../llvm-project/build/lib/libMLIRSideEffectInterfaces.a  ../llvm-project/build/lib/libMLIRViewLikeInterface.a  ../llvm-project/build/lib/libMLIRIR.a  ../llvm-project/build/lib/libMLIRSupport.a  ../llvm-project/build/lib/libclangCodeGen.a  ../llvm-project/build/lib/libLLVMCoverage.a  ../llvm-project/build/lib/libLLVMLTO.a  ../llvm-project/build/lib/libLLVMCodeGen.a  ../llvm-project/build/lib/libLLVMExtensions.a  ../llvm-project/build/lib/libLLVMPasses.a  ../llvm-project/build/lib/libLLVMObjCARCOpts.a  ../llvm-project/build/lib/libLLVMTarget.a  ../llvm-project/build/lib/libLLVMCoroutines.a  ../llvm-project/build/lib/libLLVMipo.a  ../llvm-project/build/lib/libLLVMInstrumentation.a  ../llvm-project/build/lib/libLLVMVectorize.a  ../llvm-project/build/lib/libLLVMBitWriter.a  ../llvm-project/build/lib/libLLVMIRReader.a  ../llvm-project/build/lib/libLLVMAsmParser.a  ../llvm-project/build/lib/libLLVMLinker.a  ../llvm-project/build/lib/libclangRewriteFrontend.a  ../llvm-project/build/lib/libclangARCMigrate.a  ../llvm-project/build/lib/libclangStaticAnalyzerFrontend.a  ../llvm-project/build/lib/libclangStaticAnalyzerCheckers.a  ../llvm-project/build/lib/libclangStaticAnalyzerCore.a  ../llvm-project/build/lib/libclangCrossTU.a  ../llvm-project/build/lib/libclangIndex.a  ../llvm-project/build/lib/libclangFrontend.a  ../llvm-project/build/lib/libclangDriver.a
 ../llvm-project/build/lib/libLLVMOption.a  ../llvm-project/build/lib/libclangParse.a  ../llvm-project/build/lib/libclangSerialization.a  ../llvm-project/build/lib/libclangSema.a  ../llvm-project/build/lib/libclangAnalysis.a  ../llvm-project/build/lib/libclangASTMatchers.a  ../llvm-project/build/lib/libclangEdit.a  ../llvm-project/build/lib/libclangAST.a  ../llvm-project/build/lib/libLLVMFrontendOpenMP.a  ../llvm-project/build/lib/libLLVMScalarOpts.a  ../llvm-project/build/lib/libLLVMAggressiveInstCombine.a  ../llvm-project/build/lib/libLLVMInstCombine.a  ../llvm-project/build/lib/libLLVMTransformUtils.a  ../llvm-project/build/lib/libLLVMAnalysis.a  ../llvm-project/build/lib/libLLVMProfileData.a  ../llvm-project/build/lib/libLLVMObject.a  ../llvm-project/build/lib/libLLVMMCParser.a  ../llvm-project/build/lib/libLLVMMC.a  ../llvm-project/build/lib/libLLVMDebugInfoCodeView.a  ../llvm-project/build/lib/libLLVMBitReader.a  ../llvm-project/build/lib/libLLVMTextAPI.a  ../llvm-project/build/lib/libLLVMCore.a  ../llvm-project/build/lib/libLLVMBinaryFormat.a  ../llvm-project/build/lib/libLLVMRemarks.a  ../llvm-project/build/lib/libLLVMBitstreamReader.a  ../llvm-project/build/lib/libclangFormat.a  ../llvm-project/build/lib/libclangToolingInclusions.a  ../llvm-project/build/lib/libclangToolingCore.a  ../llvm-project/build/lib/libclangRewrite.a  ../llvm-project/build/lib/libclangLex.a  ../llvm-project/build/lib/libclangBasic.a  ../llvm-project/build/lib/libLLVMSupport.a  -lrt  -ldl  -lpthread  -lm  /usr/lib/x86_64-linux-gnu/libz.so  /usr/lib/x86_64-linux-gnu/libtinfo.so  ../llvm-project/build/lib/libLLVMDemangle.a && :
/usr/bin/ld: mlir-clang/CMakeFiles/mlir-clang.dir/mlir-clang.cc.o: in function `ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)':
/working_dir/build/../mlir-clang/mlir-clang.cc:182: undefined reference to `cc1_main(llvm::ArrayRef<char const*>, char const*, void*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

When?

While following the Readme instructions for option 1, building llvm and polygeist code with two cmake commands.

System:

I have a build image clang-10, gcc-9, cmake, ninja installed. I used clang-10 to compile llvm without problems, but it fails with the error above during the final linking steps of ninja check-mlir-clang

Questions?

External cc1_main seem to be included from the llvm-project. Maybe there is a library inclusion missing in the mlir-clang's CMakeLists file during polygeist compilation? Or maybe there is something missing in my system.

Have you seen this error before?

agostini01 avatar Oct 21 '21 05:10 agostini01

Interesting, do you mind pasting the output of your cmake (on a new build).

Also your operating system/etc.

wsmoses avatar Oct 21 '21 16:10 wsmoses

For sure. Here are the outputs after removing and re-creating polygeist build folder and executing the readme commands:

cmake -G Ninja ..   -DMLIR_DIR=$PWD/../llvm-project/build/lib/cmake/mlir   -DCLANG_DIR=$PWD/../llvm-project/build/lib/cmake/clang   -DLLVM_TARGETS_TO_BUILD="host"   -DLLVM_ENABLE_ASSERTIONS=ON   -DCMAKE_BUILD_TYPE=DEBUG
-- The CXX compiler identification is Clang 10.0.0
-- The C compiler identification is Clang 10.0.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang++-10 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/clang-10 - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Searching for MLIRConfig.cmake in: /working_dir/build/../llvm-project/build/lib/cmake/mlir
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
-- Searching for ClangConfig.cmake in: /working_dir/build/../llvm-project/build/lib/cmake/clang
-- Using MLIRConfig.cmake in: /working_dir/build/../llvm-project/build/lib/cmake/mlir
-- Using LLVMConfig.cmake in: /working_dir/llvm-project/build/lib/cmake/llvm
-- Using ClangConfig.cmake in: /working_dir/build/../llvm-project/build/lib/cmake/clang
-- Linker detection: GNU ld
-- Performing Test LLVM_LIBSTDCXX_MIN
-- Performing Test LLVM_LIBSTDCXX_MIN - Success
-- Performing Test LLVM_LIBSTDCXX_SOFT_ERROR
-- Performing Test LLVM_LIBSTDCXX_SOFT_ERROR - Success
-- Performing Test C_SUPPORTS_FPIC
-- Performing Test C_SUPPORTS_FPIC - Success
-- Performing Test CXX_SUPPORTS_FPIC
-- Performing Test CXX_SUPPORTS_FPIC - Success
-- Building with -fPIC
-- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG
-- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG - Success
-- Performing Test C_SUPPORTS_WERROR_DATE_TIME
-- Performing Test C_SUPPORTS_WERROR_DATE_TIME - Success
-- Performing Test CXX_SUPPORTS_WERROR_DATE_TIME
-- Performing Test CXX_SUPPORTS_WERROR_DATE_TIME - Success
-- Performing Test C_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW
-- Performing Test C_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW - Success
-- Performing Test CXX_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW
-- Performing Test CXX_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW - Success
-- Performing Test CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG
-- Performing Test CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG - Success
-- Performing Test C_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG
-- Performing Test C_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG - Success
-- Performing Test CXX_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG
-- Performing Test CXX_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG - Success
-- Performing Test C_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG
-- Performing Test C_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG - Success
-- Performing Test CXX_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG
-- Performing Test CXX_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG - Success
-- Performing Test CXX_SUPPORTS_CLASS_MEMACCESS_FLAG
-- Performing Test CXX_SUPPORTS_CLASS_MEMACCESS_FLAG - Failed
-- Performing Test CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG
-- Performing Test CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG - Success
-- Performing Test CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR
-- Performing Test CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR - Success
-- Performing Test CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG
-- Performing Test CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG - Failed
-- Performing Test C_WCOMMENT_ALLOWS_LINE_WRAP
-- Performing Test C_WCOMMENT_ALLOWS_LINE_WRAP - Success
-- Performing Test C_SUPPORTS_STRING_CONVERSION_FLAG
-- Performing Test C_SUPPORTS_STRING_CONVERSION_FLAG - Success
-- Performing Test CXX_SUPPORTS_STRING_CONVERSION_FLAG
-- Performing Test CXX_SUPPORTS_STRING_CONVERSION_FLAG - Success
-- Performing Test C_SUPPORTS_MISLEADING_INDENTATION_FLAG
-- Performing Test C_SUPPORTS_MISLEADING_INDENTATION_FLAG - Success
-- Performing Test CXX_SUPPORTS_MISLEADING_INDENTATION_FLAG
-- Performing Test CXX_SUPPORTS_MISLEADING_INDENTATION_FLAG - Success
-- Performing Test LINKER_SUPPORTS_COLOR_DIAGNOSTICS
-- Performing Test LINKER_SUPPORTS_COLOR_DIAGNOSTICS - Failed
-- Looking for os_signpost_interval_begin
-- Looking for os_signpost_interval_begin - not found
-- Configuring done
-- Generating done
-- Build files have been written to: /working_dir/build
# Completes ok!
ninja 
[15/22] Building CXX object lib/polygeist/Passes/CMakeFiles/obj.MLIRPolygeistTransforms.dir/CanonicalizeFor.cpp.o
../lib/polygeist/Passes/CanonicalizeFor.cpp:1054:22: warning: unused variable 'i1Ty' [-Wunused-variable]
                auto i1Ty = rewriter.getIntegerType(1);
                     ^
1 warning generated.
[18/22] Building CXX object lib/polygeist/Passes/CMakeFiles/obj.MLIRPolygeistTransforms.dir/ParallelLower.cpp.o
../lib/polygeist/Passes/ParallelLower.cpp:361:14: warning: unused variable 'i1' [-Wunused-variable]
        auto i1 = bz.getI1Type();
             ^
1 warning generated.
[21/22] Building CXX object lib/polygeist/Passes/CMakeFiles/obj.MLIRPolygeistTransforms.dir/LoopRestructure.cpp.o
../lib/polygeist/Passes/LoopRestructure.cpp:104:27: warning: cast from 'const Wrapper *' to 'mlir::Block *' drops const qualifier [-Wcast-qual]
    Region *R = ((Block *)(this))->getParent();
                          ^
../lib/polygeist/Passes/LoopRestructure.cpp:107:53: warning: cast from 'const Wrapper *' to 'mlir::Block *' drops const qualifier [-Wcast-qual]
  mlir::Block &operator*() const { return *(Block *)(this); }
                                                    ^
../lib/polygeist/Passes/LoopRestructure.cpp:108:53: warning: cast from 'const Wrapper *' to 'mlir::Block *' drops const qualifier [-Wcast-qual]
  mlir::Block *operator->() const { return (Block *)(this); }
                                                    ^
3 warnings generated.
[22/22] Linking CXX static library lib/polygeist/Passes/libMLIRPolygeistTransforms.a
# This one fails
ninja check-mlir-clang
[9/11] Building CXX object mlir-clang/CMakeFiles/mlir-clang.dir/mlir-clang.cc.o
../mlir-clang/mlir-clang.cc:334:30: warning: ISO C++11 does not allow conversion from string literal to 'llvm::SmallVectorTemplateBase<char *, true>::ValueParamT' (aka 'char *') [-Wwritable-strings]
          MLIRArgs.push_back("-D");
                             ^
../mlir-clang/mlir-clang.cc:337:30: warning: ISO C++11 does not allow conversion from string literal to 'llvm::SmallVectorTemplateBase<char *, true>::ValueParamT' (aka 'char *') [-Wwritable-strings]
          MLIRArgs.push_back("-I");
                             ^
2 warnings generated.
[10/11] Linking CXX executable mlir-clang/mlir-clang
FAILED: mlir-clang/mlir-clang 
: && /usr/bin/clang++-10 -fPIC -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 -Wstring-conversion -Wmisleading-indentation -fdiagnostics-color -g -Wl,-rpath-link, mlir-clang/CMakeFiles/mlir-clang.dir/__/llvm-project/clang/tools/driver/cc1_main.cpp.o mlir-clang/CMakeFiles/mlir-clang.dir/__/llvm-project/clang/tools/driver/cc1as_main.cpp.o mlir-clang/CMakeFiles/mlir-clang.dir/__/llvm-project/clang/tools/driver/cc1gen_reproducer_main.cpp.o mlir-clang/CMakeFiles/mlir-clang.dir/mlir-clang.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/utils.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/AffineUtils.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/pragmaHandler.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/ValueCategory.cc.o mlir-clang/CMakeFiles/mlir-clang.dir/Lib/CGStmt.cc.o -o mlir-clang/mlir-clang -L/working_dir/llvm-project/build/./lib -Wl,-rpath,"\$ORIGIN/../lib:/working_dir/llvm-project/build/./lib"  ../llvm-project/build/lib/libLLVMX86CodeGen.a  ../llvm-project/build/lib/libLLVMX86AsmParser.a  ../llvm-project/build/lib/libLLVMX86Desc.a  ../llvm-project/build/lib/libLLVMX86Disassembler.a  ../llvm-project/build/lib/libLLVMX86Info.a  ../llvm-project/build/lib/libLLVMAnalysis.a  ../llvm-project/build/lib/libLLVMCodeGen.a  ../llvm-project/build/lib/libLLVMCore.a  ../llvm-project/build/lib/libLLVMAggressiveInstCombine.a  ../llvm-project/build/lib/libLLVMInstCombine.a  ../llvm-project/build/lib/libLLVMInstrumentation.a  ../llvm-project/build/lib/libLLVMMC.a  ../llvm-project/build/lib/libLLVMMCParser.a  ../llvm-project/build/lib/libLLVMObjCARCOpts.a  ../llvm-project/build/lib/libLLVMOption.a  ../llvm-project/build/lib/libLLVMScalarOpts.a  ../llvm-project/build/lib/libLLVMSupport.a  ../llvm-project/build/lib/libLLVMTransformUtils.a  ../llvm-project/build/lib/libLLVMVectorize.a  -lpthread  ../llvm-project/build/lib/libMLIRSCFTransforms.a  lib/polygeist/libMLIRPolygeist.a  ../llvm-project/build/lib/libMLIRSupport.a  ../llvm-project/build/lib/libMLIRIR.a  ../llvm-project/build/lib/libMLIRAnalysis.a  ../llvm-project/build/lib/libMLIRLLVMIR.a  ../llvm-project/build/lib/libMLIRNVVMIR.a  ../llvm-project/build/lib/libMLIROpenMP.a  ../llvm-project/build/lib/libMLIRGPUOps.a  ../llvm-project/build/lib/libMLIRTransforms.a  ../llvm-project/build/lib/libMLIRSCFToStandard.a  ../llvm-project/build/lib/libMLIRStandardToLLVM.a  ../llvm-project/build/lib/libMLIRAffineTransforms.a  ../llvm-project/build/lib/libMLIRAffineToStandard.a  ../llvm-project/build/lib/libMLIRMathToLLVM.a  ../llvm-project/build/lib/libMLIRTargetLLVMIRImport.a  lib/polygeist/Passes/libMLIRPolygeistTransforms.a  ../llvm-project/build/lib/libMLIRLLVMToLLVMIRTranslation.a  ../llvm-project/build/lib/libMLIRSCFToOpenMP.a  ../llvm-project/build/lib/libMLIROpenMPToLLVM.a  ../llvm-project/build/lib/libMLIROpenMPToLLVMIRTranslation.a  ../llvm-project/build/lib/libclangAST.a  ../llvm-project/build/lib/libclangBasic.a  ../llvm-project/build/lib/libclangCodeGen.a  ../llvm-project/build/lib/libclangDriver.a  ../llvm-project/build/lib/libclangFrontend.a  ../llvm-project/build/lib/libclangFrontendTool.a  ../llvm-project/build/lib/libclangLex.a  ../llvm-project/build/lib/libclangSerialization.a  ../llvm-project/build/lib/libLLVMAsmPrinter.a  ../llvm-project/build/lib/libLLVMDebugInfoDWARF.a  ../llvm-project/build/lib/libLLVMDebugInfoMSF.a  ../llvm-project/build/lib/libLLVMGlobalISel.a  ../llvm-project/build/lib/libLLVMSelectionDAG.a  ../llvm-project/build/lib/libLLVMCFGuard.a  ../llvm-project/build/lib/libLLVMMCDisassembler.a  ../llvm-project/build/lib/libMLIRVectorToLLVM.a  ../llvm-project/build/lib/libMLIRArmNeon.a  ../llvm-project/build/lib/libMLIRArmSVETransforms.a  ../llvm-project/build/lib/libMLIRArmSVE.a  ../llvm-project/build/lib/libMLIRAMXTransforms.a  ../llvm-project/build/lib/libMLIRAMX.a  ../llvm-project/build/lib/libMLIRX86VectorTransforms.a  ../llvm-project/build/lib/libMLIRX86Vector.a  lib/polygeist/libMLIRPolygeist.a  ../llvm-project/build/lib/libMLIRNVVMIR.a  ../llvm-project/build/lib/libMLIRGPUOps.a  ../llvm-project/build/lib/libMLIRDLTI.a  ../llvm-project/build/lib/libMLIRSCFToStandard.a  ../llvm-project/build/lib/libMLIRStandardOpsTransforms.a  ../llvm-project/build/lib/libMLIRArithmeticTransforms.a  ../llvm-project/build/lib/libMLIRStandardToLLVM.a  ../llvm-project/build/lib/libMLIRArithmeticToLLVM.a  ../llvm-project/build/lib/libMLIRMemRefToLLVM.a  ../llvm-project/build/lib/libMLIRLLVMCommonConversion.a  ../llvm-project/build/lib/libMLIRTransforms.a  ../llvm-project/build/lib/libMLIRCopyOpInterface.a  ../llvm-project/build/lib/libMLIRVector.a  ../llvm-project/build/lib/libMLIRAffineUtils.a  ../llvm-project/build/lib/libMLIRTransformUtils.a  ../llvm-project/build/lib/libMLIRRewrite.a  ../llvm-project/build/lib/libMLIRPDLToPDLInterp.a  ../llvm-project/build/lib/libMLIRPDLInterp.a  ../llvm-project/build/lib/libMLIRPDL.a  ../llvm-project/build/lib/libMLIRLoopAnalysis.a  ../llvm-project/build/lib/libMLIRPresburger.a  ../llvm-project/build/lib/libMLIRLinalg.a  ../llvm-project/build/lib/libMLIRAffine.a  ../llvm-project/build/lib/libMLIRSCF.a  ../llvm-project/build/lib/libMLIRMemRef.a  ../llvm-project/build/lib/libMLIRMemRefUtils.a  ../llvm-project/build/lib/libMLIRLoopLikeInterface.a  ../llvm-project/build/lib/libMLIRTensor.a  ../llvm-project/build/lib/libMLIRStandard.a  ../llvm-project/build/lib/libMLIRArithmetic.a  ../llvm-project/build/lib/libMLIRVectorInterfaces.a  ../llvm-project/build/lib/libMLIRCastInterfaces.a  ../llvm-project/build/lib/libMLIRMath.a  ../llvm-project/build/lib/libMLIRDialect.a  ../llvm-project/build/lib/libMLIRDialectUtils.a  ../llvm-project/build/lib/libMLIRTilingInterface.a  ../llvm-project/build/lib/libMLIROpenMP.a  ../llvm-project/build/lib/libMLIRTargetLLVMIRExport.a  ../llvm-project/build/lib/libMLIRTranslation.a  ../llvm-project/build/lib/libMLIRParser.a  ../llvm-project/build/lib/libMLIRLLVMIRTransforms.a  ../llvm-project/build/lib/libMLIRLLVMIR.a  ../llvm-project/build/lib/libMLIRPass.a  ../llvm-project/build/lib/libMLIRAnalysis.a  ../llvm-project/build/lib/libMLIRCallInterfaces.a  ../llvm-project/build/lib/libMLIRControlFlowInterfaces.a  ../llvm-project/build/lib/libMLIRDataLayoutInterfaces.a  ../llvm-project/build/lib/libMLIRInferTypeOpInterface.a  ../llvm-project/build/lib/libMLIRSideEffectInterfaces.a  ../llvm-project/build/lib/libMLIRViewLikeInterface.a  ../llvm-project/build/lib/libMLIRIR.a  ../llvm-project/build/lib/libMLIRSupport.a  ../llvm-project/build/lib/libclangCodeGen.a  ../llvm-project/build/lib/libLLVMCoverage.a  ../llvm-project/build/lib/libLLVMLTO.a  ../llvm-project/build/lib/libLLVMCodeGen.a  ../llvm-project/build/lib/libLLVMExtensions.a  ../llvm-project/build/lib/libLLVMPasses.a  ../llvm-project/build/lib/libLLVMObjCARCOpts.a  ../llvm-project/build/lib/libLLVMTarget.a  ../llvm-project/build/lib/libLLVMCoroutines.a  ../llvm-project/build/lib/libLLVMipo.a  ../llvm-project/build/lib/libLLVMInstrumentation.a  ../llvm-project/build/lib/libLLVMVectorize.a  ../llvm-project/build/lib/libLLVMBitWriter.a  ../llvm-project/build/lib/libLLVMIRReader.a  ../llvm-project/build/lib/libLLVMAsmParser.a  ../llvm-project/build/lib/libLLVMLinker.a  ../llvm-project/build/lib/libclangRewriteFrontend.a  ../llvm-project/build/lib/libclangARCMigrate.a  ../llvm-project/build/lib/libclangStaticAnalyzerFrontend.a  ../llvm-project/build/lib/libclangStaticAnalyzerCheckers.a  ../llvm-project/build/lib/libclangStaticAnalyzerCore.a  ../llvm-project/build/lib/libclangCrossTU.a  ../llvm-project/build/lib/libclangIndex.a  ../llvm-project/build/lib/libclangFrontend.a  ../llvm-project/build/lib/libclangDriver.a  ../llvm-project/build/lib/libLLVMOption.a  ../llvm-project/build/lib/libclangParse.a  ../llvm-project/build/lib/libclangSerialization.a  ../llvm-project/build/lib/libclangSema.a  ../llvm-project/build/lib/libclangAnalysis.a  ../llvm-project/build/lib/libclangASTMatchers.a  ../llvm-project/build/lib/libclangEdit.a  ../llvm-project/build/lib/libclangAST.a  ../llvm-project/build/lib/libLLVMFrontendOpenMP.a  ../llvm-project/build/lib/libLLVMScalarOpts.a  ../llvm-project/build/lib/libLLVMAggressiveInstCombine.a  ../llvm-project/build/lib/libLLVMInstCombine.a  ../llvm-project/build/lib/libLLVMTransformUtils.a  ../llvm-project/build/lib/libLLVMAnalysis.a  ../llvm-project/build/lib/libLLVMProfileData.a  ../llvm-project/build/lib/libLLVMObject.a  ../llvm-project/build/lib/libLLVMMCParser.a  ../llvm-project/build/lib/libLLVMMC.a  ../llvm-project/build/lib/libLLVMDebugInfoCodeView.a  ../llvm-project/build/lib/libLLVMBitReader.a  ../llvm-project/build/lib/libLLVMTextAPI.a  ../llvm-project/build/lib/libLLVMCore.a  ../llvm-project/build/lib/libLLVMBinaryFormat.a  ../llvm-project/build/lib/libLLVMRemarks.a  ../llvm-project/build/lib/libLLVMBitstreamReader.a  ../llvm-project/build/lib/libclangFormat.a  ../llvm-project/build/lib/libclangToolingInclusions.a  ../llvm-project/build/lib/libclangToolingCore.a  ../llvm-project/build/lib/libclangRewrite.a  ../llvm-project/build/lib/libclangLex.a  ../llvm-project/build/lib/libclangBasic.a  ../llvm-project/build/lib/libLLVMSupport.a  -lrt  -ldl  -lpthread  -lm  /usr/lib/x86_64-linux-gnu/libz.so  /usr/lib/x86_64-linux-gnu/libtinfo.so  ../llvm-project/build/lib/libLLVMDemangle.a && :
/usr/bin/ld: mlir-clang/CMakeFiles/mlir-clang.dir/mlir-clang.cc.o: in function `ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)':
/working_dir/build/../mlir-clang/mlir-clang.cc:182: undefined reference to `cc1_main(llvm::ArrayRef<char const*>, char const*, void*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

My system is based on a docker image based on tensorflow/tensorflow:latest. Dockerfile attached below.

# ==============================================================================
FROM tensorflow/tensorflow:latest-devel as builder

# Development Tools
RUN apt update && apt install -y curl wget tree less git vim tmux htop

# Compilers
RUN apt update && apt install -y clang-10 lld-10 && \
    ln -s /usr/bin/clang-10 /usr/bin/clang && \
    ln -s /usr/bin/clang++-10 /usr/bin/clang++ 

# Tensorflow latest-devel image comes with clang-format pre-installed 
# RUN apt install clang-format-10 && \
#     ln -s /usr/bin/clang-format-10 /usr/bin/clang-format

WORKDIR /tmp
RUN wget https://github.com/Kitware/CMake/releases/download/v3.18.2/cmake-3.18.2-Linux-x86_64.sh && \
    chmod +x cmake-3.18.2-Linux-x86_64.sh && \
    ./cmake-3.18.2-Linux-x86_64.sh --skip-license --prefix=/usr/local

RUN wget https://github.com/ninja-build/ninja/releases/download/v1.10.1/ninja-linux.zip && \
    unzip ninja-linux.zip && \
    mv ninja /usr/local/bin/ninja && \
    ln -s /usr/local/bin/ninja /usr/sbin/ninja

# Requirements for VSCODE plugins
WORKDIR /usr/local/bin
RUN wget -q https://github.com/bazelbuild/buildtools/releases/download/3.2.1/buildifier -O buildifier

# Setup some convenient tools/functionalities
WORKDIR /root
RUN git clone https://github.com/agostini01/dotfiles.git && \
    \
    ln -sf dotfiles/.gitignore_global .gitignore_global && \
    \
    curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim && \
    \
    ln -sf dotfiles/.vimrc            .vimrc && \
    ln -sf dotfiles/.ctags            .ctags && \
    ln -sf dotfiles/.inputrc          .inputrc && \
    \
    git clone https://github.com/tmux-plugins/tpm /root/.tmux/plugins/tpm && \
    ln -sf dotfiles/.tmux.conf        .tmux.conf

RUN echo "PS1='\[\033[01;31m\][\[\033[01;30m\]\u@\h\[\033[01;36m\] \W\[\033[01;31m\]]\$\[\033[00m\] '" >> .bashrc

RUN echo "export CXX=/usr/bin/clang++" >> ~/.bashrc && \
    echo "export CC=/usr/bin/clang" >> ~/.bashrc
ENV CXX=/usr/bin/clang++ 
ENV CC=/usr/bin/clang 

The image is based on ubuntu 20.04 and I am using ninja 1.10.1, cmake 3.2.1, clang-10, and GNU ld 2.34.

Please, let me know if you need any additional info.

agostini01 avatar Oct 21 '21 17:10 agostini01

Same error here.

lcnzg avatar Nov 10 '21 00:11 lcnzg

Building Polygeist as an external project (Option 2) worked.

lcnzg avatar Nov 11 '21 02:11 lcnzg

I bumped into the same issue when I tried to build Polygeist using DPC++ to have Polygeist support SYCL input. I managed to fix the issue by building clang in llvm-project/build folder and building mlir in llvm-project/build-mlir folder and using those paths for clang and mlir when building Polygeist.

mmoadeli avatar Nov 25 '21 13:11 mmoadeli

When I removed the option -Wl,-rpath-link, (i.e. with an empty path) from the linker command line and manually rerun the command, it linked correctly. But I didn't spent time to figure out where to fix this in cmake. Setting LLVM_LIBRARY_OUTPUT_INTDIR in the CMakeLists.txt fixes this issue.

mgehre-amd avatar Dec 02 '21 15:12 mgehre-amd