mongodb: 2.6.0 -> 3.3.0 and remove from pnblacklist

Since building mongodb was impossible currently, I updated the recipe
and got it working on arm >= v6, x86 and x86_64. Unfortunately, it fails
building with system-boost for the current version 1.60. The corresponding
ticket SERVER-17294 of mongodb jira is still in progress. So we use the
built-in version of boost.

Signed-off-by: Sven Ebenfeld <sven.ebenfeld@gmail.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
This commit is contained in:
Sven Ebenfeld
2016-01-31 16:42:48 +01:00
committed by Martin Jansa
parent 142d6fb402
commit 0c024ec106
7 changed files with 105 additions and 344 deletions

View File

@@ -1,50 +0,0 @@
From f1bd00e7f54aad6479bc809c27d5cd3c2fb993eb Mon Sep 17 00:00:00 2001
From: Michael Hudson-Doyle <michael.hudson@linaro.org>
Date: Fri, 20 Dec 2013 11:10:43 +1300
Subject: [PATCH 1/5] Make it possible to disable the use of v8.
Currently v8 is always built in, no matter what you pass to scons.
This removes the (useless) --usev8 flag for scons and replaces it with a
--disable-scripting option instead.
---
SConstruct | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/SConstruct b/SConstruct
index 3886d1b..6e0ef3b 100644
--- a/SConstruct
+++ b/SConstruct
@@ -225,7 +225,7 @@ add_option( "asio" , "Use Asynchronous IO (NOT READY YET)" , 0 , True )
add_option( "ssl" , "Enable SSL" , 0 , True )
# library choices
-add_option( "usev8" , "use v8 for javascript" , 0 , True )
+add_option( "disable-scripting" , "do not build support for javascript" , 0 , True )
add_option( "libc++", "use libc++ (experimental, requires clang)", 0, True )
# mongo feature options
@@ -442,7 +442,7 @@ static = has_option( "static" )
noshell = has_option( "noshell" )
-usev8 = has_option( "usev8" )
+disable_scripting = has_option( "disable-scripting" )
asio = has_option( "asio" )
@@ -600,7 +600,10 @@ if has_option( "durableDefaultOn" ):
if has_option( "durableDefaultOff" ):
env.Append( CPPDEFINES=[ "_DURABLEDEFAULTOFF" ] )
-usev8 = True
+if disable_scripting or justClientLib:
+ usev8 = False
+else:
+ usev8 = True
extraLibPlaces = []
--
1.9.0

View File

