[oe-commits] Robert Schuster : llvm: Various fixes.

GIT User account git at amethyst.openembedded.net
Sat Jan 24 10:38:43 UTC 2009


Module: openembedded.git
Branch: org.openembedded.dev
Commit: 53dcbe3b9b6059ef3c8432007ab2bc1e718cb9a6
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=53dcbe3b9b6059ef3c8432007ab2bc1e718cb9a6

Author: Robert Schuster <thebohemian at gmx.net>
Date:   Sat Jan 24 11:35:43 2009 +0100

llvm: Various fixes.
  * only build backend for the target machine
  * suppress automatic stripping
  * added patch to fix C++ "static initialization order fiasco"

---

 packages/llvm/llvm-2.4/fix-build.patch             |   26 +++++++--
 .../llvm/llvm-2.4/fix-static-initialization.patch  |   60 ++++++++++++++++++++
 packages/llvm/llvm_2.4.bb                          |    5 ++
 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 30560b2..ed077af 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 0000000..a3ec2d6
--- /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 c1ad694..a66d1b3 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).





More information about the Openembedded-commits mailing list