On Thu, Feb 21, 2013 at 08:25:20AM -0600, Aaron Watry wrote: > Hi Tom, > > Mesa+Clover does indeed build against master llvm/clang, but I'm having > trouble building against it when I try to do a clean build of Piglit. > > Error received: > > [ 18%] Built target piglitutil_cl > Linking C executable ../../../../../bin/cl-custom-run-simple-kernel > /usr/local/lib/libOpenCL.so: undefined reference to > `clang::PPConditionalDirectiveRecord::rangeIntersectsConditionalDirective(clang::SourceRange) > const' > /usr/local/lib/libOpenCL.so: undefined reference to > `clang::PPConditionalDirectiveRecord::findConditionalDirectiveRegionLoc(clang::SourceLocation) > const' > collect2: error: ld returned 1 exit status > make[2]: *** [bin/cl-custom-run-simple-kernel] Error 1 > make[1]: *** > [target_api/cl/tests/cl/custom/CMakeFiles/cl-custom-run-simple-kernel.dir/all] > Error 2 > make: *** [all] Error 2 > > Maybe I've done something wrong, but I've tested this on two machines now > and both times I've wiped my llvm/clang/mesa/clover installs in /usr/local > and rebuilt from scratch. >
I've sent a v2 of this patch that should fix this. The dependencies between clang libraries changed so I had to change the order that they were passed to the linker. -Tom > --Aaron > > On Wed, Feb 20, 2013 at 4:27 PM, Tom Stellard <t...@stellard.net> wrote: > > > From: Tom Stellard <thomas.stell...@amd.com> > > > > --- > > .../state_trackers/clover/llvm/invocation.cpp | 47 > > ++++++++++++++++--- > > 1 files changed, 39 insertions(+), 8 deletions(-) > > > > diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp > > b/src/gallium/state_trackers/clover/llvm/invocation.cpp > > index 0bd8e22..2785d10 100644 > > --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp > > +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp > > @@ -28,10 +28,17 @@ > > #include <clang/CodeGen/CodeGenAction.h> > > #include <llvm/Bitcode/BitstreamWriter.h> > > #include <llvm/Bitcode/ReaderWriter.h> > > -#include <llvm/DerivedTypes.h> > > #include <llvm/Linker.h> > > +#if HAVE_LLVM < 0x0303 > > +#include <llvm/DerivedTypes.h> > > #include <llvm/LLVMContext.h> > > #include <llvm/Module.h> > > +#else > > +#include <llvm/IR/DerivedTypes.h> > > +#include <llvm/IR/LLVMContext.h> > > +#include <llvm/IR/Module.h> > > +#include <llvm/Support/IRReader.h> > > +#endif > > #include <llvm/PassManager.h> > > #include <llvm/Support/TargetSelect.h> > > #include <llvm/Support/MemoryBuffer.h> > > @@ -41,8 +48,10 @@ > > > > #if HAVE_LLVM < 0x0302 > > #include <llvm/Target/TargetData.h> > > -#else > > +#elif HAVE_LLVM < 0x0303 > > #include <llvm/DataLayout.h> > > +#else > > +#include <llvm/IR/DataLayout.h> > > #endif > > > > #include "pipe/p_state.h" > > @@ -151,7 +160,11 @@ namespace { > > // Add libclc generic search path > > c.getHeaderSearchOpts().AddPath(LIBCLC_INCLUDEDIR, > > clang::frontend::Angled, > > - false, false, false); > > + false, false > > +#if HAVE_LLVM < 0x0303 > > + , false > > +#endif > > + ); > > > > // Add libclc include > > c.getPreprocessorOpts().Includes.push_back("clc/clc.h"); > > @@ -167,8 +180,12 @@ namespace { > > c.getInvocation().setLangDefaults(c.getLangOpts(), clang::IK_OpenCL, > > > > clang::LangStandard::lang_opencl11); > > #endif > > - c.createDiagnostics(0, NULL, new clang::TextDiagnosticPrinter( > > - s_log, > > + c.createDiagnostics( > > +#if HAVE_LLVM < 0x0303 > > + 0, NULL, > > +#endif > > + new clang::TextDiagnosticPrinter( > > + s_log, > > #if HAVE_LLVM <= 0x0301 > > c.getDiagnosticOpts())); > > #else > > @@ -201,12 +218,26 @@ namespace { > > > > llvm::PassManager PM; > > llvm::PassManagerBuilder Builder; > > - bool isNative; > > - llvm::Linker linker("clover", mod); > > + llvm::sys::Path libclc_path = > > + llvm::sys::Path(LIBCLC_LIBEXECDIR + triple + > > ".bc"); > > > > // Link the kernel with libclc > > - linker.LinkInFile(llvm::sys::Path(LIBCLC_LIBEXECDIR + triple + > > ".bc"), isNative); > > +#if HAVE_LLVM < 0x0303 > > + bool isNative; > > + llvm::Linker linker("clover", mod); > > + linker.LinkInFile(libclc_path, isNative); > > mod = linker.releaseModule(); > > +#else > > + std::string err_str; > > + llvm::SMDiagnostic err; > > + llvm::Module *libclc_mod = llvm::ParseIRFile(libclc_path.str(), err, > > + mod->getContext()); > > + if (llvm::Linker::LinkModules(mod, libclc_mod, > > + llvm::Linker::DestroySource, > > + &err_str)) { > > + throw build_error(err_str); > > + } > > +#endif > > > > // Add a function internalizer pass. > > // > > -- > > 1.7.8.6 > > > > _______________________________________________ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev