aboutsummaryrefslogtreecommitdiff
path: root/meta-linaro/recipes-extra
diff options
context:
space:
mode:
authorMarcin Juszkiewicz <marcin.juszkiewicz@linaro.org>2013-03-14 18:47:39 +0100
committerMarcin Juszkiewicz <marcin.juszkiewicz@linaro.org>2013-03-14 18:49:18 +0100
commitf12e88a590985ef253745f68238f0d0d1bc73f6a (patch)
treea66da7826fea80049ab4c7ac308126c03a35c3a4 /meta-linaro/recipes-extra
parent6cf4b09ea9cee9e5e964f190f3c2bf004387d098 (diff)
move our extra recipes from meta-aarch64 to meta-linaro
Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
Diffstat (limited to 'meta-linaro/recipes-extra')
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/dwarf.inc12
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/dwarfdump/fix-dump.patch25
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/dwarfdump2/fix-dump.patch27
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/dwarfdump2_20121130.bb22
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/dwarfdump_20121130.bb22
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/dwarfgen_20121130.bb13
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/libdwarf/fix-gennames.patch22
-rw-r--r--meta-linaro/recipes-extra/dwarfutils/libdwarf_20121130.bb13
-rw-r--r--meta-linaro/recipes-extra/google-glog/google-glog_svn.bb17
-rw-r--r--meta-linaro/recipes-extra/google-perftools/gperftools_2.0.bb11
-rw-r--r--meta-linaro/recipes-extra/hiphopvm/files/disable-not-available-for-aarch64.patch21
-rw-r--r--meta-linaro/recipes-extra/hiphopvm/hiphopvm_git.bb61
-rw-r--r--meta-linaro/recipes-extra/libevent/files/LICENSE.txt74
-rw-r--r--meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff611
-rw-r--r--meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb20
-rw-r--r--meta-linaro/recipes-extra/libmcrypt/libmcrypt_2.5.8.bb22
-rw-r--r--meta-linaro/recipes-extra/libmemcached/libmemcached.inc10
-rw-r--r--meta-linaro/recipes-extra/libmemcached/libmemcached_1.0.7.bb8
-rw-r--r--meta-linaro/recipes-extra/libunwind/files/aarch64.patch19
-rw-r--r--meta-linaro/recipes-extra/libunwind/libunwind.inc12
-rw-r--r--meta-linaro/recipes-extra/libunwind/libunwind_1.1.bb8
-rw-r--r--meta-linaro/recipes-extra/memcached/memcached_1.4.15.bb19
-rw-r--r--meta-linaro/recipes-extra/meta-toolchain-hhvm/meta-toolchain-hhvm.bb4
-rw-r--r--meta-linaro/recipes-extra/meta-toolchain-hhvm/packagegroup-core-standalone-hhvm-sdk-target.bb55
-rw-r--r--meta-linaro/recipes-extra/tbb/tbb/cross-compile.patch25
-rw-r--r--meta-linaro/recipes-extra/tbb/tbb/tbb.pc11
-rw-r--r--meta-linaro/recipes-extra/tbb/tbb/tbb41-aarch64.patch233
-rw-r--r--meta-linaro/recipes-extra/tbb/tbb_4.1.bb31
28 files changed, 1428 insertions, 0 deletions
diff --git a/meta-linaro/recipes-extra/dwarfutils/dwarf.inc b/meta-linaro/recipes-extra/dwarfutils/dwarf.inc
new file mode 100644
index 00000000..526f096b
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/dwarf.inc
@@ -0,0 +1,12 @@
+DEPENDS = "elfutils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=db2a565b9d860834e0f2c9cf569fb4e5"
+
+SRC_URI = "http://reality.sgiweb.org/davea/libdwarf-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "83ab49c58439254729f543be6977692b"
+SRC_URI[sha256sum] = "c0aede3a7368c27572ae1cc403c4cbdbf6eeb91a05adbb6f41c40ed78b75cdd9"
+
+S = "${WORKDIR}/dwarf-${PV}/${BPN}"
+
+inherit autotools
diff --git a/meta-linaro/recipes-extra/dwarfutils/dwarfdump/fix-dump.patch b/meta-linaro/recipes-extra/dwarfutils/dwarfdump/fix-dump.patch
new file mode 100644
index 00000000..45ca7a83
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/dwarfdump/fix-dump.patch
@@ -0,0 +1,25 @@
+---
+ Makefile.in | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- dwarfdump.orig/Makefile.in
++++ dwarfdump/Makefile.in
+@@ -104,14 +104,18 @@ naming.o: $(srcdir)/naming.c $(srcdir)/
+ # in the tree builds.
+ trivial_naming.o: $(srcdir)/naming.c
+ $(CC) $(CFLAGS) -DTRIVIAL_NAMING -c $(srcdir)/naming.c -o trivial_naming.o
+
+ tag_tree_build: $(srcdir)/tag_tree.c $(DIRINC)/dwarf.h $(HEADERS) tag_common.o makename.o common.o trivial_naming.o
++ifeq ($(NATIVE),1)
+ $(CC) $(CFLAGS) $(srcdir)/tag_tree.c tag_common.o common.o makename.o trivial_naming.o $(LDFLAGS) -o tag_tree_build
++endif
+
+ tag_attr_build: $(srcdir)/tag_attr.c $(DIRINC)/dwarf.h $(HEADERS) tag_common.o makename.o common.o trivial_naming.o
++ifeq ($(NATIVE),1)
+ $(CC) $(CFLAGS) $(srcdir)/tag_attr.c tag_common.o common.o makename.o trivial_naming.o $(LDFLAGS) -o tag_attr_build
++endif
+
+ tmp-tt-table.c tmp-tt-ext-table.c: $(srcdir)/tag_tree_ext.list $(srcdir)/tag_tree.list tag_tree_build
+ # gcc -E tag_tree.list does not work, so use a .c name
+ -rm -f tmp-t1.c
+ cp $(srcdir)/tag_tree.list tmp-t1.c
diff --git a/meta-linaro/recipes-extra/dwarfutils/dwarfdump2/fix-dump.patch b/meta-linaro/recipes-extra/dwarfutils/dwarfdump2/fix-dump.patch
new file mode 100644
index 00000000..18ffe812
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/dwarfdump2/fix-dump.patch
@@ -0,0 +1,27 @@
+---
+ Makefile.in | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- dwarfdump2.orig/Makefile.in
++++ dwarfdump2/Makefile.in
+@@ -100,14 +100,17 @@ common.o: $(srcdir)/common.cc $(srcdir)
+ # in the tree builds.
+ trivial_naming.o: $(srcdir)/naming.cc
+ $(CXX) $(CXXFLAGS) -DTRIVIAL_NAMING -c $(srcdir)/naming.cc -o trivial_naming.o
+
+ tag_tree_build: $(srcdir)/tag_tree.cc $(DIRINC)/dwarf.h $(HEADERS) tag_common.o trivial_naming.o common.o
+- $(CXX) $(CXXFLAGS) $(srcdir)/tag_tree.cc trivial_naming.o tag_common.o common.o $(LDFLAGS) -o tag_tree_build
+-
++ifeq ($(NATIVE),1)
++ $(CXX) $(CXXFLAGS) $(srcdir)/tag_tree.cc trivial_naming.o tag_common.o common.o $(LDFLAGS) -o tag_tree_build
++endif
+ tag_attr_build: $(srcdir)/tag_attr.cc $(DIRINC)/dwarf.h $(HEADERS) trivial_naming.o tag_common.o naming.o common.o
+- $(CXX) $(CXXFLAGS) $(srcdir)/tag_attr.cc trivial_naming.o tag_common.o common.o $(LDFLAGS) -o tag_attr_build
++ifeq ($(NATIVE),1)
++ $(CXX) $(CXXFLAGS) $(srcdir)/tag_attr.cc trivial_naming.o tag_common.o common.o $(LDFLAGS) -o tag_attr_build
++endif
+
+ tmp-tt-table.cc tmp-tt-ext-table.cc: $(srcdir)/tag_tree_ext.list $(srcdir)/tag_tree.list tag_tree_build
+ # gcc -E tag_tree.list does not work, so use a .cc name
+ -rm -f tmp-t1.cc
+ cp $(srcdir)/tag_tree.list tmp-t1.cc
diff --git a/meta-linaro/recipes-extra/dwarfutils/dwarfdump2_20121130.bb b/meta-linaro/recipes-extra/dwarfutils/dwarfdump2_20121130.bb
new file mode 100644
index 00000000..10999d61
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/dwarfdump2_20121130.bb
@@ -0,0 +1,22 @@
+require dwarf.inc
+
+DEPENDS = "libdwarf libdwarf-native"
+
+LIC_FILES_CHKSUM = "file://GPL.txt;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI += "file://fix-dump.patch"
+
+do_compile_prepend() {
+ oe_runmake CXX="${BUILD_CXX}" \
+ CXXFLAGS="${BUILD_CXXFLAGS} -I${S}/../libdwarf/ -I." \
+ LDFLAGS="${BUILD_LDFLAGS} -ldwarf -lelf" NATIVE=1
+ rm *.o dwarfdump
+}
+
+do_install() {
+ install -d ${D}${bindir} ${D}${mandir}/man1
+ install -m 0755 dwarfdump ${D}${bindir}
+ install -m 0644 dwarfdump.1 ${D}${mandir}/man1
+}
+
+PARALLEL_MAKE = ""
diff --git a/meta-linaro/recipes-extra/dwarfutils/dwarfdump_20121130.bb b/meta-linaro/recipes-extra/dwarfutils/dwarfdump_20121130.bb
new file mode 100644
index 00000000..1befb314
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/dwarfdump_20121130.bb
@@ -0,0 +1,22 @@
+require dwarf.inc
+
+DEPENDS = "libdwarf libdwarf-native"
+
+LIC_FILES_CHKSUM = "file://GPL.txt;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI += "file://fix-dump.patch"
+
+do_compile_prepend() {
+ oe_runmake CC="${BUILD_CC}" \
+ CFLAGS="${BUILD_CFLAGS} -I${S}/../libdwarf/ -I." \
+ LDFLAGS="${BUILD_LDFLAGS} -ldwarf -lelf" NATIVE=1
+ rm *.o dwarfdump
+}
+
+do_install() {
+ install -d ${D}${bindir} ${D}${mandir}/man1
+ install -m 0755 dwarfdump ${D}${bindir}
+ install -m 0644 dwarfdump.1 ${D}${mandir}/man1
+}
+
+PARALLEL_MAKE = ""
diff --git a/meta-linaro/recipes-extra/dwarfutils/dwarfgen_20121130.bb b/meta-linaro/recipes-extra/dwarfutils/dwarfgen_20121130.bb
new file mode 100644
index 00000000..97d3b2fe
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/dwarfgen_20121130.bb
@@ -0,0 +1,13 @@
+require dwarf.inc
+
+DEPENDS = "libdwarf libdwarf-native"
+
+LIC_FILES_CHKSUM = "file://GPL.txt;md5=751419260aa954499f7abaabaa882bbe"
+
+do_install() {
+ install -d ${D}${bindir} ${D}${mandir}/man1
+ install -m 0755 ${BPN} ${D}${bindir}
+ install -m 0644 ${BPN}.1 ${D}${mandir}/man1
+}
+
+PARALLEL_MAKE = ""
diff --git a/meta-linaro/recipes-extra/dwarfutils/libdwarf/fix-gennames.patch b/meta-linaro/recipes-extra/dwarfutils/libdwarf/fix-gennames.patch
new file mode 100644
index 00000000..901409d8
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/libdwarf/fix-gennames.patch
@@ -0,0 +1,22 @@
+---
+ Makefile.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- libdwarf.orig/Makefile.in
++++ libdwarf/Makefile.in
+@@ -135,13 +135,13 @@ libdwarf.so: dwarf_names.h dwarf_names.c
+ $(CC) $(CFLAGS) -shared $(OBJS) dwarf_names.o -o $@
+
+ none:
+ echo "do nothing"
+ common.o: $(srcdir)/common.c $(srcdir)/common.h
+- $(CC) $(CFLAGS) -c $(srcdir)/common.c
++ $(BUILD_CC) $(BUILD_CFLAGS) -c $(srcdir)/common.c
+ gennames: $(srcdir)/gennames.c $(srcdir)/dwarf.h common.o
+- $(CC) $(CFLAGS) $(srcdir)/gennames.c common.o $(LDFLAGS) -o gennames
++ $(BUILD_CC) $(BUILD_CFLAGS) $(srcdir)/gennames.c common.o $(BUILD_LDFLAGS) -o gennames
+ dwarf_names.c dwarf_names.h: gennames $(srcdir)/dwarf.h
+ rm -f dwarf_names.h dwarf_names.c
+ ./gennames @dwarf_namestable@ -i $(srcdir) -o .
+
+
diff --git a/meta-linaro/recipes-extra/dwarfutils/libdwarf_20121130.bb b/meta-linaro/recipes-extra/dwarfutils/libdwarf_20121130.bb
new file mode 100644
index 00000000..4b59b381
--- /dev/null
+++ b/meta-linaro/recipes-extra/dwarfutils/libdwarf_20121130.bb
@@ -0,0 +1,13 @@
+require dwarf.inc
+
+SRC_URI += "file://fix-gennames.patch"
+
+do_install() {
+ install -d ${D}${libdir} ${D}${includedir}/libdwarf
+ install -m 0755 libdwarf.a ${D}${libdir}
+ install -m 0644 dwarf.h libdwarf.h ${D}${includedir}/libdwarf
+}
+
+ALLOW_EMPTY_${PN} = "1"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-linaro/recipes-extra/google-glog/google-glog_svn.bb b/meta-linaro/recipes-extra/google-glog/google-glog_svn.bb
new file mode 100644
index 00000000..b70aa82e
--- /dev/null
+++ b/meta-linaro/recipes-extra/google-glog/google-glog_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "The glog library implements application-level logging. This \
+library provides logging APIs based on C++-style streams and various helper \
+macros."
+HOMEPAGE = "https://code.google.com/p/google-glog/"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dc9db360e0bbd4e46672f3fd91dd6c4b"
+
+SRC_URI = "svn://google-glog.googlecode.com/svn/;module=trunk;protocol=http"
+
+SRCREV = "${AUTOREV}"
+
+PV = "0.3.2+svn${SRCPV}"
+
+S = "${WORKDIR}/trunk"
+
+inherit autotools pkgconfig
diff --git a/meta-linaro/recipes-extra/google-perftools/gperftools_2.0.bb b/meta-linaro/recipes-extra/google-perftools/gperftools_2.0.bb
new file mode 100644
index 00000000..17177529
--- /dev/null
+++ b/meta-linaro/recipes-extra/google-perftools/gperftools_2.0.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Fast, multi-threaded malloc() and nifty performance analysis tools"
+HOMEPAGE = "http://code.google.com/p/gperftools/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=762732742c73dc6c7fbe8632f06c059a"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/g/google-perftools/google-perftools_${PV}.orig.tar.gz"
+
+SRC_URI[md5sum] = "13f6e8961bc6a26749783137995786b6"
+SRC_URI[sha256sum] = "7de3dd91f018825b1e7d332af1edace15c6211f430186febede1835069861080"
+
+inherit autotools
diff --git a/meta-linaro/recipes-extra/hiphopvm/files/disable-not-available-for-aarch64.patch b/meta-linaro/recipes-extra/hiphopvm/files/disable-not-available-for-aarch64.patch
new file mode 100644
index 00000000..3fde2f86
--- /dev/null
+++ b/meta-linaro/recipes-extra/hiphopvm/files/disable-not-available-for-aarch64.patch
@@ -0,0 +1,21 @@
+---
+ CMake/HPHPFindLibs.cmake | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+--- git.orig/CMake/HPHPFindLibs.cmake
++++ git/CMake/HPHPFindLibs.cmake
+@@ -43,12 +43,12 @@ find_package(Libinotify)
+ if (LIBINOTIFY_INCLUDE_DIR)
+ include_directories(${LIBINOTIFY_INCLUDE_DIR})
+ endif()
+
+ # unwind checks
+-find_package(Libunwind REQUIRED)
+-include_directories(${LIBUNWIND_INCLUDE_DIR})
++# find_package(Libunwind REQUIRED)
++# include_directories(${LIBUNWIND_INCLUDE_DIR})
+
+ # iconv checks
+ find_package(Libiconv REQUIRED)
+ include_directories(${LIBICONV_INCLUDE_DIR})
+ if (LIBICONV_CONST)
diff --git a/meta-linaro/recipes-extra/hiphopvm/hiphopvm_git.bb b/meta-linaro/recipes-extra/hiphopvm/hiphopvm_git.bb
new file mode 100644
index 00000000..d837dcbd
--- /dev/null
+++ b/meta-linaro/recipes-extra/hiphopvm/hiphopvm_git.bb
@@ -0,0 +1,61 @@
+DEPENDS = " \
+binutils \
+bison-native \
+boost \
+bzip2 \
+cmake \
+elfutils \
+expat \
+flex-native \
+gd \
+google-glog \
+icu \
+libcap \
+libc-client \
+libdwarf \
+libevent-fb \
+libmcrypt \
+libmemcached \
+libxml2 \
+mysql5 \
+ncurses \
+onig \
+openldap \
+openssl \
+libpam \
+pcre \
+readline \
+zlib \
+tbb \
+"
+
+# optional (for now) dependencies:
+#DEPENDS += "libunwind google-perftools"
+
+LICENSE = "PHP Zend"
+
+LIC_FILES_CHKSUM = " \
+ file://LICENSE.PHP;md5=cb564efdf78cce8ea6e4b5a4f7c05d97 \
+ file://LICENSE.ZEND;md5=69e7a9c51846dd6692f1b946f95f6c60"
+
+SRC_URI = "git://github.com/facebook/hiphop-php.git \
+ file://disable-not-available-for-aarch64.patch"
+
+SRCREV = "${AUTOREV}"
+
+S = "${WORKDIR}/git"
+
+PV = "0.0+git${SRCPV}"
+PR = "r1"
+
+do_configure_prepend() {
+ export HPHP_HOME="${B}"
+ export HPHP_LIB="${B}"/bin
+ export USE_HHVM=1
+ export BOOST_INCLUDEDIR=${STAGING_INCDIR}
+ export BOOST_LIBRARYDIR=${STAGING_LIBDIR}
+ export LIBGLOG_INCLUDE_DIR=${STAGING_INCDIR}
+ export LIBGLOG_LIBRARY=${STAGING_LIBDIR}
+}
+
+inherit cmake
diff --git a/meta-linaro/recipes-extra/libevent/files/LICENSE.txt b/meta-linaro/recipes-extra/libevent/files/LICENSE.txt
new file mode 100644
index 00000000..5a315e47
--- /dev/null
+++ b/meta-linaro/recipes-extra/libevent/files/LICENSE.txt
@@ -0,0 +1,74 @@
+Libevent is available for use under the following license, commonly known
+as the 3-clause (or "modified") BSD license:
+
+==============================
+Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
+Copyright (c) 2007-2010 Niels Provos and Nick Mathewson
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+==============================
+
+Portions of Libevent are based on works by others, also made available by
+them under the three-clause BSD license above. The copyright notices are
+available in the corresponding source files; the license is as above. Here's
+a list:
+
+log.c:
+ Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ Copyright (c) 1993 The Regents of the University of California.
+
+strlcpy.c:
+ Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+
+win32select.c:
+ Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
+
+evport.c:
+ Copyright (c) 2007 Sun Microsystems
+
+ht-internal.h:
+ Copyright (c) 2002 Christopher Clark
+
+minheap-internal.h:
+ Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
+
+==============================
+
+The arc4module is available under the following, sometimes called the
+"OpenBSD" license:
+
+ Copyright (c) 1996, David Mazieres <dm@uun.org>
+ Copyright (c) 2008, Damien Miller <djm@openbsd.org>
+
+ Permission to use, copy, modify, and distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
diff --git a/meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff b/meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff
new file mode 100644
index 00000000..0f29aac2
--- /dev/null
+++ b/meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff
@@ -0,0 +1,611 @@
+diff --git a/event.c b/event.c
+index 74ba5c4..06984b8 100644
+--- a/event.c
++++ b/event.c
+@@ -138,10 +138,12 @@ detect_monotonic(void)
+ static int
+ gettime(struct event_base *base, struct timeval *tp)
+ {
++/*
+ if (base->tv_cache.tv_sec) {
+ *tp = base->tv_cache;
+ return (0);
+ }
++*/
+
+ #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+ if (use_monotonic) {
+@@ -481,7 +483,7 @@ event_base_loop(struct event_base *base, int flags)
+ int res, done;
+
+ /* clear time cache */
+- base->tv_cache.tv_sec = 0;
++ /* base->tv_cache.tv_sec = 0; */
+
+ if (base->sig.ev_signal_added)
+ evsignal_base = base;
+@@ -533,13 +535,13 @@ event_base_loop(struct event_base *base, int flags)
+ gettime(base, &base->event_tv);
+
+ /* clear time cache */
+- base->tv_cache.tv_sec = 0;
++ /* base->tv_cache.tv_sec = 0; */
+
+ res = evsel->dispatch(base, evbase, tv_p);
+
+ if (res == -1)
+ return (-1);
+- gettime(base, &base->tv_cache);
++ /* gettime(base, &base->tv_cache); */
+
+ timeout_process(base);
+
+@@ -552,7 +554,7 @@ event_base_loop(struct event_base *base, int flags)
+ }
+
+ /* clear time cache */
+- base->tv_cache.tv_sec = 0;
++ /* base->tv_cache.tv_sec = 0; */
+
+ event_debug(("%s: asked to terminate loop.", __func__));
+ return (0);
+diff --git a/evhttp.h b/evhttp.h
+index 7ddf720..13c8b79 100644
+--- a/evhttp.h
++++ b/evhttp.h
+@@ -81,12 +81,50 @@ struct evhttp *evhttp_new(struct event_base *base);
+ * @param http a pointer to an evhttp object
+ * @param address a string containing the IP address to listen(2) on
+ * @param port the port number to listen on
+- * @return a newly allocated evhttp struct
++ * @return 0 on success, -1 on error
+ * @see evhttp_free()
+ */
+ int evhttp_bind_socket(struct evhttp *http, const char *address, u_short port);
+
+ /**
++ * Binds an HTTP server on the specified address and port, using backlog.
++ *
++ * Can be called multiple times to bind the same http server
++ * to multiple different ports.
++ *
++ * @param http a pointer to an evhttp object
++ * @param address a string containing the IP address to listen(2) on
++ * @param port the port number to listen on
++ * @param backlog the backlog value for listen(2)
++ * @return 0 on success, -1 on error
++ * @see evhttp_free()
++ */
++int evhttp_bind_socket_backlog(struct evhttp *http, const char *address, u_short port, int backlog);
++
++/**
++ * Like evhttp_bind_socket(), but returns the socket file descriptor.
++ *
++ * @param http a pointer to an evhttp object
++ * @param address a string containing the IP address to listen(2) on
++ * @param port the port number to listen on
++ * @return Socket file descriptor on success, -1 on failure
++ * @see evhttp_bind_socket()
++ */
++int evhttp_bind_socket_with_fd(struct evhttp *http, const char *address, u_short port);
++
++/**
++ * Like evhttp_bind_socket(), but returns the socket file descriptor.
++ *
++ * @param http a pointer to an evhttp object
++ * @param address a string containing the IP address to listen(2) on
++ * @param port the port number to listen on
++ * @param backlog the backlog value for listen(2)
++ * @return Socket file descriptor on success, -1 on failure
++ * @see evhttp_bind_socket()
++ */
++int evhttp_bind_socket_backlog_fd(struct evhttp *http, const char *address, u_short port, int backlog);
++
++/**
+ * Makes an HTTP server accept connections on the specified socket
+ *
+ * This may be useful to create a socket and then fork multiple instances
+@@ -105,6 +143,21 @@ int evhttp_bind_socket(struct evhttp *http, const char *address, u_short port);
+ int evhttp_accept_socket(struct evhttp *http, int fd);
+
+ /**
++ * Makes an HTTP server stop accepting connections on the specified socket
++ *
++ * This may be useful when a socket has been sent via file descriptor passing
++ * and is no longer needed by the current process.
++ *
++ * This function does not close the socket.
++ *
++ * @param http a pointer to an evhttp object
++ * @param fd a socket fd that is currently accepting connections
++ * @return 0 on success, -1 on failure.
++ * @see evhttp_accept_socket()
++ */
++int evhttp_del_accept_socket(struct evhttp *http, int fd);
++
++/**
+ * Free the previously created HTTP server.
+ *
+ * Works only if no requests are currently being served.
+@@ -134,6 +187,28 @@ void evhttp_set_gencb(struct evhttp *,
+ */
+ void evhttp_set_timeout(struct evhttp *, int timeout_in_secs);
+
++/**
++ * Limit the number of simultaneous connections via this http instance.
++ *
++ * @param http an evhttp object
++ * @param nlimit the maximum number of connections, zero is unlimited
++ */
++int evhttp_set_connection_limit(struct evhttp *http, int nlimit);
++
++/**
++ * Return the maximum number of connections allowed for this instance.
++ *
++ * @param http an evhttp object
++ */
++int evhttp_get_connection_limit(struct evhttp *http);
++
++/**
++ * Return the number of connections in this instance.
++ *
++ * @param http an evhttp object
++ */
++int evhttp_get_connection_count(struct evhttp *http);
++
+ /* Request/Response functionality */
+
+ /**
+@@ -157,6 +232,19 @@ void evhttp_send_error(struct evhttp_request *req, int error,
+ void evhttp_send_reply(struct evhttp_request *req, int code,
+ const char *reason, struct evbuffer *databuf);
+
++/**
++ * Send an HTML reply synchronously as much as possible by calling _begin().
++ * Great for a worker thread to send the reply immediately without queuing up
++ * events back to the loop. Call _end() to send the rest of the packet from
++ * event loop.
++ *
++ * When _begin() returns needs to be fed into _end() as the 1st parameter
++ * "nwritten".
++ */
++int evhttp_send_reply_sync_begin(struct evhttp_request *req, int code,
++ const char *reason, struct evbuffer *databuf);
++void evhttp_send_reply_sync_end(int nwritten, struct evhttp_request *req);
++
+ /* Low-level response interface, for streaming/chunked replies */
+ void evhttp_send_reply_start(struct evhttp_request *, int, const char *);
+ void evhttp_send_reply_chunk(struct evhttp_request *, struct evbuffer *);
+@@ -210,6 +298,7 @@ struct {
+
+ enum evhttp_request_kind kind;
+ enum evhttp_cmd_type type;
++ char *ext_method; /* webdav methods, for example */
+
+ char *uri; /* uri after HTTP request was parsed */
+
+@@ -224,6 +313,8 @@ struct {
+ int chunked:1, /* a chunked request */
+ userdone:1; /* the user has sent all data */
+
++ int referenced;
++
+ struct evbuffer *output_buffer; /* outgoing post or data */
+
+ /* Callback */
+diff --git a/http-internal.h b/http-internal.h
+index 9cd03cd..3f60f54 100644
+--- a/http-internal.h
++++ b/http-internal.h
+@@ -116,6 +116,9 @@ struct evhttp {
+ TAILQ_HEAD(httpcbq, evhttp_cb) callbacks;
+ struct evconq connections;
+
++ int connection_count;
++ int connection_limit;
++
+ int timeout;
+
+ void (*gencb)(struct evhttp_request *req, void *);
+diff --git a/http.c b/http.c
+index efcec40..e10d114 100644
+--- a/http.c
++++ b/http.c
+@@ -219,6 +219,13 @@ static int evhttp_decode_uri_internal(const char *uri, size_t length,
+ void evhttp_read(int, short, void *);
+ void evhttp_write(int, short, void *);
+
++
++void evhttp_server_drop_connection(struct evhttp_connection *evcon);
++void evhttp_server_add_connection(struct evhttp *http,
++ struct evhttp_connection *evcon);
++void evhttp_pause(struct evhttp *http);
++void evhttp_resume(struct evhttp *http);
++
+ #ifndef HAVE_STRSEP
+ /* strsep replacement for platforms that lack it. Only works if
+ * del is one character long. */
+@@ -478,7 +485,6 @@ evhttp_make_header_response(struct evhttp_connection *evcon,
+ evhttp_add_header(req->output_headers,
+ "Connection", "keep-alive");
+
+- if (req->minor == 1 || is_keepalive) {
+ /*
+ * we need to add the content length if the
+ * user did not give it, this is required for
+@@ -488,7 +494,6 @@ evhttp_make_header_response(struct evhttp_connection *evcon,
+ req->output_headers,
+ (long)EVBUFFER_LENGTH(req->output_buffer));
+ }
+- }
+
+ /* Potentially add headers for unidentified content. */
+ if (EVBUFFER_LENGTH(req->output_buffer)) {
+@@ -687,14 +692,14 @@ void
+ evhttp_write(int fd, short what, void *arg)
+ {
+ struct evhttp_connection *evcon = arg;
+- int n;
+
+ if (what == EV_TIMEOUT) {
+ evhttp_connection_fail(evcon, EVCON_HTTP_TIMEOUT);
+ return;
+ }
+
+- n = evbuffer_write(evcon->output_buffer, fd);
++ if (EVBUFFER_LENGTH(evcon->output_buffer) != 0) {
++ int n = evbuffer_write(evcon->output_buffer, fd);
+ if (n == -1) {
+ event_debug(("%s: evbuffer_write", __func__));
+ evhttp_connection_fail(evcon, EVCON_HTTP_EOF);
+@@ -706,6 +711,7 @@ evhttp_write(int fd, short what, void *arg)
+ evhttp_connection_fail(evcon, EVCON_HTTP_EOF);
+ return;
+ }
++ }
+
+ if (EVBUFFER_LENGTH(evcon->output_buffer) != 0) {
+ evhttp_add_event(&evcon->ev,
+@@ -1012,11 +1018,9 @@ evhttp_connection_free(struct evhttp_connection *evcon)
+ TAILQ_REMOVE(&evcon->requests, req, next);
+ evhttp_request_free(req);
+ }
+-
+- if (evcon->http_server != NULL) {
+- struct evhttp *http = evcon->http_server;
+- TAILQ_REMOVE(&http->connections, evcon, next);
+- }
++
++ if (evcon->http_server != NULL)
++ evhttp_server_drop_connection(evcon);
+
+ if (event_initialized(&evcon->close_ev))
+ event_del(&evcon->close_ev);
+@@ -1101,10 +1105,16 @@ evhttp_connection_reset(struct evhttp_connection *evcon)
+ }
+ evcon->state = EVCON_DISCONNECTED;
+
+- evbuffer_drain(evcon->input_buffer,
+- EVBUFFER_LENGTH(evcon->input_buffer));
+- evbuffer_drain(evcon->output_buffer,
+- EVBUFFER_LENGTH(evcon->output_buffer));
++ /*
++ * These can grow quite large if processing a large photo or video
++ * upload/download. Instead of keeping the buffers around, just
++ * free and allocate new.
++ */
++ evbuffer_free(evcon->input_buffer);
++ evcon->input_buffer = evbuffer_new();
++
++ evbuffer_free(evcon->output_buffer);
++ evcon->output_buffer = evbuffer_new();
+ }
+
+ static void
+@@ -1278,19 +1288,52 @@ evhttp_parse_request_line(struct evhttp_request *req, char *line)
+ if (line == NULL)
+ return (-1);
+ uri = strsep(&line, " ");
+- if (line == NULL)
+- return (-1);
++ if (line == NULL) {
++ version = "HTTP/1.0";
++ } else {
+ version = strsep(&line, " ");
+ if (line != NULL)
+ return (-1);
++ }
+
+ /* First line */
++ req->ext_method = NULL;
+ if (strcmp(method, "GET") == 0) {
+ req->type = EVHTTP_REQ_GET;
+ } else if (strcmp(method, "POST") == 0) {
+ req->type = EVHTTP_REQ_POST;
+ } else if (strcmp(method, "HEAD") == 0) {
+ req->type = EVHTTP_REQ_HEAD;
++ } else if (strcmp(method, "OPTIONS") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "OPTIONS";
++ } else if (strcmp(method, "REPORT") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "REPORT";
++ } else if (strcmp(method, "PROPFIND") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "PROPFIND";
++ } else if (strcmp(method, "PROPPATH") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "PROPPATH";
++ } else if (strcmp(method, "MKCOL") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "MKCOL";
++ } else if (strcmp(method, "MKCALENDAR") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "MKCALENDAR";
++ } else if (strcmp(method, "PUT") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "PUT";
++ } else if (strcmp(method, "DELETE") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "DELETE";
++ } else if (strcmp(method, "LOCK") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "LOCK";
++ } else if (strcmp(method, "UNLOCK") == 0) {
++ req->type = EVHTTP_REQ_POST;
++ req->ext_method = "UNLOCK";
+ } else {
+ event_debug(("%s: bad method %s on request %p from %s",
+ __func__, method, req, req->remote_host));
+@@ -1963,10 +2006,44 @@ evhttp_send_reply(struct evhttp_request *req, int code, const char *reason,
+ evhttp_send(req, databuf);
+ }
+
++int
++evhttp_send_reply_sync_begin(struct evhttp_request *req, int code,
++ const char *reason, struct evbuffer *databuf) {
++ evhttp_response_code(req, code, reason);
++ struct evhttp_connection *evcon = req->evcon;
++
++ assert(TAILQ_FIRST(&evcon->requests) == req);
++
++ /* xxx: not sure if we really should expose the data buffer this way */
++ if (databuf != NULL)
++ evbuffer_add_buffer(req->output_buffer, databuf);
++
++ /* Adds headers to the response */
++ evhttp_make_header(evcon, req);
++
++ return evbuffer_write(evcon->output_buffer, evcon->fd);
++}
++
++void
++evhttp_send_reply_sync_end(int nwritten, struct evhttp_request *req) {
++ struct evhttp_connection *evcon = req->evcon;
++
++ if (nwritten <= 0) {
++ evhttp_connection_fail(evcon, EVCON_HTTP_EOF);
++ } else if (EVBUFFER_LENGTH(evcon->output_buffer) == 0) {
++ evhttp_send_done(evcon, NULL);
++ } else {
++ evhttp_write_buffer(evcon, evhttp_send_done, NULL);
++ }
++}
++
++
+ void
+ evhttp_send_reply_start(struct evhttp_request *req, int code,
+ const char *reason)
+ {
++ req->referenced = 1;
++
+ evhttp_response_code(req, code, reason);
+ if (req->major == 1 && req->minor == 1) {
+ /* use chunked encoding for HTTP/1.1 */
+@@ -1986,6 +2063,8 @@ evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf)
+ if (evcon == NULL)
+ return;
+
++ if (req->referenced < 0) return;
++
+ if (req->chunked) {
+ evbuffer_add_printf(evcon->output_buffer, "%x\r\n",
+ (unsigned)EVBUFFER_LENGTH(databuf));
+@@ -2007,7 +2086,14 @@ evhttp_send_reply_end(struct evhttp_request *req)
+ return;
+ }
+
+- /* we expect no more calls form the user on this request */
++ if (req->referenced < 0) {
++ req->referenced = 0;
++ evhttp_request_free(req);
++ return;
++ }
++ req->referenced = 0;
++
++ /* we expect no more calls form the user on this request */
+ req->userdone = 1;
+
+ if (req->chunked) {
+@@ -2293,7 +2379,8 @@ accept_socket(int fd, short what, void *arg)
+ }
+
+ int
+-evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
++evhttp_bind_socket_backlog_fd(struct evhttp *http, const char *address,
++ u_short port, int backlog)
+ {
+ int fd;
+ int res;
+@@ -2301,7 +2388,7 @@ evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
+ if ((fd = bind_socket(address, port, 1 /*reuse*/)) == -1)
+ return (-1);
+
+- if (listen(fd, 128) == -1) {
++ if (listen(fd, backlog) == -1) {
+ event_warn("%s: listen", __func__);
+ EVUTIL_CLOSESOCKET(fd);
+ return (-1);
+@@ -2309,13 +2396,42 @@ evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
+
+ res = evhttp_accept_socket(http, fd);
+
+- if (res != -1)
++ if (res != -1) {
+ event_debug(("Bound to port %d - Awaiting connections ... ",
+ port));
++ return (fd);
++ }
+
+ return (res);
+ }
+
++static int
++mask_fd(int fd)
++{
++ return fd > 0 ? 0 : fd;
++}
++
++int
++evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
++{
++ return mask_fd(evhttp_bind_socket_backlog_fd(http, address, port, 128));
++}
++
++int
++evhttp_bind_socket_with_fd(struct evhttp *http, const char *address,
++ u_short port)
++{
++ return evhttp_bind_socket_backlog_fd(http, address, port, 128);
++}
++
++int
++evhttp_bind_socket_backlog(struct evhttp *http, const char *address,
++ u_short port, int backlog)
++{
++ return mask_fd(
++ evhttp_bind_socket_backlog_fd(http, address, port, backlog));
++}
++
+ int
+ evhttp_accept_socket(struct evhttp *http, int fd)
+ {
+@@ -2345,6 +2461,25 @@ evhttp_accept_socket(struct evhttp *http, int fd)
+ return (0);
+ }
+
++int
++evhttp_del_accept_socket(struct evhttp *http, int fd)
++{
++ struct evhttp_bound_socket *bound;
++ TAILQ_FOREACH(bound, &http->sockets, next) {
++ if (bound->bind_ev.ev_fd == fd)
++ break;
++ }
++
++ if (bound == NULL)
++ return (-1);
++
++ TAILQ_REMOVE(&http->sockets, bound, next);
++ event_del(&bound->bind_ev);
++ free(bound);
++
++ return (0);
++}
++
+ static struct evhttp*
+ evhttp_new_object(void)
+ {
+@@ -2527,6 +2662,11 @@ evhttp_request_new(void (*cb)(struct evhttp_request *, void *), void *arg)
+ void
+ evhttp_request_free(struct evhttp_request *req)
+ {
++ if (req->referenced) {
++ req->referenced = -1;
++ return;
++ }
++
+ if (req->remote_host != NULL)
+ free(req->remote_host);
+ if (req->uri != NULL)
+@@ -2657,13 +2797,78 @@ evhttp_get_request(struct evhttp *http, int fd,
+ * if we want to accept more than one request on a connection,
+ * we need to know which http server it belongs to.
+ */
+- evcon->http_server = http;
+- TAILQ_INSERT_TAIL(&http->connections, evcon, next);
++
++ evhttp_server_add_connection(http, evcon);
+
+ if (evhttp_associate_new_request_with_connection(evcon) == -1)
+ evhttp_connection_free(evcon);
+ }
+
++void
++evhttp_pause(struct evhttp *http)
++{
++ struct evhttp_bound_socket *bound;
++ TAILQ_FOREACH(bound, &http->sockets, next) {
++ event_del(&bound->bind_ev);
++ }
++}
++
++void
++evhttp_resume(struct evhttp *http)
++{
++ struct evhttp_bound_socket *bound;
++ TAILQ_FOREACH(bound, &http->sockets, next) {
++ event_add(&bound->bind_ev, 0);
++ }
++}
++
++int
++evhttp_get_connection_limit(struct evhttp *http)
++{
++ return http->connection_limit;
++}
++
++int
++evhttp_set_connection_limit(struct evhttp *http, int nlimit)
++{
++ int olimit = http->connection_limit;
++ http->connection_limit = nlimit;
++ return olimit;
++}
++
++int
++evhttp_get_connection_count(struct evhttp *http)
++{
++ return http != NULL ? http->connection_count : 0;
++}
++
++void
++evhttp_server_add_connection(struct evhttp *http,
++ struct evhttp_connection *evcon)
++{
++ evcon->http_server = http;
++ TAILQ_INSERT_TAIL(&http->connections, evcon, next);
++
++ http->connection_count++;
++ if (http->connection_limit > 0
++ && http->connection_count >= http->connection_limit)
++ {
++ evhttp_pause(http);
++ }
++}
++
++void
++evhttp_server_drop_connection(struct evhttp_connection *evcon)
++{
++ struct evhttp *http = evcon->http_server;
++ TAILQ_REMOVE(&http->connections, evcon, next);
++ http->connection_count--;
++ if (http->connection_limit > 0
++ && http->connection_count < http->connection_limit)
++ {
++ evhttp_resume(http);
++ }
++}
+
+ /*
+ * Network helper functions that we do not want to export to the rest of
diff --git a/meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb b/meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb
new file mode 100644
index 00000000..fda03907
--- /dev/null
+++ b/meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb
@@ -0,0 +1,20 @@
+require recipes-support/libevent/libevent_2.0.21.bb
+
+PROVIDES = "libevent"
+
+INC_PR = "1"
+
+SRC_URI = "http://github.com/downloads/libevent/libevent/libevent-${PV}-stable.tar.gz;name=archive \
+ http://libevent.org/LICENSE.txt;name=license \
+ file://libevent-1.4.14.fb-changes.diff"
+
+SRC_URI[archive.md5sum] = "a00e037e4d3f9e4fe9893e8a2d27918c"
+SRC_URI[archive.sha256sum] = "afa61b476a222ba43fc7cca2d24849ab0bbd940124400cb699915d3c60e46301"
+
+SRC_URI[license.md5sum] = "412e611443304db6a338ab32728ae297"
+SRC_URI[license.sha256sum] = "55739d5492273a7058c66b682012330a84c34eaa666f5c7030b0312573235270"
+
+
+S = "${WORKDIR}/libevent-${PV}-stable/"
+
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE.txt;md5=412e611443304db6a338ab32728ae297"
diff --git a/meta-linaro/recipes-extra/libmcrypt/libmcrypt_2.5.8.bb b/meta-linaro/recipes-extra/libmcrypt/libmcrypt_2.5.8.bb
new file mode 100644
index 00000000..0cbe189f
--- /dev/null
+++ b/meta-linaro/recipes-extra/libmcrypt/libmcrypt_2.5.8.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Replacement for the old crypt() package and crypt(1) command, with extensions."
+HOMEPAGE = "http://mcrypt.sourceforge.net/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=bbb461211a33b134d42ed5ee802b37ff"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/mcrypt/Libmcrypt/${PV}/libmcrypt-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "0821830d930a86a5c69110837c55b7da"
+SRC_URI[sha256sum] = "e4eb6c074bbab168ac47b947c195ff8cef9d51a211cdd18ca9c9ef34d27a373e"
+
+inherit autotools gettext binconfig
+
+do_configure() {
+ gnu-configize --force
+# libtoolize --force --copy
+ autoconf
+ oe_runconf
+}
+
+do_install_append() {
+ rm ${D}${libdir}/libmcrypt -r
+}
diff --git a/meta-linaro/recipes-extra/libmemcached/libmemcached.inc b/meta-linaro/recipes-extra/libmemcached/libmemcached.inc
new file mode 100644
index 00000000..448a15d0
--- /dev/null
+++ b/meta-linaro/recipes-extra/libmemcached/libmemcached.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "open source C/C++ client library and tools for the memcached server"
+DEPENDS = "libevent util-linux"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=865490941c91ba790f0ea78dec93bd60"
+
+SRC_URI = "http://launchpad.net/libmemcached/1.0/${PV}/+download/libmemcached-${PV}.tar.gz"
+
+TARGET_LDFLAGS += "-luuid"
+
+inherit autotools gettext pkgconfig
diff --git a/meta-linaro/recipes-extra/libmemcached/libmemcached_1.0.7.bb b/meta-linaro/recipes-extra/libmemcached/libmemcached_1.0.7.bb
new file mode 100644
index 00000000..0aa30505
--- /dev/null
+++ b/meta-linaro/recipes-extra/libmemcached/libmemcached_1.0.7.bb
@@ -0,0 +1,8 @@
+require libmemcached.inc
+
+SRC_URI[md5sum] = "d59a462a92d296f76bff2d9bc72b2516"
+SRC_URI[sha256sum] = "3efa86c9733eaad55d7119cb16769424e2aa6c22b3392e8f973946fce6678d81"
+
+do_configure_prepend_aarch64() {
+ export ac_cv_c_endian=little
+}
diff --git a/meta-linaro/recipes-extra/libunwind/files/aarch64.patch b/meta-linaro/recipes-extra/libunwind/files/aarch64.patch
new file mode 100644
index 00000000..9ea8d832
--- /dev/null
+++ b/meta-linaro/recipes-extra/libunwind/files/aarch64.patch
@@ -0,0 +1,19 @@
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- libunwind-1.1.orig/configure.ac
++++ libunwind-1.1/configure.ac
+@@ -135,11 +135,11 @@ AM_CONDITIONAL(OS_HPUX, expr x$target_os
+ AM_CONDITIONAL(OS_FREEBSD, expr x$target_os : xfreebsd >/dev/null)
+
+ AC_MSG_CHECKING([for ELF helper width])
+ case "${target_arch}" in
+ (arm|hppa|ppc32|x86|sh) use_elf32=yes; AC_MSG_RESULT([32]);;
+-(ia64|ppc64|x86_64) use_elf64=yes; AC_MSG_RESULT([64]);;
++(ia64|ppc64|x86_64|aarch64) use_elf64=yes; AC_MSG_RESULT([64]);;
+ (mips) use_elfxx=yes; AC_MSG_RESULT([xx]);;
+ *) AC_MSG_ERROR([Unknown ELF target: ${target_arch}])
+ esac
+ AM_CONDITIONAL(USE_ELF32, [test x$use_elf32 = xyes])
+ AM_CONDITIONAL(USE_ELF64, [test x$use_elf64 = xyes])
diff --git a/meta-linaro/recipes-extra/libunwind/libunwind.inc b/meta-linaro/recipes-extra/libunwind/libunwind.inc
new file mode 100644
index 00000000..f028766b
--- /dev/null
+++ b/meta-linaro/recipes-extra/libunwind/libunwind.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "a portable and efficient C programming interface (API) to determine the call-chain of a program"
+HOMEPAGE = "http://www.nongnu.org/libunwind"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3fced11d6df719b47505837a51c16ae5"
+
+SRC_URI = "http://download.savannah.nongnu.org/releases/${BPN}/${BPN}-${PV}.tar.gz"
+
+inherit autotools
+
+EXTRA_OECONF_arm = "--enable-debug-frame"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-linaro/recipes-extra/libunwind/libunwind_1.1.bb b/meta-linaro/recipes-extra/libunwind/libunwind_1.1.bb
new file mode 100644
index 00000000..2cca1f89
--- /dev/null
+++ b/meta-linaro/recipes-extra/libunwind/libunwind_1.1.bb
@@ -0,0 +1,8 @@
+require libunwind.inc
+
+PR = "r1"
+
+SRC_URI += "file://aarch64.patch"
+
+SRC_URI[md5sum] = "fb4ea2f6fbbe45bf032cd36e586883ce"
+SRC_URI[sha256sum] = "9dfe0fcae2a866de9d3942c66995e4b460230446887dbdab302d41a8aee8d09a"
diff --git a/meta-linaro/recipes-extra/memcached/memcached_1.4.15.bb b/meta-linaro/recipes-extra/memcached/memcached_1.4.15.bb
new file mode 100644
index 00000000..b6d436e2
--- /dev/null
+++ b/meta-linaro/recipes-extra/memcached/memcached_1.4.15.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Free & open source, high-performance, distributed memory object \
+caching system, generic in nature, but intended for use in speeding up dynamic \
+web applications by alleviating database load."
+HOMEPAGE = "http://memcached.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7e5ded7363d335e1bb18013ca08046ff"
+
+SRC_URI = "http://memcached.googlecode.com/files/memcached-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "36ea966f5a29655be1746bf4949f7f69"
+SRC_URI[sha256sum] = "169721ab7a7531add6ae9f6b14b6b5641725fe0b1f0bdf5c3a4327725901e2b4"
+
+DEPENDS = "libevent"
+
+inherit autotools
+
+do_configure_prepend_aarch64() {
+ export ac_cv_c_endian=little
+}
diff --git a/meta-linaro/recipes-extra/meta-toolchain-hhvm/meta-toolchain-hhvm.bb b/meta-linaro/recipes-extra/meta-toolchain-hhvm/meta-toolchain-hhvm.bb
new file mode 100644
index 00000000..bcb84a58
--- /dev/null
+++ b/meta-linaro/recipes-extra/meta-toolchain-hhvm/meta-toolchain-hhvm.bb
@@ -0,0 +1,4 @@
+TOOLCHAIN_TARGET_TASK = "packagegroup-core-standalone-hhvm-sdk-target"
+TOOLCHAIN_OUTPUTNAME = "${SDK_NAME}-toolchain-hhvm-${DISTRO_VERSION}"
+PROVIDES = "meta-toolchain-sdk"
+require recipes-core/meta/meta-toolchain.bb
diff --git a/meta-linaro/recipes-extra/meta-toolchain-hhvm/packagegroup-core-standalone-hhvm-sdk-target.bb b/meta-linaro/recipes-extra/meta-toolchain-hhvm/packagegroup-core-standalone-hhvm-sdk-target.bb
new file mode 100644
index 00000000..0c36439b
--- /dev/null
+++ b/meta-linaro/recipes-extra/meta-toolchain-hhvm/packagegroup-core-standalone-hhvm-sdk-target.bb
@@ -0,0 +1,55 @@
+SUMMARY = "HipHop VM porting SDK (target tools)"
+LICENSE = "MIT"
+
+inherit packagegroup
+
+RDEPENDS_${PN} = "\
+ packagegroup-core-standalone-sdk-target \
+ binutils-dev \
+ binutils-staticdev \
+ bison \
+ boost-dev \
+ boost-staticdev \
+ boost \
+ bzip2-dev \
+ cmake \
+ curl-dev \
+ elfutils-dev \
+ elfutils-staticdev \
+ expat \
+ flex \
+ gd-dev \
+ gd-staticdev \
+ google-glog-dev \
+ icu-dev \
+ libcap-dev \
+ libcap-staticdev \
+ libc-client-dev \
+ libc-client-staticdev \
+ libdwarf-dev \
+ libdwarf-staticdev \
+ libevent-fb-dev \
+ libevent-fb-staticdev \
+ libglade-dev \
+ libmcrypt-dev \
+ libmemcached-dev \
+ libmemcached-staticdev \
+ libmysqlclient-dev \
+ libmysqlclient-staticdev \
+ libmysqlclient-r-dev \
+ libmysqlclient-r-staticdev \
+ libpam-dev \
+ libpcre-dev \
+ libpcre-staticdev \
+ libxml2-dev \
+ libxml2-staticdev \
+ ncurses-dev \
+ ncurses-staticdev \
+ onig-dev \
+ openldap-dev \
+ openssl-dev \
+ openssl-staticdev \
+ readline-dev \
+ tbb-dev \
+ zlib-dev \
+ "
diff --git a/meta-linaro/recipes-extra/tbb/tbb/cross-compile.patch b/meta-linaro/recipes-extra/tbb/tbb/cross-compile.patch
new file mode 100644
index 00000000..b970a374
--- /dev/null
+++ b/meta-linaro/recipes-extra/tbb/tbb/cross-compile.patch
@@ -0,0 +1,25 @@
+Author: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
+
+Upstream-Status: unsuitable
+---
+ build/linux.gcc.inc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- tbb41_20121003oss.orig/build/linux.gcc.inc
++++ tbb41_20121003oss/build/linux.gcc.inc
+@@ -40,12 +40,13 @@ DYLIB_KEY = -shared
+ EXPORT_KEY = -Wl,--version-script,
+ LIBDL = -ldl
+
+ TBB_NOSTRICT = 1
+
+-CPLUS = g++
+-CONLY = gcc
++CPLUS = $(CXX)
++CONLY = $(CC)
++CPLUS_FLAGS = $(CXXFLAGS)
+ LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
+ LIBS += -lpthread -lrt
+ LINK_FLAGS = -Wl,-rpath-link=.
+ C_FLAGS = $(CPLUS_FLAGS)
+ # gcc 4.4 and higher support -std=c++0x
diff --git a/meta-linaro/recipes-extra/tbb/tbb/tbb.pc b/meta-linaro/recipes-extra/tbb/tbb/tbb.pc
new file mode 100644
index 00000000..644b64fb
--- /dev/null
+++ b/meta-linaro/recipes-extra/tbb/tbb/tbb.pc
@@ -0,0 +1,11 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: Threading Building Blocks
+Description: Intel's parallelism library for C++
+URL: http://www.threadingbuildingblocks.org/
+Version: 3.0+r018
+Libs: -L${libdir} -ltbb
+Cflags: -I${includedir}
diff --git a/meta-linaro/recipes-extra/tbb/tbb/tbb41-aarch64.patch b/meta-linaro/recipes-extra/tbb/tbb/tbb41-aarch64.patch
new file mode 100644
index 00000000..3366f874
--- /dev/null
+++ b/meta-linaro/recipes-extra/tbb/tbb/tbb41-aarch64.patch
@@ -0,0 +1,233 @@
+Author: Leif Lindholm <leif.lindholm@linaro.org>
+
+Upstream-Status: not there yet
+
+https://bugs.launchpad.net/linaro-aarch64/+bug/1091353
+
+diff --git a/build/linux.inc b/build/linux.inc
+index bdad142..7db323c 100644
+--- a/build/linux.inc
++++ b/build/linux.inc
+@@ -104,6 +104,9 @@ endif
+ ifeq ($(arch),sparc)
+ def_prefix = lin64
+ endif
++ifeq ($(arch),aarch64)
++ def_prefix = lin64
++endif
+ ifeq (,$(def_prefix))
+ ifeq (64,$(findstring 64,$(arch)))
+ def_prefix = lin64
+diff --git a/include/tbb/machine/linux_aarch64.h b/include/tbb/machine/linux_aarch64.h
+new file mode 100644
+index 0000000..e3ebc36
+--- /dev/null
++++ b/include/tbb/machine/linux_aarch64.h
+@@ -0,0 +1,153 @@
++/*
++ Copyright 2013 Linaro All Rights Reserved.
++
++ This file is part of Threading Building Blocks.
++
++ Threading Building Blocks is free software; you can redistribute it
++ and/or modify it under the terms of the GNU General Public License
++ version 2 as published by the Free Software Foundation.
++
++ Threading Building Blocks is distributed in the hope that it will be
++ useful, but WITHOUT ANY WARRANTY; without even the implied warranty
++ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with Threading Building Blocks; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++
++ As a special exception, you may use this file as part of a free software
++ library without restriction. Specifically, if other files instantiate
++ templates or use macros or inline functions from this file, or you compile
++ this file and link it with other files to produce an executable, this
++ file does not by itself cause the resulting executable to be covered by
++ the GNU General Public License. This exception does not however
++ invalidate any other reasons why the executable file might be covered by
++ the GNU General Public License.
++*/
++
++/*
++ This is the TBB implementation for the ARM AArch64 architecture.
++*/
++
++#ifndef __TBB_machine_H
++#error Do not include this file directly; include tbb_machine.h instead
++#endif
++
++#if !(__aarch64__)
++#error Threading Building Blocks AArch64 port requires an AArch64 architecture.
++#endif
++
++#include <sys/param.h>
++#include <unistd.h>
++
++#define __TBB_WORDSIZE 8
++
++#ifndef __BYTE_ORDER__
++ // Hopefully endianness can be validly determined at runtime.
++ // This may silently fail in some embedded systems with page-specific endianness.
++#elif __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
++ #define __TBB_BIG_ENDIAN 1
++#elif __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__
++ #define __TBB_BIG_ENDIAN 0
++#else
++ #define __TBB_BIG_ENDIAN -1 // not currently supported
++#endif
++
++
++#define __TBB_compiler_fence() __asm__ __volatile__("": : :"memory")
++#define __TBB_control_consistency_helper() __TBB_compiler_fence()
++
++#define __TBB_aarch64_inner_shareable_barrier() __asm__ __volatile__("dmb ish": : :"memory")
++#define __TBB_acquire_consistency_helper() __TBB_aarch64_inner_shareable_barrier()
++#define __TBB_release_consistency_helper() __TBB_aarch64_inner_shareable_barrier()
++#define __TBB_full_memory_fence() __TBB_aarch64_inner_shareable_barrier()
++
++//--------------------------------------------------
++// Compare and swap
++//--------------------------------------------------
++
++/**
++ * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value,
++ * returns *ptr
++ *
++ * @param ptr pointer to value in memory to be swapped with value
++ * if *ptr==comparand
++ * @param value value to assign *ptr to if *ptr==comparand
++ * @param comparand value to compare with *ptr
++ * @return value originally in memory at ptr, regardless of success
++*/
++static inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand )
++{
++ int32_t oldval, res;
++
++ do {
++ __asm__ __volatile__(
++ " ldxr %w1, [%2]\n"
++ " mov %w0, #0\n"
++ " cmp %w1, %w3\n"
++ " b.ne 1f\n"
++ " stxr %w0, %w4, [%2]\n"
++ "1:\n"
++ : "=&r" (res), "=&r" (oldval)
++ : "r" (ptr), "Ir" (value), "r" (comparand)
++ : "cc");
++ } while (res);
++
++ return oldval;
++}
++
++/**
++ * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value,
++ * returns *ptr
++ *
++ * @param ptr pointer to value in memory to be swapped with value
++ * if *ptr==comparand
++ * @param value value to assign *ptr to if *ptr==comparand
++ * @param comparand value to compare with *ptr
++ * @return value originally in memory at ptr, regardless of success
++ */
++static inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand )
++{
++ int64_t oldval;
++ int64_t res;
++
++ do {
++ __asm__ __volatile__(
++ " ldxr %1, [%2]\n"
++ " mov %w0, #0\n"
++ " cmp %1, %3\n"
++ " b.ne 1f\n"
++ " stxr %w0, %4, [%2]\n"
++ "1:\n"
++ : "=&r" (res), "=&r" (oldval)
++ : "r" (ptr), "Ir" (value), "r" (comparand)
++ : "cc");
++ } while (res);
++
++ return oldval;
++}
++
++inline void __TBB_machine_pause (int32_t delay )
++{
++ while(delay>0)
++ {
++ __TBB_compiler_fence();
++ delay--;
++ }
++}
++
++// Machine specific atomic operations
++
++#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
++#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
++//#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
++#define __TBB_Pause(V) __TBB_machine_pause(V)
++
++// Use generics for some things
++#define __TBB_USE_GENERIC_PART_WORD_CAS 1
++#define __TBB_USE_GENERIC_FETCH_ADD 1
++#define __TBB_USE_GENERIC_FETCH_STORE 1
++#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE 1
++#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE 1
++#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
+diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
+index 752062e..5342877 100644
+--- a/include/tbb/tbb_machine.h
++++ b/include/tbb/tbb_machine.h
+@@ -223,6 +223,8 @@ template<> struct atomic_selector<8> {
+ #include "machine/linux_ia64.h"
+ #elif __powerpc__
+ #include "machine/mac_ppc.h"
++ #elif __aarch64__
++ #include "machine/linux_aarch64.h"
+ #elif __TBB_GCC_BUILTIN_ATOMICS_PRESENT
+ #include "machine/gcc_generic.h"
+ #endif
+@@ -391,10 +393,12 @@ void spin_wait_until_eq( const volatile T& location, const U value ) {
+ // - The operation assumes that the architecture consistently uses either little-endian or big-endian:
+ // it does not support mixed-endian or page-specific bi-endian architectures.
+ // This function is the only use of __TBB_BIG_ENDIAN.
+-#if (__TBB_BIG_ENDIAN!=-1)
++#if (__TBB_BIG_ENDIAN==-1)
+ #if ( __TBB_USE_GENERIC_PART_WORD_CAS)
+ #error generic implementation of part-word CAS was explicitly disabled for this configuration
+ #endif
++#endif
++
+ template<typename T>
+ inline T __TBB_MaskedCompareAndSwap (volatile T * const ptr, const T value, const T comparand ) {
+ struct endianness{ static bool is_big_endian(){
+@@ -432,7 +436,6 @@ inline T __TBB_MaskedCompareAndSwap (volatile T * const ptr, const T value, cons
+ else continue; // CAS failed but the bits of interest left unchanged
+ }
+ }
+-#endif
+ template<size_t S, typename T>
+ inline T __TBB_CompareAndSwapGeneric (volatile void *ptr, T value, T comparand );
+
+diff --git a/src/tbbmalloc/frontend.cpp b/src/tbbmalloc/frontend.cpp
+index 4e81870..ddac9e0 100644
+--- a/src/tbbmalloc/frontend.cpp
++++ b/src/tbbmalloc/frontend.cpp
+@@ -653,6 +653,14 @@ static inline unsigned int highestBitPos(unsigned int n)
+ # error highestBitPos() not implemented for this platform
+ # endif
+
++#elif __aarch64__
++ __asm__ __volatile__
++ (
++ "clz %0, %1\n"
++ "mov %1, %2\n"
++ "sub %0, %1, %0\n"
++ :"=&r" (pos), "=&r" (n) :"I" (31)
++ );
+ #else
+ static unsigned int bsr[16] = {0/*N/A*/,6,7,7,8,8,8,8,9,9,9,9,9,9,9,9};
+ pos = bsr[ n>>6 ];
diff --git a/meta-linaro/recipes-extra/tbb/tbb_4.1.bb b/meta-linaro/recipes-extra/tbb/tbb_4.1.bb
new file mode 100644
index 00000000..c142721b
--- /dev/null
+++ b/meta-linaro/recipes-extra/tbb/tbb_4.1.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "Parallelism library for C++ - runtime files \
+ TBB is a library that helps you leverage multi-core processor \
+ performance without having to be a threading expert. It represents a \
+ higher-level, task-based parallelism that abstracts platform details \
+ and threading mechanism for performance and scalability."
+HOMEPAGE = "http://threadingbuildingblocks.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2c7f2caf277a3933e3acdf7f89d54cc1"
+PRDATE = "20130116"
+PR = "r${PRDATE}"
+
+SRC_URI = "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_${PRDATE}oss_src.tgz \
+ file://cross-compile.patch \
+ file://tbb.pc"
+
+S = "${WORKDIR}/tbb41_${PRDATE}oss/"
+
+SRC_URI[md5sum] = "3809790e1001a1b32d59c9fee590ee85"
+SRC_URI[sha256sum] = "4ae2c10899e3b6ef2f686013ec5901fc658444ca90178efaca6014b0665c34b6"
+
+do_compile() {
+ oe_runmake compiler=gcc arch=aarch64 runtime=cc4.7_libc2.17_kernel3.8 tbb tbbmalloc
+}
+
+do_install() {
+ install -d ${D}${includedir} ${D}${libdir}/pkgconfig
+ rm ${S}/include/tbb/index.html -f
+ cp -a ${S}/include/tbb ${D}${includedir}
+ install -m 0755 ${B}/build/linux_*_release/lib*.so* ${D}${libdir}
+ install -m 0644 ${WORKDIR}/tbb.pc ${D}${libdir}/pkgconfig
+}