0

I recently started to write my own programming language and wanted to integrate LLVM. I followed the Kaleidoscope Tutorial in the LLVM Documentation to convert my AST to the LLVM IR. But I'm having a big issue when I link with the LLVM version from pacaman (LLVM 13.1) I get random crashes in libc-code while copying a string. So I compiled LLVM (15) from scratch. Now I am getting a very long ld crash when ever I try to compile my code.

Makefile:

BINARY = main
SOURCE_DIR = src
OBJECT_DIR = bin
INCLUDE_DIR = include
GRAMMAR_DIR = grammar

LLVM = /usr/local/bin/llvm-config

CC = clang++
CFLAGS = -g -Iinclude/ $(shell $(LLVM) --cxxflags) -frtti -fexceptions
LDFLAGS = $(shell $(LLVM) --ldflags --system-libs --libs) -lstdc++

SOURCE_FILES = $(shell find $(SOURCE_DIR)/ -name *.cc)
INCLUDE_FILES = $(shell find $(INCLUDE_DIR)/ -name *.hh)
OBJECT_FILES = $(patsubst $(SOURCE_DIR)/%.cc, $(OBJECT_DIR)/%.o, $(SOURCE_FILES))

$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cc
    $(CC) $(CFLAGS) -c $^ -o $@

all: format $(OBJECT_FILES) 
    $(CC) $(CFLAGS) $(LDFLAGS) -o $(OBJECT_DIR)/$(BINARY) $(OBJECT_FILES)

format:
    clang-format -i $(SOURCE_FILES) $(INCLUDE_FILES)

clean:
    rm -f $(OBJECT_DIR)/*
    rm -f $(INCLUDE_DIR)/parser.hh
    rm -f $(INCLUDE_DIR)/location.hh
    rm -f $(SOURCE_DIR)/parser.cc
    rm -f $(SOURCE_DIR)/lexer.cc

parser: lexer
    bison --header=$(INCLUDE_DIR)/parser.hh --output=$(SOURCE_DIR)/parser.cc $(GRAMMAR_DIR)/parser.yy -Wcounterexamples

lexer: 
    flex --outfile=$(SOURCE_DIR)/lexer.cc $(GRAMMAR_DIR)/lexer.ll

Error:

clang++ -g -Iinclude/ -I/usr/local/include -std=c++14   -fno-exceptions -fno-rtti -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -frtti -fexceptions -L/usr/local/lib  -lLLVMWindowsManifest -lLLVMWindowsDriver -lLLVMXRay -lLLVMLibDriver -lLLVMDlltoolDriver -lLLVMCoverage -lLLVMLineEditor -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMX86TargetMCA -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMWebAssemblyDisassembler -lLLVMWebAssemblyAsmParser -lLLVMWebAssemblyCodeGen -lLLVMWebAssemblyDesc -lLLVMWebAssemblyUtils -lLLVMWebAssemblyInfo -lLLVMVEDisassembler -lLLVMVEAsmParser -lLLVMVECodeGen -lLLVMVEDesc -lLLVMVEInfo -lLLVMSystemZDisassembler -lLLVMSystemZAsmParser -lLLVMSystemZCodeGen -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSparcDisassembler -lLLVMSparcAsmParser -lLLVMSparcCodeGen -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMRISCVDisassembler -lLLVMRISCVAsmParser -lLLVMRISCVCodeGen -lLLVMRISCVDesc -lLLVMRISCVInfo -lLLVMPowerPCDisassembler -lLLVMPowerPCAsmParser -lLLVMPowerPCCodeGen -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMMSP430Disassembler -lLLVMMSP430AsmParser -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMipsDisassembler -lLLVMMipsAsmParser -lLLVMMipsCodeGen -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMLanaiDisassembler -lLLVMLanaiCodeGen -lLLVMLanaiAsmParser -lLLVMLanaiDesc -lLLVMLanaiInfo -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonAsmParser -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMBPFDisassembler -lLLVMBPFAsmParser -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMAVRDisassembler -lLLVMAVRAsmParser -lLLVMAVRCodeGen -lLLVMAVRDesc -lLLVMAVRInfo -lLLVMARMDisassembler -lLLVMARMAsmParser -lLLVMARMCodeGen -lLLVMARMDesc -lLLVMARMUtils -lLLVMARMInfo -lLLVMAMDGPUTargetMCA -lLLVMAMDGPUDisassembler -lLLVMAMDGPUAsmParser -lLLVMAMDGPUCodeGen -lLLVMAMDGPUDesc -lLLVMAMDGPUUtils -lLLVMAMDGPUInfo -lLLVMAArch64Disassembler -lLLVMAArch64AsmParser -lLLVMAArch64CodeGen -lLLVMAArch64Desc -lLLVMAArch64Utils -lLLVMAArch64Info -lLLVMOrcJIT -lLLVMMCJIT -lLLVMJITLink -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMOrcTargetProcess -lLLVMOrcShared -lLLVMDWP -lLLVMDebugInfoGSYM -lLLVMOption -lLLVMObjectYAML -lLLVMObjCopy -lLLVMMCA -lLLVMMCDisassembler -lLLVMLTO -lLLVMPasses -lLLVMCFGuard -lLLVMCoroutines -lLLVMObjCARCOpts -lLLVMipo -lLLVMVectorize -lLLVMLinker -lLLVMInstrumentation -lLLVMFrontendOpenMP -lLLVMFrontendOpenACC -lLLVMExtensions -lLLVMDWARFLinker -lLLVMGlobalISel -lLLVMMIRParser -lLLVMAsmPrinter -lLLVMSelectionDAG -lLLVMCodeGen -lLLVMIRReader -lLLVMAsmParser -lLLVMInterfaceStub -lLLVMFileCheck -lLLVMFuzzMutate -lLLVMTarget -lLLVMScalarOpts -lLLVMInstCombine -lLLVMAggressiveInstCombine -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis -lLLVMProfileData -lLLVMSymbolize -lLLVMDebugInfoPDB -lLLVMDebugInfoMSF -lLLVMDebugInfoDWARF -lLLVMObject -lLLVMTextAPI -lLLVMMCParser -lLLVMMC -lLLVMDebugInfoCodeView -lLLVMBitReader -lLLVMCore -lLLVMRemarks -lLLVMBitstreamReader -lLLVMBinaryFormat -lLLVMTableGen -lLLVMSupport -lLLVMDemangle -lrt -ldl -lm -lz -ltinfo -lxml2 -lstdc++ -o bin/main  bin/codegen.o  bin/parser.o  

too long for stackoverflow: https://pastebin.com/xRZufnMV

Thanks for helping!!

jory
  • 1
  • Does this answer your question? [g++ linking order dependency when linking c code to c++ code](https://stackoverflow.com/questions/3363398/g-linking-order-dependency-when-linking-c-code-to-c-code) – IlCapitano Mar 15 '22 at 11:13

0 Answers0