diff options
author | Robert Schuster <thebohemian@gmx.net> | 2009-03-31 11:54:02 +0200 |
---|---|---|
committer | Robert Schuster <thebohemian@gmx.net> | 2009-03-31 11:55:05 +0200 |
commit | eb8a23f558e529fd30b840934717174375aa455f (patch) | |
tree | 5059107dcf0efefeb4ab40bb539bc0e880e6fc36 | |
parent | 8db75a24a2f7d0af4bac46e69535733a203226c2 (diff) |
llvm-gcc4-cross: Change dependency to llvm2.5-native.
llvm-gcc: Dito.
-rw-r--r-- | recipes/llvm/llvm-2.4/fix-build.patch | 79 | ||||
-rw-r--r-- | recipes/llvm/llvm-2.4/fix-static-initialization.patch | 60 | ||||
-rw-r--r-- | recipes/llvm/llvm-gcc4-cross_svn.bb | 4 | ||||
-rw-r--r-- | recipes/llvm/llvm-gcc4_svn.bb | 4 | ||||
-rw-r--r-- | recipes/llvm/llvm.inc | 122 |
5 files changed, 121 insertions, 148 deletions
diff --git a/recipes/llvm/llvm-2.4/fix-build.patch b/recipes/llvm/llvm-2.4/fix-build.patch deleted file mode 100644 index ed077affcd..0000000000 --- a/recipes/llvm/llvm-2.4/fix-build.patch +++ /dev/null @@ -1,79 +0,0 @@ -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-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) -- ifeq ($(BUILD_COMPONENT),1) -- TargetMode := Build -- else -- TargetMode := Host -- endif -+ TargetMode := Host - BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/Build/bin - endif - -@@ -436,7 +433,7 @@ - ifdef EXAMPLE_TOOL - LD.Flags += -rpath $(ExmplDir) -export-dynamic - else -- LD.Flags += -rpath $(ToolDir) -export-dynamic -+ LD.Flags += -export-dynamic - endif - endif - -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-23 15:10:03.000000000 +0100 -@@ -65,7 +65,7 @@ - } - - --#if defined (__GNUC__) -+#if defined (__GNUC__) && ! defined (__ARM_EABI__) - - // libgcc defines the __register_frame function to dynamically register new - // dwarf frames for exception handling. This functionality is not portable -@@ -225,7 +225,7 @@ - } - - // Register routine for informing unwinding runtime about new EH frames --#if defined(__GNUC__) -+#if defined(__GNUC__) && ! defined(__ARM_EABI__) - #if defined(__APPLE__) - struct LibgccObjectInfo* LOI = (struct LibgccObjectInfo*) - _keymgr_get_and_lock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST); -Index: llvm-2.4/Makefile -=================================================================== ---- 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 - # be build for the build system. --ifeq ($(LLVM_CROSS_COMPILING),1) -- BUILD_TARGET_DIRS := lib/System lib/Support utils --endif -+#ifeq ($(LLVM_CROSS_COMPILING),1) -+# BUILD_TARGET_DIRS := lib/System lib/Support utils -+#endif - - # llvm-gcc4 doesn't need runtime libs. llvm-gcc4 is the only supported one. - # FIXME: Remove runtime entirely once we have an understanding of where diff --git a/recipes/llvm/llvm-2.4/fix-static-initialization.patch b/recipes/llvm/llvm-2.4/fix-static-initialization.patch deleted file mode 100644 index a3ec2d6374..0000000000 --- a/recipes/llvm/llvm-2.4/fix-static-initialization.patch +++ /dev/null @@ -1,60 +0,0 @@ -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/recipes/llvm/llvm-gcc4-cross_svn.bb b/recipes/llvm/llvm-gcc4-cross_svn.bb index 9b0e07ab94..4cd5ae1db6 100644 --- a/recipes/llvm/llvm-gcc4-cross_svn.bb +++ b/recipes/llvm/llvm-gcc4-cross_svn.bb @@ -2,10 +2,12 @@ DESCRIPTION = "The Low Level Virtual Machine - gcc4 frontend" HOMEPAGE = "http://llvm.org" LICENSE = "various" -DEPENDS = "llvm-native" +DEPENDS = "llvm2.5-native" PV = "2.1+svnr${SRCREV}" +PR = "r1" + inherit autotools cross SRC_URI = "svn://anonsvn.opensource.apple.com/svn/llvm/;module=trunk \ diff --git a/recipes/llvm/llvm-gcc4_svn.bb b/recipes/llvm/llvm-gcc4_svn.bb index 599e2ca183..6a39362080 100644 --- a/recipes/llvm/llvm-gcc4_svn.bb +++ b/recipes/llvm/llvm-gcc4_svn.bb @@ -2,10 +2,12 @@ DESCRIPTION = "The Low Level Virtual Machine - gcc4 frontend" HOMEPAGE = "http://llvm.org" LICENSE = "various" -DEPENDS = "llvm-native" +DEPENDS = "llvm2.5-native" PV = "2.0+svnr${SRCREV}" +PR = "r1" + inherit autotools cross SRC_URI = "svn://anonsvn.opensource.apple.com/svn/llvm/;module=trunk \ diff --git a/recipes/llvm/llvm.inc b/recipes/llvm/llvm.inc index d9664aeebd..a61a99a723 100644 --- a/recipes/llvm/llvm.inc +++ b/recipes/llvm/llvm.inc @@ -1,16 +1,124 @@ +# LLVM does not provide ABI stability between different versions. For this +# reason OE makes it possible to build and install different llvm versions +# at the same time. +# +# This is true for the normal recipes as well as the native ones. +# +# All regular installation directories are prefixed with 'llvm${LLVM_RELEASE}' +# e.g. "${STAGING_BINDIR}/llvm2.5" or "${STAGING_INCDIR}/llvm2.5" +# +# For your program or library that makes use of llvm you do should not need to +# modify anything as long as it uses the results of various llvm-config +# invocations. If you need customizations something is wrong and it needs to be +# fixed (report bug). +# +# However the *recipe* for your program/library *must* declare +# export WANT_LLVM_RELEASE = "<valid version number> +# The version number is picked up by a generic wrapper script which just calls +# the variant of the specified version. + DESCRIPTION = "The Low Level Virtual Machine" HOMEPAGE = "http://llvm.org" -LICENSE = "various" -SRC_URI = "http://llvm.org/releases/1.9/llvm-${PV}.tar.gz" +DEPENDS = "llvm-common" + +# 3-clause BSD-like +LICENSE = "University of Illinois/NCSA Open Source License" + +SRC_URI = "http://llvm.org/releases/${PV}/llvm-${PV}.tar.gz" + +S = "${WORKDIR}/llvm-${PV}" + +inherit cmake + +# Defines the LLVM supported arches. By now we always build either for ${BUILD} +# (native) or ${TARGET}. In the future it may make sense to enable all backends +# for the non-native build. The decision which backends are used is made by +# the 3rd party program or library that uses llvm anyway. +LLVM_ARCH = "${@get_llvm_arch(d)}" + +# This is used for generating the install directory for the llvm libraries, +# binaries and headers. It makes side by side installation of those possible. +LLVM_RELEASE = "${PV}" + +# llvm *must* be built out of tree +OECMAKE_SOURCEPATH = ".." +OECMAKE_BUILDPATH = "build" +EXTRA_OEMAKE = "-C build" +EXTRA_OECMAKE = "\ + -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm${LLVM_RELEASE}/tblgen \ + -DLLVM_TARGETS_TO_BUILD=${LLVM_ARCH} \ + -DCMAKE_LINKER:FILEPATH=${LD} \ + -DCMAKE_AR:FILEPATH=${AR} \ + -DCMAKE_OBJCOPY:FILEPATH=${OBJCOPY} \ + -DCMAKE_OBJDUMP:FILEPATH=${OBJDUMP} \ + -DCMAKE_RANLIB:FILEPATH=${RANLIB} \ + -DCMAKE_STRIP:FILEPATH=${STRIP} \ + -DLLVM_ENABLE_PIC:BOOL=ON \ +" + +llvm_stage() { + # Install into a private directory to be able to reorganize the files. + oe_runmake DESTDIR=${WORKDIR}/llvm-install install + + # Create our custom target directories + install -d ${STAGING_BINDIR}/llvm${LLVM_RELEASE} + install -d ${STAGING_INCDIR}/llvm${LLVM_RELEASE} + install -d ${STAGING_LIBDIR}/llvm${LLVM_RELEASE} -inherit autotools + # Move headers into their own directory + cp -r ${WORKDIR}/llvm-install/${prefix}/include/llvm \ + ${STAGING_INCDIR}/llvm${LLVM_RELEASE}/ + cp -r ${WORKDIR}/llvm-install/${prefix}/include/llvm-c \ + ${STAGING_INCDIR}/llvm${LLVM_RELEASE}/ -do_configure() { - oe_runconf + # llvm somehow forgets these +# find include/llvm -name "*.h" -maxdepth 1 -exec \ +# install {} ${STAGING_INCDIR}/llvm${LLVM_RELEASE}/llvm \; + + find ${WORKDIR}/llvm-install/${prefix}/lib -name "*" -maxdepth 1 -exec \ + install {} ${STAGING_LIBDIR}/llvm${LLVM_RELEASE} \; + + # I dont know another way out. Binaries are installed into a special subdir + find ${WORKDIR}/llvm-install/${prefix}/bin -name "*" -maxdepth 1 -exec \ + install {} ${STAGING_BINDIR}/llvm${LLVM_RELEASE} \; + + # LLVM does not install this by default. + install build/bin/tblgen ${STAGING_BINDIR}/llvm${LLVM_RELEASE} + + # Fix the paths in the config script to make it find the binaries and + # library files. Doing so allows 3rd party configure scripts working + # unmodified. + sed -e's!my.*ABS_RUN_DIR =.*!my $ABS_RUN_DIR = "${STAGING_DIR_TARGET}";!' \ + -e's!my.*INCLUDEDIR =.*!my $INCLUDEDIR = "${STAGING_INCDIR}/llvm${LLVM_RELEASE}";!' \ + -e's!my.*LIBDIR.*!my $LIBDIR = "${STAGING_LIBDIR}/llvm${LLVM_RELEASE}";!' \ + -e's!my.*BINDIR.*!my $BINDIR = "${STAGING_BINDIR}/llvm${LLVM_RELEASE}";!' \ + build/bin/llvm-config > build/bin/llvm-config${LLVM_RELEASE} } do_stage() { - autotools_stage_all -} + llvm_stage + + install -d ${STAGING_BINDIR_CROSS} + install -m 0755 build/bin/llvm-config${LLVM_RELEASE} ${STAGING_BINDIR_CROSS} +} + +# Retrieve the target in a way that is compatible to the arch +# value in llvm (>= 2.5) +def get_llvm_arch(d): + import bb; + + arch = bb.data.getVar('TARGET_ARCH', d, 1) + if arch == "x86_64" or arch == "i486" or arch == "i586" or arch == "i686": + arch = "X86" + elif arch == "arm": + arch = "ARM" + elif arch == "mipsel": + arch = "Mips" + elif arch == "powerpc": + arch = "PowerPC" + else: + oefatal("Your target architecture is not supported by this recipe"); + + return arch |