porting beignet: LLVM compilation and linking

Johannes Dieterich dieterich.joh at gmail.com
Thu Nov 27 21:58:40 UTC 2014


Hi porters,

please CC me as I am not subscribed.

I am out of pure personal interest (ditching Linux as my OpenCL development
environment) trying to port Beignet to FreeBSD. Beignet is Intel's
open-source
OpenCL environment for all their chips starting Ivy Bridge. Basically, we
should have all the bits in place for it to work, so the heavy lifting has
been done.

However, as you can see from my post to Beignet's mailing list
(http://lists.freedesktop.org/archives/beignet/2014-November/004515.html) ,
some minor stuff needs to be adjusted (patches there). However, I am now
facing a bump that I
cannot wrap my head around and hope some of you guys with much more C++
porting
experience than I have can be of help.

Compiling with clang35 gives me the set of errors described in
http://lists.freedesktop.org/archives/beignet/2014-November/004532.html .

I since followed the suggestion to try compiling w/ gcc. Again, a small
fix is needed as gcc48 does not support uint any longer. However, linking
against llvm fails. Linking string is:

cd /usr/home/sid/software/beignet/build_gcc/backend/src &&
/usr/local/bin/cmake
-E cmake_link_script CMakeFiles/gbe.dir/link.txt --verbose=1
/usr/local/bin/g++48  -fPIC  -funroll-loops -fstrict-aliasing -msse2 -msse3
-mssse3 -msse4.1 -fPIC -Wall -mfpmath=sse -Wcast-align -Wl,-E
-Wl,-rpath=/usr/local/lib/gcc48 -std=c++0x -Wno-invalid-offsetof -fno-rtti
-I/usr/local/llvm35/include  -DNDEBUG -D_GNU_SOURCE
-D__STDC_CONSTANT_MACROS
-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DGBE_DEBUG_MEMORY=0
-DGBE_COMPILER_AVAILABLE=1 -fvisibility=hidden -O2 -g -DGBE_DEBUG=1
-Wl,--no-undefined -L/usr/local/llvm35/lib -shared -Wl,-soname,libgbe.so -o
libgbe.so CMakeFiles/gbe.dir/sys/intrusive_list.cpp.o
CMakeFiles/gbe.dir/sys/assert.cpp.o CMakeFiles/gbe.dir/sys/alloc.cpp.o
CMakeFiles/gbe.dir/sys/mutex.cpp.o CMakeFiles/gbe.dir/sys/platform.cpp.o
CMakeFiles/gbe.dir/sys/cvar.cpp.o CMakeFiles/gbe.dir/ir/context.cpp.o
CMakeFiles/gbe.dir/ir/profile.cpp.o CMakeFiles/gbe.dir/ir/type.cpp.o
CMakeFiles/gbe.dir/ir/unit.cpp.o CMakeFiles/gbe.dir/ir/constant.cpp.o
CMakeFiles/gbe.dir/ir/sampler.cpp.o CMakeFiles/gbe.dir/ir/image.cpp.o
CMakeFiles/gbe.dir/ir/instruction.cpp.o
CMakeFiles/gbe.dir/ir/liveness.cpp.o
CMakeFiles/gbe.dir/ir/register.cpp.o CMakeFiles/gbe.dir/ir/function.cpp.o
CMakeFiles/gbe.dir/ir/value.cpp.o CMakeFiles/gbe.dir/ir/lowering.cpp.o
CMakeFiles/gbe.dir/ir/printf.cpp.o
CMakeFiles/gbe.dir/ir/structural_analysis.cpp.o
CMakeFiles/gbe.dir/ir/immediate.cpp.o
CMakeFiles/gbe.dir/backend/context.cpp.o
CMakeFiles/gbe.dir/backend/program.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_bitcode_link.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_gen_backend.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_passes.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_scalarize.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_legalize.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_intrinsic_lowering.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_barrier_nodup.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_printf_parser.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_to_gen.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_loadstore_optimization.cpp.o
CMakeFiles/gbe.dir/llvm/llvm_unroll.cpp.o
CMakeFiles/gbe.dir/backend/gen/gen_mesa_disasm.c.o
CMakeFiles/gbe.dir/backend/gen_insn_selection.cpp.o
CMakeFiles/gbe.dir/backend/gen_insn_scheduling.cpp.o
CMakeFiles/gbe.dir/backend/gen_reg_allocation.cpp.o
CMakeFiles/gbe.dir/backend/gen_context.cpp.o
CMakeFiles/gbe.dir/backend/gen75_context.cpp.o
CMakeFiles/gbe.dir/backend/gen8_context.cpp.o
CMakeFiles/gbe.dir/backend/gen_program.cpp.o
CMakeFiles/gbe.dir/backend/gen_insn_compact.cpp.o
CMakeFiles/gbe.dir/backend/gen_encoder.cpp.o
CMakeFiles/gbe.dir/backend/gen7_encoder.cpp.o
CMakeFiles/gbe.dir/backend/gen75_encoder.cpp.o
CMakeFiles/gbe.dir/backend/gen8_encoder.cpp.o  -L/usr/local/lib -ldrm_intel
-ldrm -ldrm /usr/local/llvm35/lib/libclangFrontend.a
/usr/local/llvm35/lib/libclangSerialization.a
/usr/local/llvm35/lib/libclangDriver.a
/usr/local/llvm35/lib/libclangCodeGen.a
/usr/local/llvm35/lib/libclangSema.a
/usr/local/llvm35/lib/libclangStaticAnalyzerFrontend.a
/usr/local/llvm35/lib/libclangStaticAnalyzerCheckers.a
/usr/local/llvm35/lib/libclangStaticAnalyzerCore.a
/usr/local/llvm35/lib/libclangAnalysis.a
/usr/local/llvm35/lib/libclangEdit.a
/usr/local/llvm35/lib/libclangAST.a /usr/local/llvm35/lib/libclangParse.a
/usr/local/llvm35/lib/libclangSema.a /usr/local/llvm35/lib/libclangLex.a
/usr/local/llvm35/lib/libclangBasic.a -lLLVM-3.5 -lLLVMLTO
-lLLVMObjCARCOpts
-lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter -lLLVMIRReader
-lLLVMAsmParser -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen
-lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo
-lLLVMSystemZAsmPrinter -lLLVMHexagonCodeGen -lLLVMHexagonAsmPrinter
-lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc
-lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen
-lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info
-lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen
-lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter
-lLLVMMipsDisassembler
-lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo
-lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen
-lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info
-lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler
-lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo
-lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen
-lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo
-lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen
-lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter
-lLLVMR600CodeGen -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter
-lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler
-lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter
-lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT
-lLLVMLineEditor -lLLVMMCAnalysis -lLLVMMCDisassembler
-lLLVMInstrumentation
-lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine
-lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT
-lLLVMTarget -lLLVMRuntimeDyld -lLLVMObject -lLLVMMCParser -lLLVMBitReader
-lLLVMExecutionEngine -lLLVMMC -lLLVMCore -lLLVMSupport -lz -lpthread
-ledit
-ltinfo -lm -lpthread
/usr/local/llvm35/lib/libclangStaticAnalyzerFrontend.a
/usr/local/llvm35/lib/libclangStaticAnalyzerCheckers.a
/usr/local/llvm35/lib/libclangStaticAnalyzerCore.a
/usr/local/llvm35/lib/libclangAnalysis.a
/usr/local/llvm35/lib/libclangEdit.a
/usr/local/llvm35/lib/libclangAST.a /usr/local/llvm35/lib/libclangParse.a
/usr/local/llvm35/lib/libclangLex.a /usr/local/llvm35/lib/libclangBasic.a
-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize
-lLLVMBitWriter -lLLVMIRReader -lLLVMAsmParser -lLLVMSystemZDisassembler
-lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc
-lLLVMSystemZInfo
-lLLVMSystemZAsmPrinter -lLLVMHexagonCodeGen -lLLVMHexagonAsmPrinter
-lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc
-lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen
-lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info
-lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen
-lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter
-lLLVMMipsDisassembler
-lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo
-lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen
-lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info
-lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler
-lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo
-lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen
-lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo
-lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen
-lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter
-lLLVMR600CodeGen -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter
-lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler
-lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter
-lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT
-lLLVMLineEditor -lLLVMMCAnalysis -lLLVMMCDisassembler
-lLLVMInstrumentation
-lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine
-lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT
-lLLVMTarget -lLLVMRuntimeDyld -lLLVMObject -lLLVMMCParser -lLLVMBitReader
-lLLVMExecutionEngine -lLLVMMC -lLLVMCore -lLLVMSupport -lz -lpthread
-ledit
-ltinfo -lm -lpthread -Wl,-rpath,/usr/local/lib:

Which seems to be OK. Actually, their cmake system queries llvm-config35
--libs for it. However, I get tons of linking errors as such:

CMakeFiles/gbe.dir/llvm/llvm_bitcode_link.cpp.o: In function
`materializedFuncCall':
/usr/home/sid/software/beignet/backend/src/llvm/llvm_bitcode_link.cpp:121:
undefined reference to `llvm::GlobalValue::Materialize(std::string*)'
CMakeFiles/gbe.dir/llvm/llvm_bitcode_link.cpp.o: In function
`createOclBitCodeModule':
/usr/home/sid/software/beignet/backend/src/llvm/llvm_bitcode_link.cpp:70:
undefined reference to `llvm::getLazyIRFileModule(std::string const&,
llvm::SMDiagnostic&, llvm::LLVMContext&)'

And some 5 pages more...

I am probably missing the obvious here. Can anybody help me out? Also, I
guess we would all prefer the "fully LLVM"-based compilation to work, so if
anybody has suggestions how to tackle this, I am all ears!

Thanks a lot for your time

Johannes


More information about the freebsd-ports mailing list