elbywan / crystalline

A Language Server Protocol implementation for Crystal. 🔮
MIT License
424 stars 21 forks source link

LLVM Build Error #9

Closed iambudi closed 3 years ago

iambudi commented 3 years ago

I have no idea with this bunch of LLVM errors. Any missing libs need to be installed?

crystal -v

Crystal 0.35.1 (2020-06-19)

LLVM: 10.0.0
Default target: x86_64-apple-macosx (Catalina 10.15.7)

env LLVM_CONFIG=/usr/local/opt/llvm/bin/llvm-config crystal build ./src/crystalline.cr -o ./bin/crystalline --release --no-debug -Dpreview_mt

Undefined symbols for architecture x86_64:
  "llvm::ARMInstPrinter::getRegisterName(unsigned int)", referenced from:
      llvm::ARMAsmPrinter::printOperand(llvm::MachineInstr const*, int, llvm::raw_ostream&) in libLLVMARMCodeGen.a(ARMAsmPrinter.cpp.o)
      llvm::ARMAsmPrinter::PrintAsmOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&) in libLLVMARMCodeGen.a(ARMAsmPrinter.cpp.o)
      llvm::ARMAsmPrinter::PrintAsmMemoryOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&) in libLLVMARMCodeGen.a(ARMAsmPrinter.cpp.o)
  "llvm::ARMInstPrinter::ARMInstPrinter(llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&)", referenced from:
      createARMMCInstPrinter(llvm::Triple const&, unsigned int, llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&) in libLLVMARMDesc.a(ARMMCTargetDesc.cpp.o)
  "llvm::DecodeBLENDMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodePSHUFMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeSHUFPMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeVPERMMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeEXTRQIMask(llvm::MVT, int, int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodePSHUFBMask(llvm::ArrayRef<unsigned long long>, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodePSLLDQMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodePSRLDQMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeUNPCKHMask(llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeUNPCKLMask(llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeVPERMVMask(llvm::ArrayRef<unsigned long long>, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeVPPERMMask(llvm::ArrayRef<unsigned long long>, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::MetadataTracking::track(void*, llvm::Metadata&, llvm::PointerUnion<llvm::MetadataAsValue*, llvm::Metadata*>)", referenced from:
      llvm::IRBuilderBase::SetInstDebugLocation(llvm::Instruction*) const in llvm_ext.o
  "llvm::DecodeMOVDDUPMask(llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeMOVHLPSMask(unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeMOVLHPSMask(unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodePALIGNRMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodePSHUFHWMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodePSHUFLWMask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::X86ATTInstPrinter::getRegisterName(unsigned int)", referenced from:
      llvm::X86AsmPrinter::PrintAsmOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&) in libLLVMX86CodeGen.a(X86AsmPrinter.cpp.o)
      printOperand(llvm::X86AsmPrinter&, llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&, char const*, unsigned int) in libLLVMX86CodeGen.a(X86AsmPrinter.cpp.o)
      llvm::X86AsmPrinter::EmitInstruction(llvm::MachineInstr const*) in libLLVMX86CodeGen.a(X86MCInstLower.cpp.o)
      getShuffleComment(llvm::MachineInstr const*, unsigned int, unsigned int, llvm::ArrayRef<int>) in libLLVMX86CodeGen.a(X86MCInstLower.cpp.o)
  "llvm::AArch64InstPrinter::getRegisterName(unsigned int, unsigned int)", referenced from:
      (anonymous namespace)::AArch64AsmPrinter::PrintAsmOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&) in libLLVMAArch64CodeGen.a(AArch64AsmPrinter.cpp.o)
      (anonymous namespace)::AArch64AsmPrinter::PrintAsmMemoryOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&) in libLLVMAArch64CodeGen.a(AArch64AsmPrinter.cpp.o)
      (anonymous namespace)::AArch64AsmPrinter::printOperand(llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&) in libLLVMAArch64CodeGen.a(AArch64AsmPrinter.cpp.o)
      (anonymous namespace)::AArch64AsmPrinter::printAsmMRegister(llvm::MachineOperand const&, char, llvm::raw_ostream&) in libLLVMAArch64CodeGen.a(AArch64AsmPrinter.cpp.o)
  "llvm::AArch64InstPrinter::AArch64InstPrinter(llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&)", referenced from:
      createAArch64MCInstPrinter(llvm::Triple const&, unsigned int, llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&) in libLLVMAArch64Desc.a(AArch64MCTargetDesc.cpp.o)
  "llvm::DecodeINSERTPSMask(unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeINSERTQIMask(llvm::MVT, int, int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeMOVSHDUPMask(llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeMOVSLDUPMask(llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeVPERMILPMask(llvm::MVT, llvm::ArrayRef<unsigned long long>, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::WriteBitcodeToFile(llvm::Module const&, llvm::raw_ostream&, bool, llvm::ModuleSummaryIndex const*, bool, std::__1::array<unsigned int, 5ul>*)", referenced from:
      _LLVMExtWriteBitcodeWithSummaryToFile in llvm_ext.o
  "llvm::DecodeVPERMIL2PMask(llvm::MVT, unsigned int, llvm::ArrayRef<unsigned long long>, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::X86IntelInstPrinter::getRegisterName(unsigned int)", referenced from:
      (anonymous namespace)::X86AsmParser::ParseOperand() in libLLVMX86AsmParser.a(X86AsmParser.cpp.o)
  "llvm::DecodeScalarMoveMask(llvm::MVT, bool, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeVPERM2X128Mask(llvm::MVT, unsigned int, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeZeroExtendMask(llvm::MVT, llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      resolveTargetShuffleInputs(llvm::SDValue, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, llvm::SelectionDAG&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeVectorBroadcast(llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::DecodeZeroMoveLowMask(llvm::MVT, llvm::SmallVectorImpl<int>&)", referenced from:
      getTargetShuffleMask(llvm::SDNode*, llvm::MVT, bool, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SmallVectorImpl<int>&, bool&) in libLLVMX86CodeGen.a(X86ISelLowering.cpp.o)
  "llvm::AArch64AppleInstPrinter::AArch64AppleInstPrinter(llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&)", referenced from:
      createAArch64MCInstPrinter(llvm::Triple const&, unsigned int, llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&) in libLLVMAArch64Desc.a(AArch64MCTargetDesc.cpp.o)
  "llvm::DebugLoc::get(unsigned int, unsigned int, llvm::MDNode const*, llvm::MDNode const*, bool)", referenced from:
      _LLVMExtSetCurrentDebugLocation in llvm_ext.o
  "llvm::DIBuilder::createFile(llvm::StringRef, llvm::StringRef, llvm::Optional<llvm::DIFile::ChecksumInfo<llvm::StringRef> >, llvm::Optional<llvm::StringRef>)", referenced from:
      _LLVMExtDIBuilderCreateFile in llvm_ext.o
      _LLVMExtDIBuilderCreateCompileUnit in llvm_ext.o
  "llvm::DIBuilder::createFunction(llvm::DIScope*, llvm::StringRef, llvm::StringRef, llvm::DIFile*, unsigned int, llvm::DISubroutineType*, unsigned int, llvm::DINode::DIFlags, llvm::DISubprogram::DISPFlags, llvm::MDTupleTypedArrayWrapper<llvm::DITemplateParameter>, llvm::DISubprogram*, llvm::MDTupleTypedArrayWrapper<llvm::DIType>)", referenced from:
      _LLVMExtDIBuilderCreateFunction in llvm_ext.o
  "llvm::DIBuilder::createBasicType(llvm::StringRef, unsigned long long, unsigned int, llvm::DINode::DIFlags)", referenced from:
      _LLVMExtDIBuilderCreateBasicType in llvm_ext.o
  "llvm::DIBuilder::createEnumerator(llvm::StringRef, long long, bool)", referenced from:
      _LLVMExtDIBuilderCreateEnumerator in llvm_ext.o
  "llvm::DIBuilder::createCompileUnit(unsigned int, llvm::DIFile*, llvm::StringRef, bool, llvm::StringRef, unsigned int, llvm::StringRef, llvm::DICompileUnit::DebugEmissionKind, unsigned long long, bool, bool, llvm::DICompileUnit::DebugNameTableKind, bool)", referenced from:
      _LLVMExtDIBuilderCreateCompileUnit in llvm_ext.o
  "llvm::DIBuilder::createEnumerationType(llvm::DIScope*, llvm::StringRef, llvm::DIFile*, unsigned int, unsigned long long, unsigned int, llvm::MDTupleTypedArrayWrapper<llvm::DINode>, llvm::DIType*, llvm::StringRef, bool)", referenced from:
      _LLVMExtDIBuilderCreateEnumerationType in llvm_ext.o
  "llvm::DIBuilder::DIBuilder(llvm::Module&, bool, llvm::DICompileUnit*)", referenced from:
      _LLVMExtNewDIBuilder in llvm_ext.o
  "llvm::CallBase::hasFnAttrOnCalledFunction(llvm::Attribute::AttrKind) const", referenced from:
      bool llvm::CallBase::hasFnAttrImpl<llvm::Attribute::AttrKind>(llvm::Attribute::AttrKind) const in llvm_ext.o
  "vtable for llvm::X86ATTInstPrinter", referenced from:
      createX86MCInstPrinter(llvm::Triple const&, unsigned int, llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&) in libLLVMX86Desc.a(X86MCTargetDesc.cpp.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for llvm::X86IntelInstPrinter", referenced from:
      createX86MCInstPrinter(llvm::Triple const&, unsigned int, llvm::MCAsmInfo const&, llvm::MCInstrInfo const&, llvm::MCRegisterInfo const&) in libLLVMX86Desc.a(X86MCTargetDesc.cpp.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error: execution of command failed with code: 1: `cc "${@}" -o /Users/iambudi/Applications/crystalline/bin/crystalline  -rdynamic -L/usr/local/Cellar/crystal/0.35.1_1/embedded/lib -L/usr/local/lib -L/usr/local/Cellar/libyaml/0.2.5/lib -lyaml -lz `command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libssl || printf %s '-lssl -lcrypto'` `command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libcrypto || printf %s '-lcrypto'` /usr/local/Cellar/crystal/0.35.1_1/src/llvm/ext/llvm_ext.o `"/usr/local/opt/llvm/bin/llvm-config" --libs --system-libs --ldflags 2> /dev/null` -lstdc++ -lpcre -lgc -lpthread /usr/local/Cellar/crystal/0.35.1_1/src/ext/libcrystal.a -L/usr/local/Cellar/libevent/2.1.12/lib -levent_pthreads -levent -L/usr/local/Cellar/libevent/2.1.12/lib -levent -liconv -ldl`
elbywan commented 3 years ago

Hey @iambudi,

brew recently updated llvm to version 11 which is incompatible with crystal, but still installed alongside as a dependency.

Could you check the output of brew info llvm to check which version you have? If you do have v11 installed, then running brew uninstall --ignore-dependencies llvm && brew install llvm@9 may fix the issue.

Also if you simply want to run crystalline you could download the pre-built binary instead of building from source.

iambudi commented 3 years ago

Hi @elbywan,

Thank you so much for your prompt answer. I read another issue mentioning this as well.

You're right i got LLVM 11 installed on my mac. I will try again to build it tomorrow with llvm@9 as your suggestion.

I already use pre-built binary tho. Just in case i need to do some experiment on the code so i need to make sure it can be build without issue :)