summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers
diff options
context:
space:
mode:
authorTom Stellard <[email protected]>2013-02-22 19:19:14 +0100
committerTom Stellard <[email protected]>2013-02-28 16:01:23 -0500
commitaa1c734b3ca445b5af743b9bad6a48ca7ba21f3c (patch)
treebb9b98ebe44e6fca3631b8a91ea52b58e5d1a5c3 /src/gallium/state_trackers
parent6f1538f8b4b253ba7aa92c98997719ce3ca59451 (diff)
clover: Fix build with LLVM 3.3 v2
v2: - Fix order that the clang libraries are passed to the linker to avoid missing symbol errors. Acked-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r--src/gallium/state_trackers/clover/llvm/invocation.cpp47
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 0bd8e22f8eb..2785d10310a 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.
//