[Mesa-dev] [PATCH] clover: Fix build with LLVM 3.3

Aaron Watry awatry at gmail.com
Thu Feb 21 06:25:20 PST 2013


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.

--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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130221/bfd3b10e/attachment.html>


More information about the mesa-dev mailing list