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

Tom Stellard tom at stellard.net
Fri Feb 22 10:19:14 PST 2013


From: Tom Stellard <thomas.stellard at amd.com>

v2:
  - Fix order that the clang libraries are passed to the linker to avoid
    missing symbol errors.

---
 .../state_trackers/clover/llvm/invocation.cpp      |   47 ++++++++++++++++---
 src/gallium/targets/opencl/Makefile.am             |    2 +-
 2 files changed, 40 insertions(+), 9 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.
       //
diff --git a/src/gallium/targets/opencl/Makefile.am b/src/gallium/targets/opencl/Makefile.am
index c5c3003..389eecc 100644
--- a/src/gallium/targets/opencl/Makefile.am
+++ b/src/gallium/targets/opencl/Makefile.am
@@ -21,9 +21,9 @@ libOpenCL_la_LIBADD = \
 	-lclangSema \
 	-lclangAnalysis \
 	-lclangAST \
+	-lclangEdit \
 	-lclangLex \
 	-lclangBasic \
-	-lclangEdit \
 	$(LLVM_LIBS)
 
 
-- 
1.7.3.4



More information about the mesa-dev mailing list