summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schuster <thebohemian@gmx.net>2009-01-24 11:35:43 +0100
committerRobert Schuster <thebohemian@gmx.net>2009-01-24 11:35:43 +0100
commit53dcbe3b9b6059ef3c8432007ab2bc1e718cb9a6 (patch)
tree7fd785ed9406667e2a294c8178fbb3283aad74d0
parentfb189177751dcbfef4ad7cecfe5f62a54a414010 (diff)
llvm: Various fixes.
* only build backend for the target machine * suppress automatic stripping * added patch to fix C++ "static initialization order fiasco"
-rw-r--r--packages/llvm/llvm-2.4/fix-build.patch26
-rw-r--r--packages/llvm/llvm-2.4/fix-static-initialization.patch60
-rw-r--r--packages/llvm/llvm_2.4.bb5
3 files changed, 85 insertions, 6 deletions
diff --git a/packages/llvm/llvm-2.4/fix-build.patch b/packages/llvm/llvm-2.4/fix-build.patch
index 30560b2e44..ed077affcd 100644
--- a/packages/llvm/llvm-2.4/fix-build.patch
+++ b/packages/llvm/llvm-2.4/fix-build.patch
@@ -1,8 +1,22 @@
Index: llvm-2.4/Makefile.rules
===================================================================
--- llvm-2.4.orig/Makefile.rules 2008-10-03 23:24:52.000000000 +0200
-+++ llvm-2.4/Makefile.rules 2009-01-16 03:19:06.000000000 +0100
-@@ -309,11 +309,7 @@
++++ llvm-2.4/Makefile.rules 2009-01-24 09:59:20.000000000 +0100
+@@ -234,9 +234,10 @@
+ EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing
+ endif
+
+- CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
+- C.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
+- LD.Flags += $(OPTIMIZE_OPTION)
++# OE: Do not interfere with flags given by OE
++# CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
++# C.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
++# LD.Flags += $(OPTIMIZE_OPTION)
+ else
+ BuildMode := Debug
+ CXX.Flags += -g
+@@ -309,11 +310,7 @@
#--------------------------------------------------------------------
TargetMode :=
ifeq ($(LLVM_CROSS_COMPILING),1)
@@ -15,7 +29,7 @@ Index: llvm-2.4/Makefile.rules
BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/Build/bin
endif
-@@ -436,7 +432,7 @@
+@@ -436,7 +433,7 @@
ifdef EXAMPLE_TOOL
LD.Flags += -rpath $(ExmplDir) -export-dynamic
else
@@ -27,7 +41,7 @@ Index: llvm-2.4/Makefile.rules
Index: llvm-2.4/lib/ExecutionEngine/JIT/JIT.cpp
===================================================================
--- llvm-2.4.orig/lib/ExecutionEngine/JIT/JIT.cpp 2008-09-24 18:25:55.000000000 +0200
-+++ llvm-2.4/lib/ExecutionEngine/JIT/JIT.cpp 2009-01-16 03:16:27.000000000 +0100
++++ llvm-2.4/lib/ExecutionEngine/JIT/JIT.cpp 2009-01-23 15:10:03.000000000 +0100
@@ -65,7 +65,7 @@
}
@@ -48,8 +62,8 @@ Index: llvm-2.4/lib/ExecutionEngine/JIT/JIT.cpp
_keymgr_get_and_lock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST);
Index: llvm-2.4/Makefile
===================================================================
---- llvm-2.4.orig/Makefile 2009-01-16 03:16:48.000000000 +0100
-+++ llvm-2.4/Makefile 2009-01-16 03:17:15.000000000 +0100
+--- llvm-2.4.orig/Makefile 2008-10-03 00:56:44.000000000 +0200
++++ llvm-2.4/Makefile 2009-01-23 15:10:33.000000000 +0100
@@ -27,9 +27,9 @@
# When cross-compiling, there are some things (tablegen) that need to
diff --git a/packages/llvm/llvm-2.4/fix-static-initialization.patch b/packages/llvm/llvm-2.4/fix-static-initialization.patch
new file mode 100644
index 0000000000..a3ec2d6374
--- /dev/null
+++ b/packages/llvm/llvm-2.4/fix-static-initialization.patch
@@ -0,0 +1,60 @@
+Index: llvm-2.4/include/llvm/System/DynamicLibrary.h
+===================================================================
+--- llvm-2.4.orig/include/llvm/System/DynamicLibrary.h 2008-05-06 03:32:53.000000000 +0200
++++ llvm-2.4/include/llvm/System/DynamicLibrary.h 2009-01-24 11:24:12.000000000 +0100
+@@ -16,6 +16,7 @@
+
+ #include "llvm/System/Path.h"
+ #include <string>
++#include <map>
+
+ namespace llvm {
+ namespace sys {
+@@ -90,6 +91,10 @@
+ DynamicLibrary(const DynamicLibrary&); ///< Do not implement
+ DynamicLibrary& operator=(const DynamicLibrary&); ///< Do not implement
+ /// @}
++
++ private:
++ static std::map<std::string, void *> &g_symbols();
++
+ };
+
+ } // End sys namespace
+Index: llvm-2.4/lib/System/DynamicLibrary.cpp
+===================================================================
+--- llvm-2.4.orig/lib/System/DynamicLibrary.cpp 2008-07-10 02:52:20.000000000 +0200
++++ llvm-2.4/lib/System/DynamicLibrary.cpp 2009-01-24 11:27:42.000000000 +0100
+@@ -14,14 +14,18 @@
+ #include "llvm/System/DynamicLibrary.h"
+ #include "llvm/Config/config.h"
+ #include <cstring>
+-#include <map>
+
+ // Collection of symbol name/value pairs to be searched prior to any libraries.
+-static std::map<std::string, void *> g_symbols;
++std::map<std::string, void *> &llvm::sys::DynamicLibrary::g_symbols() {
++ static std::map<std::string, void *> *symbols
++ = new std::map<std::string, void *>();
++
++ return *symbols;
++}
+
+ void llvm::sys::DynamicLibrary::AddSymbol(const char* symbolName,
+ void *symbolValue) {
+- g_symbols[symbolName] = symbolValue;
++ g_symbols()[symbolName] = symbolValue;
+ }
+
+ // It is not possible to use ltdl.c on VC++ builds as the terms of its LGPL
+@@ -75,8 +79,8 @@
+ // check_ltdl_initialization();
+
+ // First check symbols added via AddSymbol().
+- std::map<std::string, void *>::iterator I = g_symbols.find(symbolName);
+- if (I != g_symbols.end())
++ std::map<std::string, void *>::iterator I = g_symbols().find(symbolName);
++ if (I != g_symbols().end())
+ return I->second;
+
+ // Now search the libraries.
diff --git a/packages/llvm/llvm_2.4.bb b/packages/llvm/llvm_2.4.bb
index c1ad694ae6..a66d1b376b 100644
--- a/packages/llvm/llvm_2.4.bb
+++ b/packages/llvm/llvm_2.4.bb
@@ -5,12 +5,17 @@ LICENSE = "various"
SRC_URI = "\
http://llvm.org/releases/${PV}/llvm-${PV}.tar.gz \
file://fix-build.patch;patch=1 \
+ file://fix-static-initialization.patch;patch=1 \
"
DEPENDS = "llvm-native"
inherit autotools
+# --enable-debug-runtime disables automatic stripping and lets
+# OE control that
+EXTRA_OECONF += "--enable-debug-runtime --enable-targets=host-only"
+
do_compile() {
# The build wants these binaries, together with the build-fix patch
# they are not compiled again (which would not work).