Date: Thu, 27 Nov 2014 22:58:37 +0100 From: Johannes Dieterich <dieterich.joh@gmail.com> To: freebsd-ports@freebsd.org Subject: porting beignet: LLVM compilation and linking Message-ID: <CABquGzVrXBBhKy%2BhNhu3TUOwJ8nmkLAsrfXp2T3YRtCRXwS4rg@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CABquGzVrXBBhKy%2BhNhu3TUOwJ8nmkLAsrfXp2T3YRtCRXwS4rg>