From owner-freebsd-ports@FreeBSD.ORG Thu Nov 27 21:58:40 2014 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 974E86FC for ; Thu, 27 Nov 2014 21:58:40 +0000 (UTC) Received: from mail-la0-x22f.google.com (mail-la0-x22f.google.com [IPv6:2a00:1450:4010:c03::22f]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E98402E1 for ; Thu, 27 Nov 2014 21:58:39 +0000 (UTC) Received: by mail-la0-f47.google.com with SMTP id hz20so4836434lab.34 for ; Thu, 27 Nov 2014 13:58:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=77ye9Oo26cTEeWP4YeICY6H+raLdyBHLkEy4ZRUh28I=; b=SwCmTs7fwRTz5C/u0zP+quGJ9VqyX7LepLRGNN8m5awEshntp5f0/h7csBE4UeIt82 KLAlqgZ7+kpkkPszNlIY8JT5PZDDc7leKswkY0owwH/MNBW55w9fVRPexY0iawh801lF dVUb1BLoC+nU6yanRTt6Ogdb8f6aAuaCGPEbuJ7s91zFQk7MZwwh9psYKEURc22GdvBh 8TfhI9xzon2LwNyzhoqcerAwvl5HuPYl+i0wPtHbANREHOJDU6CPeq0pokCTSN02nfPI t1giDvIdr1WiRfvGXtAQ+73t68tSOEIf19SSyk7+aR6QCDw8FacSp3QQGBCVRA3KLE07 6a2w== MIME-Version: 1.0 X-Received: by 10.112.156.138 with SMTP id we10mr40171892lbb.88.1417125518032; Thu, 27 Nov 2014 13:58:38 -0800 (PST) Received: by 10.114.79.102 with HTTP; Thu, 27 Nov 2014 13:58:37 -0800 (PST) Date: Thu, 27 Nov 2014 22:58:37 +0100 Message-ID: Subject: porting beignet: LLVM compilation and linking From: Johannes Dieterich To: freebsd-ports@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.18-1 X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Nov 2014 21:58:40 -0000 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