[Mesa-dev] [PATCH] clover: Fix build with LLVM 3.3
Tom Stellard
tom at stellard.net
Fri Feb 22 10:21:16 PST 2013
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 <tom at stellard.net> wrote:
>
> > From: Tom Stellard <thomas.stellard at 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 at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
More information about the mesa-dev
mailing list