summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Russell <gabriel.russell@mongodb.com>2018-06-14 10:27:17 -0400
committerGabriel Russell <gabriel.russell@mongodb.com>2018-06-14 15:28:33 -0400
commite730f7c6abee87b6f521b15d730e1044635eb7c6 (patch)
treef23de30686f5d0f8d18f514ea5890f3c62bf5669
parent739b98f6717076ad60e0771b68959c0ff73df205 (diff)
downloadmongo-e730f7c6abee87b6f521b15d730e1044635eb7c6.tar.gz
SERVER-34006 build android embedded with api version 21
-rw-r--r--SConstruct4
-rwxr-xr-xbuildscripts/runandroidsim.sh10
-rwxr-xr-xbuildscripts/setup-android-toolchain.sh40
-rw-r--r--etc/evergreen.yml81
-rw-r--r--etc/scons/android_toolchain.vars1
-rw-r--r--src/mongo/util/errno_util.cpp2
-rw-r--r--src/third_party/boost-1.60.0/libs/filesystem/src/operations.cpp7
7 files changed, 71 insertions, 74 deletions
diff --git a/SConstruct b/SConstruct
index c447f78cf3f..b76f4876ebd 100644
--- a/SConstruct
+++ b/SConstruct
@@ -2442,8 +2442,10 @@ def doConfigure(myenv):
# On 32-bit systems, we need to define this in order to get access to
# the 64-bit versions of fseek, etc.
+ # except on 32 bit android where it breaks boost
if not conf.CheckTypeSize('off_t', includes="#include <sys/types.h>", expect=8):
- myenv.Append(CPPDEFINES=["_FILE_OFFSET_BITS=64"])
+ if not env.TargetOSIs('android'):
+ myenv.Append(CPPDEFINES=["_FILE_OFFSET_BITS=64"])
conf.Finish()
diff --git a/buildscripts/runandroidsim.sh b/buildscripts/runandroidsim.sh
index 458cd93c2f8..1efb9e2aabd 100755
--- a/buildscripts/runandroidsim.sh
+++ b/buildscripts/runandroidsim.sh
@@ -1,8 +1,8 @@
#!/bin/sh
-if [ "$#" -lt "4" ]; then
+if [ "$#" -lt "5" ]; then
echo "usage:"
- echo "$0 <android-sdk-path> <sysarch> <directory> <test-path-in-directory>"
+ echo "$0 <android-sdk-path> <sysarch> <image-api-version> <directory> <test-path-in-directory>"
exit 1
fi
@@ -13,6 +13,8 @@ ANDROID_SDK=$1
shift
ANDROID_SYSTEM_IMAGE_ARCH=$1
shift
+ANDROID_IMAGE_API_VERSION=$1
+shift
DIRECTORY=$1
shift
TEST_PATH_IN_DIRECTORY=$1
@@ -40,12 +42,12 @@ cleanup() {
}
echo "Creating Android virtual device"
-echo no | $ANDROID_SDK/tools/bin/avdmanager create avd --force -k "system-images;android-24;google_apis;$ANDROID_SYSTEM_IMAGE_ARCH" --name android_avd --abi google_apis/$ANDROID_SYSTEM_IMAGE_ARCH -p android_avd
+echo no | $ANDROID_SDK/tools/bin/avdmanager create avd --force -k "system-images;android-$ANDROID_IMAGE_API_VERSION;google_apis;$ANDROID_SYSTEM_IMAGE_ARCH" --name android_avd --abi google_apis/$ANDROID_SYSTEM_IMAGE_ARCH -p android_avd
trap 'cleanup $?' INT TERM EXIT
echo "Starting the virtual device on the emulator"
-$ANDROID_SDK/emulator/emulator @android_avd -no-window -no-audio &
+$ANDROID_SDK/emulator/emulator @android_avd -no-window -no-audio -no-accel &
EMULATOR_PID=$!
echo "Waiting for the adb service to be ready for commands"
diff --git a/buildscripts/setup-android-toolchain.sh b/buildscripts/setup-android-toolchain.sh
index 4557aa693b2..1a3b73c5d8a 100755
--- a/buildscripts/setup-android-toolchain.sh
+++ b/buildscripts/setup-android-toolchain.sh
@@ -3,9 +3,9 @@
set -o verbose
set -o errexit
-_SystemImageArch=$1
+ToolchainArch=$1
shift
-_ToolchainArch=$1
+API_VERSION=$1
shift
if [ -z "$PYTHON" ] ; then
@@ -13,22 +13,30 @@ if [ -z "$PYTHON" ] ; then
fi
SDK_ROOT=$PWD/android_sdk
-mkdir $SDK_ROOT
-
-TOOLCHAIN=$PWD/android_toolchain
-mkdir $TOOLCHAIN
-
-API_VERSION=24
+if [ ! -e $SDK_ROOT ]; then
+ mkdir $SDK_ROOT
+ (
+ cd $SDK_ROOT
+ SDK_PACKAGE=sdk-tools-linux-3859397.zip
+ curl -O https://dl.google.com/android/repository/$SDK_PACKAGE
+ unzip $SDK_PACKAGE
+ echo y | ./tools/bin/sdkmanager \
+ "platforms;android-27" \
+ "ndk-bundle" \
+ "emulator" \
+ "patcher;v4" \
+ "platform-tools" \
+ "build-tools;23.0.3" \
+ "system-images;android-25;google_apis;armeabi-v7a" \
+ "system-images;android-25;google_apis;arm64-v8a" \
+ "system-images;android-21;google_apis;x86_64"
+ )
+fi
-(
- cd $SDK_ROOT
- SDK_PACKAGE=sdk-tools-linux-3859397.zip
- curl -O https://dl.google.com/android/repository/$SDK_PACKAGE
- unzip $SDK_PACKAGE
- echo y | ./tools/bin/sdkmanager "platforms;android-24" "emulator" "ndk-bundle" "platform-tools" "build-tools;23.0.3" "system-images;android-24;google_apis;$_SystemImageArch"
-)
+TOOLCHAIN=$PWD/android_toolchain-${ToolchainArch}-${API_VERSION}
+rm -rf $TOOLCHAIN
-$PYTHON $SDK_ROOT/ndk-bundle/build/tools/make_standalone_toolchain.py --arch $_ToolchainArch --api $API_VERSION --stl=libc++ --force --install-dir $TOOLCHAIN
+$PYTHON $SDK_ROOT/ndk-bundle/build/tools/make_standalone_toolchain.py --arch $ToolchainArch --api $API_VERSION --stl=libc++ --install-dir $TOOLCHAIN
echo SDK_ROOT=${SDK_ROOT}
echo TOOLCHAIN=${TOOLCHAIN}
diff --git a/etc/evergreen.yml b/etc/evergreen.yml
index b96656a7d67..69029ac2b28 100644
--- a/etc/evergreen.yml
+++ b/etc/evergreen.yml
@@ -1001,7 +1001,7 @@ functions:
set -o verbose
if [ "${setup_android_toolchain|}" = "true" ]; then
${activate_virtualenv}
- PYTHON=$python ${compile_env|} src/buildscripts/setup-android-toolchain.sh ${android_toolchain_system_image_arch} ${android_toolchain_target_arch}
+ PYTHON=$python ${compile_env|} src/buildscripts/setup-android-toolchain.sh ${android_toolchain_target_arch} ${android_toolchain_api_version}
fi
"scons cache pruning" :
@@ -1432,6 +1432,8 @@ functions:
exit_status=$?
# If compile fails we do not run any tests
if [ $exit_status -ne 0 ]; then
+ echo "Dumping build/scons/config.log"
+ cat build/scons/config.log
touch ${skip_tests}
fi
exit $exit_status
@@ -1709,10 +1711,10 @@ functions:
${compile_env|} buildscripts/runiossim.sh ${ios_sim_device} ${ios_sim_runtime} "build/mongo-embedded-sdk-${version}/bin/mongo_embedded_mongoc_client_test" --tempPath /data
elif [ ${enable_embedded_tests|false} = "android_emulator" ]; then
# strip because the binaries with debug symbols are too big for the default storage on the emulator
- find build/mongo-embedded-sdk-${version}/bin -type f | xargs $(dirname $(pwd))/android_toolchain/bin/*-linux-android*-strip
- find build/mongo-embedded-sdk-${version}/lib -type f -name "*.so" | xargs $(dirname $(pwd))/android_toolchain/bin/*-linux-android*-strip
- ${compile_env|} buildscripts/runandroidsim.sh $(dirname $(pwd))/android_sdk ${android_toolchain_system_image_arch} "build/mongo-embedded-sdk-${version}" "bin/mongo_embedded_capi_test" --tempPath /data
- ${compile_env|} buildscripts/runandroidsim.sh $(dirname $(pwd))/android_sdk ${android_toolchain_system_image_arch} "build/mongo-embedded-sdk-${version}" "bin/mongo_embedded_mongoc_client_test" --tempPath /data
+ find build/mongo-embedded-sdk-${version}/bin -type f | xargs $(dirname $(pwd))/android_toolchain-${android_toolchain_target_arch}-${android_toolchain_api_version}/bin/*-linux-android*-strip
+ find build/mongo-embedded-sdk-${version}/lib -type f -name "*.so" | xargs $(dirname $(pwd))/android_toolchain-${android_toolchain_target_arch}-${android_toolchain_api_version}/bin/*-linux-android*-strip
+ ${compile_env|} buildscripts/runandroidsim.sh $(dirname $(pwd))/android_sdk ${android_toolchain_system_image_arch} ${android_system_image_version} "build/mongo-embedded-sdk-${version}" "bin/mongo_embedded_capi_test" --tempPath /data
+ ${compile_env|} buildscripts/runandroidsim.sh $(dirname $(pwd))/android_sdk ${android_toolchain_system_image_arch} ${android_system_image_version} "build/mongo-embedded-sdk-${version}" "bin/mongo_embedded_mongoc_client_test" --tempPath /data
elif [ ${enable_embedded_tests|false} = "native" ]; then
"build/mongo-embedded-sdk-${version}/bin/mongo_embedded_capi_test"
"build/mongo-embedded-sdk-${version}/bin/mongo_embedded_mongoc_client_test"
@@ -3360,6 +3362,11 @@ tasks:
--js-engine=none
--link-model=dynamic
--prefix='$BUILD_ROOT/mongo-embedded-sdk-$MONGO_VERSION'
+ --dbg=off
+ --opt=size
+ --enable-free-mon=off
+ --use-system-mongo-c=on
+ --wiredtiger=off
CPPPATH='$BUILD_ROOT/mongo-embedded-sdk-$MONGO_VERSION/include/libbson-1.0 $BUILD_ROOT/mongo-embedded-sdk-$MONGO_VERSION/include/libmongoc-1.0'
# Need to sign artifacts on iOS-ish.
@@ -9186,11 +9193,7 @@ buildvariants:
compile_env: DEVELOPER_DIR=/Applications/Xcode9.2.app
compile_flags: >-
-j$(sysctl -n hw.logicalcpu)
- --dbg=off
- --opt=size
- --enable-free-mon=off
--variables-files=etc/scons/xcode_macos.vars
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
-DTHREADS_PTHREAD_ARG=2
@@ -9220,11 +9223,7 @@ buildvariants:
cmake_path: /Applications/cmake-3.11.0-Darwin-x86_64/CMake.app/Contents/bin/cmake
compile_flags: >-
-j$(sysctl -n hw.logicalcpu)
- --dbg=off
- --opt=size
- --enable-free-mon=off
--variables-files=etc/scons/xcode_ios.vars
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
-DTHREADS_PTHREAD_ARG=2
@@ -9254,11 +9253,7 @@ buildvariants:
compile_env: DEVELOPER_DIR=/Applications/Xcode9.2.app
compile_flags: >-
-j$(sysctl -n hw.logicalcpu)
- --dbg=off
- --opt=size
- --enable-free-mon=off
--variables-files=etc/scons/xcode_ios_sim.vars
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
-DTHREADS_PTHREAD_ARG=2
@@ -9290,11 +9285,7 @@ buildvariants:
compile_env: DEVELOPER_DIR=/Applications/XCode9.2.app
compile_flags: >-
-j$(sysctl -n hw.logicalcpu)
- --dbg=off
- --opt=size
- --enable-free-mon=off
--variables-files=etc/scons/xcode_tvos.vars
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
-DTHREADS_PTHREAD_ARG=2
@@ -9323,11 +9314,7 @@ buildvariants:
compile_env: DEVELOPER_DIR=/Applications/XCode9.2.app
compile_flags: >-
-j$(sysctl -n hw.logicalcpu)
- --dbg=off
- --opt=size
- --enable-free-mon=off
--variables-files=etc/scons/xcode_tvos_sim.vars
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
-DTHREADS_PTHREAD_ARG=2
@@ -9358,12 +9345,8 @@ buildvariants:
# We need --allocator=system here to work around SERVER-XXXXX
compile_flags: >-
-j$(grep -c ^processor /proc/cpuinfo)
- --dbg=off
- --opt=size
- --enable-free-mon=off
--variables-files=etc/scons/mongodbtoolchain_gcc.vars
--allocator=system
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags:
-DCMAKE_C_COMPILER=/opt/mongodbtoolchain/v2/bin/gcc
@@ -9387,20 +9370,16 @@ buildvariants:
compile_env: JAVA_HOME=/opt/java/jdk8/
compile_flags: >-
-j$(grep -c ^processor /proc/cpuinfo)
- --dbg=off
- --opt=size
- --enable-free-mon=off
- --android-toolchain-path=$(dirname $(pwd))/android_toolchain
+ --android-toolchain-path=$(dirname $(pwd))/android_toolchain-arm-21
--variables-files=etc/scons/android_toolchain.vars
- --use-system-mongo-c=on
LIBS=clang_rt.builtins-arm-android
- LIBPATH="$(dirname $($(dirname $(pwd))/android_toolchain/bin/clang -print-file-name=libclang_rt.builtins-arm-android.a)) \$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
+ LIBPATH="$(dirname $($(dirname $(pwd))/android_toolchain-arm-21/bin/clang -print-file-name=libclang_rt.builtins-arm-android.a)) \$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
- -DANDROID_NATIVE_API_LEVEL=24
+ -DANDROID_NATIVE_API_LEVEL=21
-DANDROID_ABI=armeabi-v7a
-DTHREADS_PTHREAD_ARG=2
-DCMAKE_TOOLCHAIN_FILE=$WORKDIR/android_sdk/ndk-bundle/build/cmake/android.toolchain.cmake
- -DCMAKE_FIND_ROOT_PATH="$WORKDIR/android_toolchain;$WORKDIR/src/build/mongo-embedded-sdk-$VERSION-tmp"
+ -DCMAKE_FIND_ROOT_PATH="$WORKDIR/android_toolchain-arm-21;$WORKDIR/src/build/mongo-embedded-sdk-$VERSION-tmp"
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
@@ -9412,7 +9391,9 @@ buildvariants:
enable_embedded_tests: android_emulator
setup_android_toolchain: true
android_toolchain_system_image_arch: "armeabi-v7a"
+ android_system_image_version: "25"
android_toolchain_target_arch: "arm"
+ android_toolchain_api_version: "21"
tasks:
- name: compile_mobile
@@ -9427,19 +9408,15 @@ buildvariants:
compile_env: JAVA_HOME=/opt/java/jdk8/
compile_flags: >-
-j$(grep -c ^processor /proc/cpuinfo)
- --dbg=off
- --opt=size
- --enable-free-mon=off
- --android-toolchain-path=$(dirname $(pwd))/android_toolchain
+ --android-toolchain-path=$(dirname $(pwd))/android_toolchain-arm64-21
--variables-files=etc/scons/android_toolchain.vars
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
- -DANDROID_NATIVE_API_LEVEL=24
+ -DANDROID_NATIVE_API_LEVEL=21
-DANDROID_ABI=arm64-v8a
-DTHREADS_PTHREAD_ARG=2
-DCMAKE_TOOLCHAIN_FILE=$WORKDIR/android_sdk/ndk-bundle/build/cmake/android.toolchain.cmake
- -DCMAKE_FIND_ROOT_PATH="$WORKDIR/android_toolchain;$WORKDIR/src/build/mongo-embedded-sdk-$VERSION-tmp"
+ -DCMAKE_FIND_ROOT_PATH="$WORKDIR/android_toolchain-arm64-21;$WORKDIR/src/build/mongo-embedded-sdk-$VERSION-tmp"
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
@@ -9451,7 +9428,9 @@ buildvariants:
enable_embedded_tests: android_emulator
setup_android_toolchain: true
android_toolchain_system_image_arch: "arm64-v8a"
+ android_system_image_version: "25"
android_toolchain_target_arch: "arm64"
+ android_toolchain_api_version: "21"
tasks:
- name: compile_mobile
@@ -9466,19 +9445,15 @@ buildvariants:
compile_env: JAVA_HOME=/opt/java/jdk8/
compile_flags: >-
-j$(grep -c ^processor /proc/cpuinfo)
- --dbg=off
- --opt=size
- --enable-free-mon=off
- --android-toolchain-path=$(dirname $(pwd))/android_toolchain
+ --android-toolchain-path=$(dirname $(pwd))/android_toolchain-x86_64-21
--variables-files=etc/scons/android_toolchain.vars
- --use-system-mongo-c=on
LIBPATH="\$BUILD_ROOT/mongo-embedded-sdk-\$MONGO_VERSION/lib"
cdriver_cmake_flags: >-
- -DANDROID_NATIVE_API_LEVEL=24
+ -DANDROID_NATIVE_API_LEVEL=21
-DANDROID_ABI=x86_64
-DTHREADS_PTHREAD_ARG=2
-DCMAKE_TOOLCHAIN_FILE=$WORKDIR/android_sdk/ndk-bundle/build/cmake/android.toolchain.cmake
- -DCMAKE_FIND_ROOT_PATH="$WORKDIR/android_toolchain;$WORKDIR/src/build/mongo-embedded-sdk-$VERSION-tmp"
+ -DCMAKE_FIND_ROOT_PATH="$WORKDIR/android_toolchain-x86_64-21;$WORKDIR/src/build/mongo-embedded-sdk-$VERSION-tmp"
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
@@ -9487,10 +9462,12 @@ buildvariants:
compile_env: JAVA_HOME=/opt/java/jdk8/
disable_unit_tests: true
# The Android x86_64 emulator requires KVM.
- enable_embedded_tests: false
+ enable_embedded_tests: android_emulator
setup_android_toolchain: true
android_toolchain_system_image_arch: "x86_64"
+ android_system_image_version: 21
android_toolchain_target_arch: "x86_64"
+ android_toolchain_api_version: "21"
tasks:
- name: compile_mobile
diff --git a/etc/scons/android_toolchain.vars b/etc/scons/android_toolchain.vars
index 10212a90ebd..cd1b00159a0 100644
--- a/etc/scons/android_toolchain.vars
+++ b/etc/scons/android_toolchain.vars
@@ -20,6 +20,7 @@ CXX=os.path.join(toolchain_path, "bin", "clang++" + compiler_suffix)
AR=subprocess.check_output([CXX, '-print-prog-name=ar']).strip()
LINKFLAGS='-static-libstdc++'
+CPPDEFINES='__ANDROID_API__=21'
TARGET_OS="android"
TOOLS="gcc g++ gnulink ar gas"
diff --git a/src/mongo/util/errno_util.cpp b/src/mongo/util/errno_util.cpp
index fca401aa129..aa6733de737 100644
--- a/src/mongo/util/errno_util.cpp
+++ b/src/mongo/util/errno_util.cpp
@@ -58,7 +58,7 @@ std::string errnoWithDescription(int errNumber) {
char buf[kBuflen];
char* msg{nullptr};
-#if defined(__GNUC__) && defined(_GNU_SOURCE)
+#if defined(__GNUC__) && defined(_GNU_SOURCE) && (__ANDROID_API__ > 22)
msg = strerror_r(errNumber, buf, kBuflen);
#elif defined(_WIN32)
diff --git a/src/third_party/boost-1.60.0/libs/filesystem/src/operations.cpp b/src/third_party/boost-1.60.0/libs/filesystem/src/operations.cpp
index b5e0f661ba6..05f67b6220b 100644
--- a/src/third_party/boost-1.60.0/libs/filesystem/src/operations.cpp
+++ b/src/third_party/boost-1.60.0/libs/filesystem/src/operations.cpp
@@ -11,6 +11,12 @@
//--------------------------------------------------------------------------------------//
// define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355)
+//
+// Mongodb modification:
+// Don't mess with _FILE_OFFSET_BITS or __USE_FILE_OFFSET64 on android because
+// it breaks compiling boost against some older android api versions
+//
+#if !(defined(__ANDROID__) && (__ANDROID_API__ < 24))
#if !(defined(__HP_aCC) && defined(_ILP32) && !defined(_STATVFS_ACPP_PROBLEMS_FIXED))
#define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect,
#endif
@@ -28,6 +34,7 @@
#else
#define _FILE_OFFSET_BITS 64
#endif
+#endif
// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
// the library is being built (possibly exporting rather than importing code)