@@ -0,0 +1,67 @@
From 53368d3f4adc09dd84234a9af31771bcd8ca2757 Mon Sep 17 00:00:00 2001
From: Sven Ebenfeld <sven.ebenfeld@gmail.com>
Date: Fri, 15 Jan 2016 22:41:28 +0100
Subject: [PATCH] Tell scons to use build settings from environment variables
Signed-off-by: Sven Ebenfeld <sven.ebenfeld@gmail.com>
---
SConstruct | 8 ++++++--
src/mongo/util/SConscript | 2 ++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/SConstruct b/SConstruct
index 5082a4b..3370f70 100644
--- a/SConstruct
+++ b/SConstruct
@@ -507,6 +507,7 @@ def variable_arch_converter(val):
'amd64': 'x86_64',
'emt64': 'x86_64',
'x86': 'i386',
+ 'aarch64': 'arm64',
}
val = val.lower()
@@ -568,7 +569,8 @@ env_vars.Add('ARFLAGS',
converter=variable_shlex_converter)
env_vars.Add('CC',
- help='Select the C compiler to use')
+ help='Select the C compiler to use',
+ default=os.getenv('CC'))
env_vars.Add('CCFLAGS',
help='Sets flags for the C and C++ compiler',
@@ -588,7 +590,8 @@ env_vars.Add('CPPPATH',
converter=variable_shlex_converter)
env_vars.Add('CXX',
- help='Select the C++ compiler to use')
+ help='Select the C++ compiler to use',
+ default=os.getenv('CXX'))
env_vars.Add('CXXFLAGS',
help='Sets flags for the C++ compiler',
@@ -818,6 +821,7 @@ envDict = dict(BUILD_ROOT=buildDir,
)
env = Environment(variables=env_vars, **envDict)
+env.PrependENVPath('PATH', os.getenv('PATH'))
del envDict
env.AddMethod(env_os_is_wrapper, 'TargetOSIs')
diff --git a/src/mongo/util/SConscript b/src/mongo/util/SConscript
index 6add602..8d05a62 100644
--- a/src/mongo/util/SConscript
+++ b/src/mongo/util/SConscript
@@ -251,6 +251,8 @@ if get_option('allocator') == 'tcmalloc':
'MONGO_HAVE_GPERFTOOLS_GET_THREAD_CACHE_SIZE'
]
)
+ if not use_system_version_of_library('valgrind'):
+ tcmspEnv.InjectThirdPartyIncludePaths('valgrind')
tcmspEnv.Library(
target='tcmalloc_set_parameter',
--
1.9.1

View File

@@ -1,25 +0,0 @@
From 5b22f64a2e2237082d2733698b07147d27b09ad2 Mon Sep 17 00:00:00 2001
From: Michael Hudson-Doyle <michael.hudson@linaro.org>
Date: Fri, 20 Dec 2013 12:28:27 +1300
Subject: [PATCH 2/5] Fix linking when scripting is disabled.
---
src/mongo/scripting/engine_none.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/mongo/scripting/engine_none.cpp b/src/mongo/scripting/engine_none.cpp
index f5c7109..9ae9d57 100644
--- a/src/mongo/scripting/engine_none.cpp
+++ b/src/mongo/scripting/engine_none.cpp
@@ -33,4 +33,8 @@ namespace mongo {
void ScriptEngine::setup() {
// noop
}
+
+ std::string ScriptEngine::getInterpreterVersionString() {
+ return "none";
+ }
}
--
1.9.0

View File

@@ -1,64 +0,0 @@
From eab4316597a8e9e7bbf845a054564c6daa4a95b7 Mon Sep 17 00:00:00 2001
From: Michael Hudson-Doyle <michael.hudson@linaro.org>
Date: Wed, 22 Jan 2014 13:53:10 +1300
Subject: [PATCH 3/5] * Do not build 'mongo' binary when scripting is disabled
* Do not build the jstests when scripting is disabled
---
SConstruct | 8 ++++++--
src/mongo/SConscript | 4 +++-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/SConstruct b/SConstruct
index 6e0ef3b..c84a669 100644
--- a/SConstruct
+++ b/SConstruct
@@ -440,10 +440,13 @@ else:
static = has_option( "static" )
-noshell = has_option( "noshell" )
-
disable_scripting = has_option( "disable-scripting" )
+if not disable_scripting:
+ noshell = has_option( "noshell" )
+else:
+ noshell = True
+
asio = has_option( "asio" )
usePCH = has_option( "usePCH" )
@@ -1662,6 +1665,7 @@ Export("get_option")
Export("has_option use_system_version_of_library")
Export("mongoCodeVersion")
Export("usev8")
+Export("disable_scripting")
Export("darwin windows solaris linux freebsd nix")
Export('module_sconscripts')
Export("debugBuild optBuild")
diff --git a/src/mongo/SConscript b/src/mongo/SConscript
index 58f8406..b4379e7 100644
--- a/src/mongo/SConscript
+++ b/src/mongo/SConscript
@@ -6,6 +6,7 @@ import os
import itertools
from buildscripts import utils
+Import("disable_scripting")
Import("env")
Import("shellEnv")
Import("testEnv")
@@ -1043,7 +1044,8 @@ test = testEnv.Install(
[ f for f in Glob("dbtests/*.cpp")
if not str(f).endswith('framework.cpp') and
not str(f).endswith('framework_options.cpp') and
- not str(f).endswith('framework_options_init.cpp') ],
+ not str(f).endswith('framework_options_init.cpp') and
+ not (str(f).endswith('jstests.cpp') and disable_scripting)],
LIBDEPS = [
"mutable_bson_test_utils",
"mongocommon",
--
1.9.0

View File

@@ -1,50 +0,0 @@
From d02f33d860f2d11f71e9056782a2e75603d6ec25 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen.kooi@linaro.org>
Date: Tue, 4 Feb 2014 10:56:35 +0100
Subject: [PATCH 4/5] replace os.uname with os.getenv(OE_TARGET_ARCH)
This fixes crosscompilation
Signed-off-by: Koen Kooi <koen.kooi@linaro.org>
Upstream-Status: Inappropiate [OE specific]
---
SConstruct | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/SConstruct b/SConstruct
index c84a669..05e2ea0 100644
--- a/SConstruct
+++ b/SConstruct
@@ -257,9 +257,9 @@ add_option( "pch" , "use precompiled headers to speed up the build (experimental
add_option( "distcc" , "use distcc for distributing builds" , 0 , False )
# debugging/profiling help
-if os.sys.platform.startswith("linux") and (os.uname()[-1] == 'x86_64'):
+if os.sys.platform.startswith("linux") and (os.getenv("OE_TARGET_ARCH") == 'x86_64'):
defaultAllocator = 'tcmalloc'
-elif (os.sys.platform == "darwin") and (os.uname()[-1] == 'x86_64'):
+elif (os.sys.platform == "darwin") and (os.getenv("OE_TARGET_ARCH") == 'x86_64'):
defaultAllocator = 'tcmalloc'
else:
defaultAllocator = 'system'
@@ -633,7 +633,7 @@ if has_option( "extralib" ):
# ---- other build setup -----
if "uname" in dir(os):
- processor = os.uname()[4]
+ processor = os.getenv("OE_TARGET_ARCH")
else:
processor = "i386"
@@ -662,7 +662,7 @@ elif linux:
env.Append( LIBS=['m'] )
- if os.uname()[4] == "x86_64" and not force32:
+ if os.getenv("OE_TARGET_ARCH") == "x86_64" and not force32:
linux64 = True
nixLibPrefix = "lib64"
env.Append( EXTRALIBPATH=["/usr/lib64" , "/lib64" ] )
--
1.9.0

View File

@@ -1,127 +0,0 @@
From e31f85e6915d4bf6ed76c5da71c235525fa4ecc3 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen.kooi@linaro.org>
Date: Mon, 14 Apr 2014 10:29:42 +0200
Subject: [PATCH 5/5] GCC 4.7+ supports atomic ops for armv5 and up, but only
exports the functions for armv6 and up. This patch works around the linker
problems associated with that.
Forward ported from http://pkgs.fedoraproject.org/cgit/mongodb.git/tree/mongodb-2.4.5-atomics.patch
Upstream-status: pending
---
src/mongo/bson/util/atomic_int.h | 26 ++++++++++++
src/mongo/platform/atomic_intrinsics_gcc_generic.h | 47 ++++++++++++++++++++++
2 files changed, 73 insertions(+)
diff --git a/src/mongo/bson/util/atomic_int.h b/src/mongo/bson/util/atomic_int.h
index 0b85363..ed02c23 100644
--- a/src/mongo/bson/util/atomic_int.h
+++ b/src/mongo/bson/util/atomic_int.h
@@ -24,6 +24,10 @@
#include "mongo/platform/compiler.h"
+#define GCC_VERSION (__GNUC__ * 10000 \
+ + __GNUC_MINOR__ * 100 \
+ + __GNUC_PATCHLEVEL__)
+
namespace mongo {
/**
@@ -72,6 +76,28 @@ namespace mongo {
InterlockedAdd((volatile long *)&x,by);
}
# endif
+#elif defined(GCC_VERSION) && GCC_VERSION >= 40700
+// in GCC version >= 4.7.0 we can use the built-in atomic operations
+
+ inline void AtomicUInt::set(unsigned newX) {
+ __atomic_store_n (&x, newX, __ATOMIC_SEQ_CST);
+ }
+ AtomicUInt AtomicUInt::operator++() { // ++prefix
+ return __atomic_add_fetch(&x, 1, __ATOMIC_SEQ_CST);
+ }
+ AtomicUInt AtomicUInt::operator++(int) { // postfix++
+ return __atomic_fetch_add(&x, 1, __ATOMIC_SEQ_CST);
+ }
+ AtomicUInt AtomicUInt::operator--() { // --prefix
+ return __atomic_add_fetch(&x, -1, __ATOMIC_SEQ_CST);
+ }
+ AtomicUInt AtomicUInt::operator--(int) { // postfix--
+ return __atomic_fetch_add(&x, -1, __ATOMIC_SEQ_CST);
+ }
+ void AtomicUInt::signedAdd(int by) {
+ __atomic_fetch_add(&x, by, __ATOMIC_SEQ_CST);
+ }
+
#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
// this is in GCC >= 4.1
inline void AtomicUInt::set(unsigned newX) { __sync_synchronize(); x = newX; }
diff --git a/src/mongo/platform/atomic_intrinsics_gcc_generic.h b/src/mongo/platform/atomic_intrinsics_gcc_generic.h
index 64a2499..b7cc176 100644
--- a/src/mongo/platform/atomic_intrinsics_gcc_generic.h
+++ b/src/mongo/platform/atomic_intrinsics_gcc_generic.h
@@ -22,8 +22,53 @@
#include <boost/utility.hpp>
+#define GCC_VERSION (__GNUC__ * 10000 \
+ + __GNUC_MINOR__ * 100 \
+ + __GNUC_PATCHLEVEL__)
+
namespace mongo {
+// If GCC version >= 4.7.0, we can use the built-in atomic operations
+#if defined(GCC_VERSION) && GCC_VERSION >= 40700
+
+ /**
+ * Instantiation of AtomicIntrinsics<>.
+ */
+ template <typename T>
+ class AtomicIntrinsics {
+ public:
+
+ static T compareAndSwap(volatile T* dest, T expected, T newValue) {
+ return __atomic_compare_exchange_n (dest, &expected, newValue, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
+ }
+
+ static T swap(volatile T* dest, T newValue) {
+ return __atomic_exchange_n (dest, newValue, __ATOMIC_SEQ_CST);
+ }
+
+ static T load(volatile const T* value) {
+ return __atomic_load_n (value, __ATOMIC_SEQ_CST);
+ }
+
+ static T loadRelaxed(volatile const T* value) {
+ return *value;
+ }
+
+ static void store(volatile T* dest, T newValue) {
+ __atomic_store_n (dest, newValue, __ATOMIC_SEQ_CST);
+ }
+
+ static T fetchAndAdd(volatile T* dest, T increment) {
+ return __atomic_fetch_add (dest, increment, __ATOMIC_SEQ_CST);
+ }
+
+ private:
+ AtomicIntrinsics();
+ ~AtomicIntrinsics();
+ };
+
+#else // GCC version < 4.7, so we must use legacy (platform-specific) atomic operations
+
/**
* Instantiation of AtomicIntrinsics<> for all word types T.
*/
@@ -67,4 +112,6 @@ namespace mongo {
~AtomicIntrinsics();
};
+#endif // GCC_VERSION >= 40700
+
} // namespace mongo
--
1.9.0

View File

@@ -3,44 +3,54 @@ LICENSE = "AGPL-3.0 & Apache-2.0"
LIC_FILES_CHKSUM = "file://GNU-AGPL-3.0.txt;md5=73f1eb20517c55bf9493b7dd6e480788 \
file://APACHE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
DEPENDS = "openssl libpcre boost libpcap"
# Mongo uses tcmalloc on x86_64, which is provided by gperftools
DEPENDS_append_x86-64 = " gperftools"
DEPENDS = "openssl libpcre libpcap zlib"
inherit scons
# Target 'build/linux2/disable-scripting/ld_arm-oe-linux-gnueabi-g++/ssl/use-system-boost/use-system-pcre/use-system-tcmalloc/mongo/mongod' depends on the availability of a system provided library for 'boost_program_options', but no suitable library was found during configuration.
# | Target 'build/linux2/disable-scripting/ld_arm-oe-linux-gnueabi-g++/ssl/use-system-boost/use-system-pcre/use-system-tcmalloc/mongo/mongod' depends on the availability of a system provided library for 'boost_program_options', but no suitable library was found during configuration.
# | scons: *** [build/linux2/disable-scripting/ld_arm-oe-linux-gnueabi-g++/ssl/use-system-boost/use-system-pcre/use-system-tcmalloc/mongo/mongod] Error 1
# | scons: building terminated because of errors.
# | ERROR: scons build execution failed.
PNBLACKLIST[mongodb] ?= "Fails to build with system boost"
PV = "2.6.0+git${SRCPV}"
SRCREV = "be1905c24c7e5ea258e537fbf0d2c502c4fc6de2"
SRC_URI = "git://github.com/mongodb/mongo.git;branch=v2.6 \
file://0001-Make-it-possible-to-disable-the-use-of-v8.patch \
file://0002-Fix-linking-when-scripting-is-disabled.patch \
file://0003-Do-not-build-mongo-binary-when-scripting-is-disabled.patch \
file://0004-replace-os.uname-with-os.getenv-OE_TARGET_ARCH.patch \
file://0005-GCC-4.7-supports-atomic-ops-for-armv5-and-up-but-onl.patch \
"
PV = "3.3.0+git${SRCPV}"
SRCREV = "aacd231be0626a204cb40908afdf62c4b67bb0ad"
SRC_URI = "git://github.com/mongodb/mongo.git;branch=master \
file://0001-Tell-scons-to-use-build-settings-from-environment-va.patch \
"
S = "${WORKDIR}/git"
export OE_TARGET_ARCH="${TARGET_ARCH}"
# Wiredtiger supports only 64-bit platforms
PACKAGECONFIG_x86-64 ??= "tcmalloc wiredtiger"
PACKAGECONFIG_aarch64 ??= "tcmalloc wiredtiger"
PACKAGECONFIG ??= "tcmalloc"
# gperftools compilation fails for arm below v7 because of missing support of
# dmb operation. So we use system-allocator instead of tcmalloc
PACKAGECONFIG_remove_armv6 = "tcmalloc"
#std::current_exception is undefined for arm < v6
COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*"
COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*"
COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"
PACKAGECONFIG[tcmalloc] = "--use-system-tcmalloc,--allocator=system,gperftools,"
PACKAGECONFIG[wiredtiger] = "--wiredtiger=on,--wiredtiger=off,,"
EXTRA_OESCONS = "--prefix=${D}${prefix} \
--propagate-shell-environment \
--cc-use-shell-environment \
--cxx-use-shell-environment \
--ld='${TARGET_PREFIX}g++' \
LIBPATH=${STAGING_LIBDIR} \
LINKFLAGS='${LDFLAGS}' \
CXXFLAGS='${CXXFLAGS}' \
TARGET_ARCH=${TARGET_ARCH} \
--ssl \
--use-system-pcre \
--use-system-boost \
--use-system-tcmalloc \
--disable-scripting \
--disable-warnings-as-errors \
--use-system-pcre \
--use-system-zlib \
--js-engine=none \
--nostrip \
${EXTRA_OECONF} \
mongod mongos"
scons_do_compile() {
${STAGING_BINDIR_NATIVE}/scons ${PARALLEL_MAKE} ${EXTRA_OESCONS} || \
die "scons build execution failed."
}
scons_do_install() {
${STAGING_BINDIR_NATIVE}/scons install ${EXTRA_OESCONS}|| \
die "scons install execution failed."
}