From b30d4f8ca62a54ae6c562fd85c252d9bde54e546 Mon Sep 17 00:00:00 2001 From: Jesse Towner Date: Fri, 2 Mar 2018 21:42:30 -0800 Subject: [PATCH 1/6] Update the build process for Boost on Android The version of the external Boost-for-Android build tool has been brought up to date and the Boost.Build jam files that were available for use with Boost 1.66.0 have been backported to Boost 1.55.0 currently used by cpprestsdk. Furthermore, they have been modified to support the following features: - Added support for building with all recent Android NDK releases, including r10e, r11c, r12b, r13b, r14b, r15c and r16b. - Support for all current Android target architectures is now available and working (armeabi, armeabi-v7a, arm64-v8a, mips, mips64, x86 and x86_64). All architectures are handled by the same patch file, there is no longer any need to download and patch Boost-for-Android separately for each unique target architecture, which should speed up the build process. - Added --stl and --api options to build-android.sh for selecting the C++ runtime library and Android API level to build against. - Added --without-supportlib to disable use of Android Support Library header files, to maintain backward compatability with previous behavior. - Building Boost within Ubuntu on WSL now works correctly, as some of the environment variables used for paths weren't correctly encapsulated in quotes in order to handle paths containing space characters. The default build configuration for Boost on Android remains unchanged from the current settings. Boost is built with the gnustl_static C++ runtime library, Android-9 API level, without use of the Android Support Library and only for x86 and armeabi-v7a target architectures. However, this can now easily be changed in configure.sh by passing in different arguments to build-android.sh. --- Build_android/boost-for-android-x86.patch | 173 ------ Build_android/boost-for-android.patch | 667 +++++++++++++++++++--- Build_android/configure.sh | 38 +- 3 files changed, 600 insertions(+), 278 deletions(-) delete mode 100644 Build_android/boost-for-android-x86.patch diff --git a/Build_android/boost-for-android-x86.patch b/Build_android/boost-for-android-x86.patch deleted file mode 100644 index 4e24b988e3..0000000000 --- a/Build_android/boost-for-android-x86.patch +++ /dev/null @@ -1,173 +0,0 @@ -diff --git a/build-android.sh b/build-android.sh -index 40453f7..5902fe2 100755 ---- a/build-android.sh -+++ b/build-android.sh -@@ -195,8 +195,12 @@ case "$HOST_OS" in - PlatformOS=linux - esac - -+NDK_SOURCE_PROPERTIES=$AndroidNDKRoot"/source.properties" - NDK_RELEASE_FILE=$AndroidNDKRoot"/RELEASE.TXT" --if [ -f "${NDK_RELEASE_FILE}" ]; then -+if [ -f "${NDK_SOURCE_PROPERTIES}" ]; then -+ version=$(grep -i '^Pkg.Revision =' $NDK_SOURCE_PROPERTIES | cut -f2- -d=) -+ NDK_RN=$(echo $version | awk -F. '{print $1}') -+elif [ -f "${NDK_RELEASE_FILE}" ]; then - NDK_RN=`cat $NDK_RELEASE_FILE | sed 's/^r\(.*\)$/\1/g'` - elif [ -n "${AndroidSourcesDetected}" ]; then - if [ -f "${ANDROID_BUILD_TOP}/ndk/docs/CHANGES.html" ]; then -@@ -258,10 +262,20 @@ case "$NDK_RN" in - TOOLSET=gcc-androidR8e - ;; - "10 (64-bit)") -- TOOLCHAIN=${TOOLCHAIN:-arm-linux-androideabi-4.6} -- CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/arm-linux-androideabi-g++ -- TOOLSET=gcc-androidR8e -+ TOOLCHAIN=llvm-3.4 -+ CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang-androidR8e -+ ;; -+ "10e-rc4 (64-bit)"|"10e (64-bit)") -+ TOOLCHAIN=llvm-3.6 -+ CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang-androidR8e - ;; -+ 11) -+ TOOLCHAIN=llvm -+ CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang-androidR8e -+ ;; - *) - echo "Undefined or not supported Android NDK version!" - exit 1 -@@ -391,6 +405,7 @@ echo "Building boost for android" - export AndroidBinariesPath=`dirname $CXXPATH` - export PATH=$AndroidBinariesPath:$PATH - export AndroidNDKRoot -+ export PlatformOS - export NO_BZIP2=1 - - cxxflags="" -@@ -405,7 +420,7 @@ echo "Building boost for android" - --layout=versioned \ - --prefix="./../$BUILD_DIR/" \ - $LIBRARIES \ -- install 2>&1 \ -+ release debug install 2>&1 \ - || { dump "ERROR: Failed to build boost for android!" ; exit 1 ; } - } | tee -a $PROGDIR/build.log - -diff --git a/configs/user-config-boost-1_55_0.jam b/configs/user-config-boost-1_55_0.jam -index 666d4c8..93aba68 100644 ---- a/configs/user-config-boost-1_55_0.jam -+++ b/configs/user-config-boost-1_55_0.jam -@@ -39,93 +39,47 @@ - - import os ; - local AndroidNDKRoot = [ os.environ AndroidNDKRoot ] ; -+local PlatformOS = [ os.environ PlatformOS ] ; - - # -------------------------------------------------------------------- --# Is same for 8b, 8c and 8d --using gcc : androidR8b -+using clang : androidR8e - : --arm-linux-androideabi-g++ -+$(AndroidNDKRoot)/toolchains/llvm/prebuilt/$(PlatformOS)-x86_64/bin/clang++ - : --arm-linux-androideabi-ar -+--gcc-toolchain="$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/$(PlatformOS)-x86_64" - -fexceptions - -frtti - -fpic - -ffunction-sections - -funwind-tables ---D__ARM_ARCH_5__ ---D__ARM_ARCH_5T__ ---D__ARM_ARCH_5E__ ---D__ARM_ARCH_5TE__ ---Wno-psabi ---march=armv5te ---mtune=xscale ---msoft-float ---mthumb -+-fstack-protector -+-no-canonical-prefixes -+--target=i686-none-linux-android -+--sysroot="$(AndroidNDKRoot)/platforms/android-9/arch-x86" - -Os - -fomit-frame-pointer ---fno-strict-aliasing ---finline-limit=64 ---I$(AndroidNDKRoot)/platforms/android-9/arch-arm/usr/include -+-fstrict-aliasing - -Wa,--noexecstack - -DANDROID - -D__ANDROID__ - -DNDEBUG - -O2 - -g ---I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.6/include ---I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include -+-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include -+-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include -+--target=i686-none-linux-android -+--gcc-toolchain="$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/$(PlatformOS)-x86_64" -+--sysroot=$(AndroidNDKRoot)/platforms/android-9/arch-x86 - # @Moss - Above are the 'oficial' android flags --arm -+i686 - -fvisibility=hidden - -fvisibility-inlines-hidden - -fdata-sections ---D__arm__ - -D_REENTRANT - -D_GLIBCXX__PTHREADS -+-std=c++11 - ; - --# -------------------------------------------------------------------- --using gcc : androidR8e --: --arm-linux-androideabi-g++ --: --arm-linux-androideabi-ar ---fexceptions ---frtti ---fpic ---ffunction-sections ---funwind-tables ---D__ARM_ARCH_5__ ---D__ARM_ARCH_5T__ ---D__ARM_ARCH_5E__ ---D__ARM_ARCH_5TE__ ---Wno-psabi ---march=armv5te ---mtune=xscale ---msoft-float ---mthumb ---Os ---fomit-frame-pointer ---fno-strict-aliasing ---finline-limit=64 ---I$(AndroidNDKRoot)/platforms/android-9/arch-arm/usr/include ---Wa,--noexecstack ---DANDROID ---D__ANDROID__ ---DNDEBUG ---O2 ---g ---I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.6/include ---I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include --# @Moss - Above are the 'oficial' android flags --arm ---fvisibility=hidden ---fvisibility-inlines-hidden ---fdata-sections ---D__arm__ ---D_REENTRANT ---D_GLIBCXX__PTHREADS --; - - - # ------------------ diff --git a/Build_android/boost-for-android.patch b/Build_android/boost-for-android.patch index 2b86e8f833..d7f0f867ca 100644 --- a/Build_android/boost-for-android.patch +++ b/Build_android/boost-for-android.patch @@ -1,8 +1,61 @@ diff --git a/build-android.sh b/build-android.sh -index 40453f7..5902fe2 100755 +index ad0707e..017c86d 100755 --- a/build-android.sh +++ b/build-android.sh -@@ -195,8 +195,12 @@ case "$HOST_OS" in +@@ -93,16 +93,20 @@ do_download () + #LIBRARIES=--with-libraries=date_time,filesystem,program_options,regex,signals,system,thread,iostreams,locale + LIBRARIES= + register_option "--with-libraries=" do_with_libraries "Comma separated list of libraries to build." +-do_with_libraries () { +- for lib in $(echo $1 | tr ',' '\n') ; do LIBRARIES="--with-$lib ${LIBRARIES}"; done ++do_with_libraries () { ++ for lib in $(echo $1 | tr ',' '\n') ; do LIBRARIES="--with-$lib ${LIBRARIES}"; done + } + + register_option "--without-libraries=" do_without_libraries "Comma separated list of libraries to exclude from the build." + do_without_libraries () { LIBRARIES="--without-libraries=$1"; } +-do_without_libraries () { +- for lib in $(echo $1 | tr ',' '\n') ; do LIBRARIES="--without-$lib ${LIBRARIES}"; done ++do_without_libraries () { ++ for lib in $(echo $1 | tr ',' '\n') ; do LIBRARIES="--without-$lib ${LIBRARIES}"; done + } + ++SUPPORTLIB=on ++register_option "--without-supportlib" do_without_supportlib "Disables use of the Android NDK Support Library header files." ++do_without_supportlib () { SUPPORTLIB=off; } ++ + register_option "--prefix=" do_prefix "Prefix to be used when installing libraries and includes." + do_prefix () { + if [ -d $1 ]; then +@@ -116,6 +120,14 @@ do_arch () { + for ARCH in $(echo $1 | tr ',' '\n') ; do ARCHLIST="$ARCH ${ARCHLIST}"; done + } + ++STL=libcxx_static ++register_option "--stl=" do_select_stl "Select the C++ runtime library. Can be one of libcxx_static, libcxx_shared, gnustl_static or gnustl_shared." ++do_select_stl () { STL=$1; } ++ ++API=15 ++register_option "--api=" do_select_api "Select the Android API Level. Default is 15 for 32-bit architectures and 21 for 64-bit architectures." ++do_select_api () { API=$1; } ++ + PROGRAM_PARAMETERS="" + PROGRAM_DESCRIPTION=\ + " Boost For Android\n"\ +@@ -139,10 +151,10 @@ BUILD_DIR="./build/" + if [ $CLEAN = yes ] ; then + echo "Cleaning: $BUILD_DIR" + rm -f -r $PROGDIR/$BUILD_DIR +- ++ + echo "Cleaning: $BOOST_DIR" + rm -f -r $PROGDIR/$BOOST_DIR +- ++ + echo "Cleaning: $BOOST_TAR" + rm -f $PROGDIR/$BOOST_TAR + +@@ -209,8 +221,12 @@ case "$HOST_OS" in PlatformOS=linux esac @@ -16,72 +69,353 @@ index 40453f7..5902fe2 100755 NDK_RN=`cat $NDK_RELEASE_FILE | sed 's/^r\(.*\)$/\1/g'` elif [ -n "${AndroidSourcesDetected}" ]; then if [ -f "${ANDROID_BUILD_TOP}/ndk/docs/CHANGES.html" ]; then -@@ -258,10 +262,20 @@ case "$NDK_RN" in +@@ -233,8 +249,20 @@ else + fi + fi + ++# Older Android NDK releases have libc++/libc++abi include directories in different location ++NDK_LIBCXX_INCLUDE=$AndroidNDKRoot"/sources/cxx-stl/llvm-libc++/include" ++if [ ! -d "${NDK_LIBCXX_INCLUDE}" ]; then ++ NDK_LIBCXX_INCLUDE=$AndroidNDKRoot"/sources/cxx-stl/llvm-libc++/libcxx/include" ++fi ++ ++NDK_LIBCXXABI_INCLUDE=$AndroidNDKRoot"/sources/cxx-stl/llvm-libc++abi/include" ++if [ ! -d "${NDK_LIBCXXABI_INCLUDE}" ]; then ++ NDK_LIBCXXABI_INCLUDE=$AndroidNDKRoot"/sources/cxx-stl/llvm-libc++abi/libcxxabi/include" ++fi ++ + echo "Detected Android NDK version $NDK_RN" + ++UNIFIED_HEADERS=off + case "$NDK_RN" in + 4*) + TOOLCHAIN=${TOOLCHAIN:-arm-eabi-4.4.0} +@@ -277,20 +305,26 @@ case "$NDK_RN" in TOOLSET=gcc-androidR8e ;; - "10 (64-bit)") + "10 (64-bit)"|"10b (64-bit)"|"10c (64-bit)"|"10d (64-bit)") - TOOLCHAIN=${TOOLCHAIN:-arm-linux-androideabi-4.6} -- CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/arm-linux-androideabi-g++ -- TOOLSET=gcc-androidR8e +- CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/arm-linux-androideabi-g++ +- TOOLSET=gcc-androidR8e + TOOLCHAIN=llvm-3.4 + CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang-androidR8e -+ ;; ++ TOOLSET=clang + ;; +- "10 (64-bit)"|"10b (64-bit)"|"10c (64-bit)"|"10d (64-bit)") +- TOOLCHAIN=${TOOLCHAIN:-arm-linux-androideabi-4.6} +- CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/arm-linux-androideabi-g++ +- TOOLSET=gcc-androidR8e + "10e-rc4 (64-bit)"|"10e (64-bit)") + TOOLCHAIN=llvm-3.6 + CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang-androidR8e - ;; -+ 11) -+ TOOLCHAIN=llvm ++ TOOLSET=clang + ;; +- 16.*) ++ 11*|12*|13*) + TOOLCHAIN=${TOOLCHAIN:-llvm} + CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ + TOOLSET=clang + ;; ++ 14*|15*|16*) ++ TOOLCHAIN=${TOOLCHAIN:-llvm} + CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang-androidR8e ++ TOOLSET=clang ++ UNIFIED_HEADERS=on + ;; *) - echo "Undefined or not supported Android NDK version!" + echo "Undefined or not supported Android NDK version: $NDK_RN" exit 1 -@@ -391,6 +405,7 @@ echo "Building boost for android" - export AndroidBinariesPath=`dirname $CXXPATH` - export PATH=$AndroidBinariesPath:$PATH +@@ -362,7 +396,7 @@ then + # Make the initial bootstrap + echo "Performing boost bootstrap" + +- cd $BOOST_DIR ++ cd $BOOST_DIR + case "$HOST_OS" in + windows) + cmd //c "bootstrap.bat" 2>&1 | tee -a $PROGDIR/build.log +@@ -377,7 +411,7 @@ then + exit 1 + fi + cd $PROGDIR +- ++ + # ------------------------------------------------------------- + # Patching will be done only if we had a successfull bootstrap! + # ------------------------------------------------------------- +@@ -387,17 +421,23 @@ then + PATCH_BOOST_DIR=$PROGDIR/patches/boost-${BOOST_VER} + + if [ "$TOOLSET" = "clang" ]; then +- cp configs/user-config-boost-${BOOST_VER}.jam $BOOST_DIR/tools/build/src/user-config.jam || exit 1 ++ if [ -d $BOOST_DIR/tools/build/src ]; then ++ BOOST_BUILD_DIR=$BOOST_DIR/tools/build/src ++ else ++ BOOST_BUILD_DIR=$BOOST_DIR/tools/build/v2 ++ fi ++ cp configs/user-config-boost-${BOOST_VER}.jam $BOOST_BUILD_DIR/user-config.jam || exit 1 + for FILE in configs/user-config-boost-${BOOST_VER}-*.jam; do + ARCH="`echo $FILE | sed s%configs/user-config-boost-${BOOST_VER}-%% | sed s/[.]jam//`" +- if [ "$ARCH" = "common" ]; then ++ if [ "$ARCH" = "common" ] || [ "$ARCH" = "toolset" ]; then + continue + fi + JAMARCH="`echo ${ARCH} | tr -d '_-'`" # Remove all dashes, bjam does not like them +- sed "s/%ARCH%/${JAMARCH}/g" configs/user-config-boost-${BOOST_VER}-common.jam >> $BOOST_DIR/tools/build/src/user-config.jam || exit 1 +- cat configs/user-config-boost-${BOOST_VER}-$ARCH.jam >> $BOOST_DIR/tools/build/src/user-config.jam || exit 1 +- echo ';' >> $BOOST_DIR/tools/build/src/user-config.jam || exit 1 ++ sed "s/%ARCH%/${JAMARCH}/g" configs/user-config-boost-${BOOST_VER}-common.jam >> $BOOST_BUILD_DIR/user-config.jam || exit 1 ++ cat configs/user-config-boost-${BOOST_VER}-$ARCH.jam >> $BOOST_BUILD_DIR/user-config.jam || exit 1 ++ echo ';' >> $BOOST_BUILD_DIR/user-config.jam || exit 1 + done ++ cat configs/user-config-boost-${BOOST_VER}-toolset.jam >> $BOOST_BUILD_DIR/user-config.jam || exit 1 + else + cp configs/user-config-boost-${BOOST_VER}.jam $BOOST_DIR/tools/build/v2/user-config.jam || exit 1 + fi +@@ -462,24 +502,38 @@ echo "Building boost for android for $ARCH" + + cd $BOOST_DIR + ++ # 64-bit target architectures require at least API level 21 ++ AndroidApiLevel=$API ++ if [ $API -lt 21 ] && ( [ "$ARCH" = "arm64-v8a" ] || [ "$ARCH" = "mips64" ] || [ "$ARCH" = "x86_64" ] ); then ++ AndroidApiLevel=21 ++ fi ++ + echo "Adding pathname: `dirname $CXXPATH`" + # `AndroidBinariesPath` could be used by user-config-boost-*.jam +- export AndroidBinariesPath=`dirname $CXXPATH` +- export PATH=$AndroidBinariesPath:$PATH ++ export PATH="$AndroidBinariesPath:$PATH" export AndroidNDKRoot -+ export PlatformOS - export NO_BZIP2=1 +- export NO_BZIP2=1 ++ export AndroidApiLevel ++ export AndroidBinariesPath=`dirname $CXXPATH` ++ export AndroidLibCxxInclude=${NDK_LIBCXX_INCLUDE} ++ export AndroidLibCxxAbiInclude=${NDK_LIBCXXABI_INCLUDE} + export PlatformOS ++ export NO_BZIP2=1 + cflags="" + for flag in $CFLAGS; do cflags="$cflags cflags=$flag"; done cxxflags="" -@@ -405,7 +420,7 @@ echo "Building boost for android" - --layout=versioned \ - --prefix="./../$BUILD_DIR/" \ - $LIBRARIES \ -- install 2>&1 \ -+ release debug install 2>&1 \ - || { dump "ERROR: Failed to build boost for android!" ; exit 1 ; } - } | tee -a $PROGDIR/build.log + for flag in $CXXFLAGS; do cxxflags="$cxxflags cxxflags=$flag"; done ++ ANDROID_FEATURES="" + LIBRARIES_BROKEN="" +- if [ "$TOOLSET" = "clang" ]; then ++ if [ "$TOOLSET" = "clang" ] && ( [ $BOOST_VER1 -gt 1 ] || [ $BOOST_VER2 -ge 55 ] ); then ++ ANDROID_FEATURES="android-stl=${STL} android-support=${SUPPORTLIB} android-unified-headers=${UNIFIED_HEADERS}" + JAMARCH="`echo ${ARCH} | tr -d '_-'`" # Remove all dashes, bjam does not like them + TOOLSET_ARCH=${TOOLSET}-${JAMARCH} + TARGET_OS=android ++ if [ $BOOST_VER1 = 1 ] && [ $BOOST_VER2 = 55 ]; then ++ TARGET_OS=linux ++ fi + if [ "$ARCH" = "armeabi" ]; then + if [ -z "$LIBRARIES" ]; then + echo "Disabling boost_math library on armeabi architecture, because of broken toolchain" | tee -a $PROGDIR/build.log +@@ -504,6 +558,7 @@ echo "Building boost for android for $ARCH" + -j$NCPU \ + target-os=${TARGET_OS} \ + toolset=${TOOLSET_ARCH} \ ++ $ANDROID_FEATURES \ + $cflags \ + $cxxflags \ + link=static \ +diff --git a/configs/user-config-boost-1_55_0-arm64-v8a.jam b/configs/user-config-boost-1_55_0-arm64-v8a.jam +new file mode 100644 +index 0000000..4ed01c8 +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-arm64-v8a.jam +@@ -0,0 +1,5 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/aarch64-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++aarch64-none-linux-android ++-fpic +diff --git a/configs/user-config-boost-1_55_0-armeabi-v7a.jam b/configs/user-config-boost-1_55_0-armeabi-v7a.jam +new file mode 100644 +index 0000000..3c70384 +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-armeabi-v7a.jam +@@ -0,0 +1,10 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++armv7-none-linux-androideabi ++-march=armv7-a ++-mfloat-abi=softfp ++-mfpu=vfpv3-d16 ++-mthumb ++-fpic ++-fno-integrated-as +diff --git a/configs/user-config-boost-1_55_0-armeabi.jam b/configs/user-config-boost-1_55_0-armeabi.jam +new file mode 100644 +index 0000000..7867ef1 +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-armeabi.jam +@@ -0,0 +1,10 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++armv5te-none-linux-androideabi ++-march=armv5te ++-mtune=xscale ++-msoft-float ++-mthumb ++-fpic ++-fno-integrated-as +diff --git a/configs/user-config-boost-1_55_0-common.jam b/configs/user-config-boost-1_55_0-common.jam +new file mode 100644 +index 0000000..6283038 +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-common.jam +@@ -0,0 +1,25 @@ ++ ++# -------------------------------------------------------------------- ++ ++using clang : %ARCH% ++: ++$(AndroidBinariesPath)/clang++ ++: ++$(AndroidBinariesPath)/llvm-ar ++-fexceptions ++-frtti ++-ffunction-sections ++-funwind-tables ++-fstack-protector-strong ++-Wno-invalid-command-line-argument ++-Wno-unused-command-line-argument ++-Wno-unused-local-typedef ++-no-canonical-prefixes ++-DANDROID ++-D__ANDROID_API__=$(AndroidApiLevel) ++-Wa,--noexecstack ++-Wformat ++-Werror=format-security ++-DNDEBUG ++-O2 ++-g +diff --git a/configs/user-config-boost-1_55_0-mips.jam b/configs/user-config-boost-1_55_0-mips.jam +new file mode 100644 +index 0000000..a079f13 +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-mips.jam +@@ -0,0 +1,6 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/mipsel-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++mipsel-none-linux-android ++-mips32 ++-fpic +diff --git a/configs/user-config-boost-1_55_0-mips64.jam b/configs/user-config-boost-1_55_0-mips64.jam +new file mode 100644 +index 0000000..511f54c +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-mips64.jam +@@ -0,0 +1,6 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++mips64el-none-linux-android ++-fpic ++-fintegrated-as +diff --git a/configs/user-config-boost-1_55_0-toolset.jam b/configs/user-config-boost-1_55_0-toolset.jam +new file mode 100644 +index 0000000..78979bc +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-toolset.jam +@@ -0,0 +1,42 @@ ++ ++# -------------------------------------------------------------------- ++ ++# android-stl toolset options ++toolset.flags clang-linux.compile OPTIONS libcxx_shared : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS libcxx_static : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++ ++# android-unified-headers toolset options ++toolset.flags clang-linux.compile OPTIONS on/clang-x86 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/i686-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-x8664 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/x86_64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabi : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/aarch64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mipsel-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips64 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mips64el-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x86 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x8664 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86_64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabi : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips64 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips64" : unchecked ; ++ ++# android-support toolset options ++toolset.flags clang-linux.compile OPTIONS on : "-isystem $(AndroidNDKRoot)/sources/android/support/include" : unchecked ; ++ +diff --git a/configs/user-config-boost-1_55_0-x86.jam b/configs/user-config-boost-1_55_0-x86.jam +new file mode 100644 +index 0000000..57cbf64 +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-x86.jam +@@ -0,0 +1,6 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++i686-none-linux-android ++-fPIC ++-mstackrealign +diff --git a/configs/user-config-boost-1_55_0-x86_64.jam b/configs/user-config-boost-1_55_0-x86_64.jam +new file mode 100644 +index 0000000..e343032 +--- /dev/null ++++ b/configs/user-config-boost-1_55_0-x86_64.jam +@@ -0,0 +1,5 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/x86_64-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++x86_64-none-linux-android ++-fPIC diff --git a/configs/user-config-boost-1_55_0.jam b/configs/user-config-boost-1_55_0.jam -index 666d4c8..cdab118 100644 +index 666d4c8..4683d9f 100644 --- a/configs/user-config-boost-1_55_0.jam +++ b/configs/user-config-boost-1_55_0.jam -@@ -39,84 +39,44 @@ +@@ -37,150 +37,23 @@ + # Android configurations. + # ------------------ ++import feature ; import os ; - local AndroidNDKRoot = [ os.environ AndroidNDKRoot ] ; -+local PlatformOS = [ os.environ PlatformOS ] ; - - # -------------------------------------------------------------------- +-local AndroidNDKRoot = [ os.environ AndroidNDKRoot ] ; +- +-# -------------------------------------------------------------------- -# Is same for 8b, 8c and 8d -using gcc : androidR8b -+using clang : androidR8e - : +-: -arm-linux-androideabi-g++ -+$(AndroidNDKRoot)/toolchains/llvm/prebuilt/$(PlatformOS)-x86_64/bin/clang++ - : +-: -arm-linux-androideabi-ar -+--gcc-toolchain="$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64" - -fexceptions - -frtti - -fpic - -ffunction-sections - -funwind-tables +--fexceptions +--frtti +--fpic +--ffunction-sections +--funwind-tables --D__ARM_ARCH_5__ --D__ARM_ARCH_5T__ --D__ARM_ARCH_5E__ @@ -90,12 +424,7 @@ index 666d4c8..cdab118 100644 --march=armv5te --mtune=xscale --msoft-float -+-no-canonical-prefixes -+--target=armv7-none-linux-androideabi -+-march=armv7-a -+-mfloat-abi=softfp -+-mfpu=vfpv3-d16 - -mthumb +--mthumb --Os --fomit-frame-pointer --fno-strict-aliasing @@ -130,46 +459,222 @@ index 666d4c8..cdab118 100644 --fpic --ffunction-sections --funwind-tables -+--sysroot="$(AndroidNDKRoot)/platforms/android-9/arch-arm" - -D__ARM_ARCH_5__ - -D__ARM_ARCH_5T__ - -D__ARM_ARCH_5E__ - -D__ARM_ARCH_5TE__ +--D__ARM_ARCH_5__ +--D__ARM_ARCH_5T__ +--D__ARM_ARCH_5E__ +--D__ARM_ARCH_5TE__ --Wno-psabi --march=armv5te --mtune=xscale --msoft-float --mthumb - -Os - -fomit-frame-pointer - -fno-strict-aliasing +--Os +--fomit-frame-pointer +--fno-strict-aliasing --finline-limit=64 --I$(AndroidNDKRoot)/platforms/android-9/arch-arm/usr/include - -Wa,--noexecstack - -DANDROID - -D__ANDROID__ - -DNDEBUG - -O2 - -g +--Wa,--noexecstack +--DANDROID +--D__ANDROID__ +--DNDEBUG +--O2 +--g --I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.6/include --I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include -+-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include -+-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -+--target=armv7-none-linux-androideabi -+--gcc-toolchain="$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64" -+--sysroot=$(AndroidNDKRoot)/platforms/android-9/arch-arm - # @Moss - Above are the 'oficial' android flags - arm - -fvisibility=hidden -@@ -125,9 +85,11 @@ arm-linux-androideabi-g++ - -D__arm__ - -D_REENTRANT - -D_GLIBCXX__PTHREADS -+-std=c++11 - ; +-# @Moss - Above are the 'oficial' android flags +-arm +--fvisibility=hidden +--fvisibility-inlines-hidden +--fdata-sections +--D__arm__ +--D_REENTRANT +--D_GLIBCXX__PTHREADS +-; +- +- +-# ------------------ +-# GCC configuration. +-# ------------------ +- +-# Configure gcc (default version). +-# using gcc ; +- +-# Configure specific gcc version, giving alternative name to use. +-# using gcc : 3.2 : g++-3.2 ; +- +- +-# ------------------- +-# MSVC configuration. +-# ------------------- ++import toolset ; +-# Configure msvc (default version, searched for in standard locations and PATH). +-# using msvc ; +- +-# Configure specific msvc version (searched for in standard locations and PATH). +-# using msvc : 8.0 ; +- +- +-# ---------------------- +-# Borland configuration. +-# ---------------------- +-# using borland ; +- +- +-# ---------------------- +-# STLPort configuration. +-# ---------------------- +- +-# Configure specifying location of STLPort headers. Libraries must be either +-# not needed or available to the compiler by default. +-# using stlport : : /usr/include/stlport ; +- +-# Configure specifying location of both headers and libraries explicitly. +-# using stlport : : /usr/include/stlport /usr/lib ; +- +- +-# ----------------- +-# QT configuration. +-# ----------------- ++local AndroidNDKRoot = [ os.environ AndroidNDKRoot ] ; ++local AndroidApiLevel = [ os.environ AndroidApiLevel ] ; ++local AndroidBinariesPath = [ os.environ AndroidBinariesPath ] ; ++local AndroidLibCxxInclude = [ os.environ AndroidLibCxxInclude ] ; ++local AndroidLibCxxAbiInclude = [ os.environ AndroidLibCxxAbiInclude ] ; ++local PlatformOS = [ os.environ PlatformOS ] ; -+ - # ------------------ - # GCC configuration. - # ------------------ +-# Configure assuming QTDIR gives the installation prefix. +-# using qt ; ++# selects the Android NDK C++ runtime library ++feature.feature android-stl : libcxx_static libcxx_shared gnustl_static gnustl_shared : composite propagated symmetric ; + +-# Configure with an explicit installation prefix. +-# using qt : /usr/opt/qt ; ++# enables use of the Android NDK unified headers ++feature.feature android-unified-headers : on off : composite propagated incidental ; + +-# --------------------- +-# Python configuration. +-# --------------------- ++# controls inclusion of the Android NDK support_lib headers ++feature.feature android-support : on off : composite propagated ; + +-# Configure specific Python version. +-# using python : 3.1 : /usr/bin/python3 : /usr/include/python3.1 : /usr/lib ; +diff --git a/patches/boost-1_55_0/filesystem_operations.patch b/patches/boost-1_55_0/filesystem_operations.patch +new file mode 100644 +index 0000000..c70fbd7 +--- /dev/null ++++ b/patches/boost-1_55_0/filesystem_operations.patch +@@ -0,0 +1,19 @@ ++diff -Naur boost_1_55_0/libs/filesystem/src/operations.cpp boost_1_55_0.patched/libs/filesystem/src/operations.cpp ++--- boost_1_55_0/libs/filesystem/src/operations.cpp 2013-08-09 02:29:39.000000000 -0700 +++++ boost_1_55_0.patched/libs/filesystem/src/operations.cpp 2018-03-01 21:13:17.368694800 -0800 ++@@ -11,6 +11,7 @@ ++ //--------------------------------------------------------------------------------------// ++ ++ // define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355) +++#if defined(__LP64__) || !defined(__ANDROID_API__) || (__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 +29,7 @@ ++ #else ++ #define _FILE_OFFSET_BITS 64 ++ #endif +++#endif ++ ++ // define BOOST_FILESYSTEM_SOURCE so that knows ++ // the library is being built (possibly exporting rather than importing code) +diff --git a/patches/boost-1_55_0/thread_data.patch b/patches/boost-1_55_0/thread_data.patch +new file mode 100644 +index 0000000..00ed477 +--- /dev/null ++++ b/patches/boost-1_55_0/thread_data.patch +@@ -0,0 +1,14 @@ ++diff -Naur boost_1_55_0/boost/thread/pthread/thread_data.hpp boost_1_55_0.patched/boost/thread/pthread/thread_data.hpp ++--- boost_1_55_0/boost/thread/pthread/thread_data.hpp 2013-08-03 09:04:39.000000000 -0700 +++++ boost_1_55_0.patched/boost/thread/pthread/thread_data.hpp 2018-03-01 19:43:47.585566300 -0800 ++@@ -26,7 +26,9 @@ ++ #include ++ ++ #if defined(__ANDROID__) ++-#include // http://code.google.com/p/android/issues/detail?id=39983 +++# ifndef PAGE_SIZE +++# define PAGE_SIZE 4096 +++# endif ++ #endif ++ ++ #include +diff --git a/patches/boost-1_55_0/utf8_codecvt_facet.patch b/patches/boost-1_55_0/utf8_codecvt_facet.patch +new file mode 100644 +index 0000000..246aa49 +--- /dev/null ++++ b/patches/boost-1_55_0/utf8_codecvt_facet.patch +@@ -0,0 +1,66 @@ ++diff -Naur boost_1_55_0/boost/detail/utf8_codecvt_facet.hpp boost_1_55_0.patched/boost/detail/utf8_codecvt_facet.hpp ++--- boost_1_55_0/boost/detail/utf8_codecvt_facet.hpp 2009-05-12 04:27:19.000000000 -0700 +++++ boost_1_55_0.patched/boost/detail/utf8_codecvt_facet.hpp 2018-03-01 20:50:32.422889600 -0800 ++@@ -92,12 +92,6 @@ ++ } ++ #endif ++ ++-#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__) ++- #define BOOST_CODECVT_DO_LENGTH_CONST const ++-#else ++- #define BOOST_CODECVT_DO_LENGTH_CONST ++-#endif ++- ++ // maximum lenght of a multibyte string ++ #define MB_LENGTH_MAX 8 ++ ++@@ -169,9 +163,9 @@ ++ // How many char objects can I process to get <= max_limit ++ // wchar_t objects? ++ virtual int do_length( ++- BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &, +++ const std::mbstate_t &, ++ const char * from, ++- const char * from_end, +++ const char * from_end, ++ std::size_t max_limit ++ #if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) ++ ) const throw(); ++@@ -179,6 +173,25 @@ ++ ) const; ++ #endif ++ +++ virtual int do_length( +++ std::mbstate_t & s, +++ const char * from, +++ const char * from_end, +++ std::size_t max_limit +++#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) +++ ) throw() +++#else +++ ) +++#endif +++ { +++ return do_length( +++ const_cast(s), +++ from, +++ from_end, +++ max_limit +++ ); +++ } +++ ++ // Largest possible value do_length(state,from,from_end,1) could return. ++ virtual int do_max_length() const throw () { ++ return 6; // largest UTF-8 encoding of a UCS-4 character ++diff -Naur boost_1_55_0/boost/detail/utf8_codecvt_facet.ipp boost_1_55_0.patched/boost/detail/utf8_codecvt_facet.ipp ++--- boost_1_55_0/boost/detail/utf8_codecvt_facet.ipp 2012-04-21 15:36:59.000000000 -0700 +++++ boost_1_55_0.patched/boost/detail/utf8_codecvt_facet.ipp 2018-03-01 20:50:13.662529800 -0800 ++@@ -171,7 +171,7 @@ ++ // How many char objects can I process to get <= max_limit ++ // wchar_t objects? ++ int utf8_codecvt_facet::do_length( ++- BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &, +++ const std::mbstate_t &, ++ const char * from, ++ const char * from_end, ++ std::size_t max_limit diff --git a/Build_android/configure.sh b/Build_android/configure.sh index fd17fb7007..f988a5b292 100755 --- a/Build_android/configure.sh +++ b/Build_android/configure.sh @@ -117,45 +117,35 @@ fi # ----- # Boost # ----- -# Uses the script from MysticTreeGames +# Uses the build script from Moritz Wundke (originally MysticTreeGames) +# https://github.com/moritz-wundke/Boost-for-Android if [ "${DO_BOOST}" == "1" ] then ( - ( if [ ! -d "Boost-for-Android" ] then - git clone https://github.com/MysticTreeGames/Boost-for-Android.git + git clone https://github.com/moritz-wundke/Boost-for-Android.git fi cd Boost-for-Android if [ ! -e "cpprestsdk.patched.stamp" ] then - git checkout 1c95d349d5f92c5ac1c24e0ec6985272a3e3883c + git checkout 9e3714190075f3c8565cd573c0e4e187452ee019 git reset --hard HEAD git apply "$DIR/boost-for-android.patch" touch cpprestsdk.patched.stamp fi - PATH="$PATH:$NDK_DIR" ./build-android.sh --boost=1.55.0 --with-libraries=random,date_time,filesystem,system,thread,chrono "${NDK_DIR}" || exit 1 - ) - - ( - if [ ! -d "Boost-for-Android-x86" ] - then - git clone Boost-for-Android Boost-for-Android-x86 - fi - cd Boost-for-Android-x86 - if [ ! -e "cpprestsdk.patched.stamp" ] - then - git checkout 1c95d349d5f92c5ac1c24e0ec6985272a3e3883c - git reset --hard HEAD - git apply "$DIR/boost-for-android-x86.patch" - ln -s ../Boost-for-Android/boost_1_55_0.tar.bz2 . - touch cpprestsdk.patched.stamp - fi - - PATH="$PATH:$NDK_DIR" ./build-android.sh --boost=1.55.0 --with-libraries=atomic,random,date_time,filesystem,system,thread,chrono "${NDK_DIR}" || exit 1 - ) + PATH="$PATH:$NDK_DIR" \ + CXXFLAGS="-std=gnu++11" \ + ./build-android.sh \ + --boost=1.55.0 \ + --arch=armeabi-v7a,x86 \ + --with-libraries=random,date_time,filesystem,system,thread,chrono \ + --without-supportlib \ + --stl=gnustl_static \ + --api=9 \ + "${NDK_DIR}" || exit 1 ) fi From b06d5a83253f9df9e3d7df1ad1545c3dfed73150 Mon Sep 17 00:00:00 2001 From: Jesse Towner Date: Mon, 5 Mar 2018 11:26:09 -0800 Subject: [PATCH 2/6] Minor changes: - Make sure we build Boost.Atomic - Comment cleanup --- Build_android/configure.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Build_android/configure.sh b/Build_android/configure.sh index f988a5b292..bba5de7ffd 100755 --- a/Build_android/configure.sh +++ b/Build_android/configure.sh @@ -117,7 +117,7 @@ fi # ----- # Boost # ----- -# Uses the build script from Moritz Wundke (originally MysticTreeGames) +# Uses the build script from Moritz Wundke (formerly MysticTreeGames) # https://github.com/moritz-wundke/Boost-for-Android if [ "${DO_BOOST}" == "1" ] @@ -141,7 +141,7 @@ then ./build-android.sh \ --boost=1.55.0 \ --arch=armeabi-v7a,x86 \ - --with-libraries=random,date_time,filesystem,system,thread,chrono \ + --with-libraries=atomic,random,date_time,filesystem,system,thread,chrono \ --without-supportlib \ --stl=gnustl_static \ --api=9 \ From 0f8323ad145eb2e9345034c10fd8abf9d7c39223 Mon Sep 17 00:00:00 2001 From: Jesse Towner Date: Mon, 5 Mar 2018 16:25:23 -0800 Subject: [PATCH 3/6] Carried forward build improvements for Boost 1.55.0 to Boost versions 1.65.1 and 1.66.0. This should make it easier to move to the latest Boost releases if desired. --- Build_android/boost-for-android.patch | 532 ++++++++++++++++++++++++++ 1 file changed, 532 insertions(+) diff --git a/Build_android/boost-for-android.patch b/Build_android/boost-for-android.patch index d7f0f867ca..1107c26cd1 100644 --- a/Build_android/boost-for-android.patch +++ b/Build_android/boost-for-android.patch @@ -561,6 +561,448 @@ index 666d4c8..4683d9f 100644 -# Configure specific Python version. -# using python : 3.1 : /usr/bin/python3 : /usr/include/python3.1 : /usr/lib ; +diff --git a/configs/user-config-boost-1_65_1-arm64-v8a.jam b/configs/user-config-boost-1_65_1-arm64-v8a.jam +index c770f44..4ed01c8 100644 +--- a/configs/user-config-boost-1_65_1-arm64-v8a.jam ++++ b/configs/user-config-boost-1_65_1-arm64-v8a.jam +@@ -1,10 +1,5 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/aarch64-linux-android-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/aarch64-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + aarch64-none-linux-android + -fpic +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/aarch64-linux-android +--D__ANDROID_API__=21 +diff --git a/configs/user-config-boost-1_65_1-armeabi-v7a.jam b/configs/user-config-boost-1_65_1-armeabi-v7a.jam +index 284c21b..3c70384 100644 +--- a/configs/user-config-boost-1_65_1-armeabi-v7a.jam ++++ b/configs/user-config-boost-1_65_1-armeabi-v7a.jam +@@ -1,15 +1,10 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 + -target +-armv7-none-linux-androideabi15 ++armv7-none-linux-androideabi + -march=armv7-a + -mfloat-abi=softfp + -mfpu=vfpv3-d16 + -mthumb + -fpic + -fno-integrated-as +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_65_1-armeabi.jam b/configs/user-config-boost-1_65_1-armeabi.jam +index f119d2a..7867ef1 100644 +--- a/configs/user-config-boost-1_65_1-armeabi.jam ++++ b/configs/user-config-boost-1_65_1-armeabi.jam +@@ -1,15 +1,10 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 + -target +-armv5te-none-linux-androideabi15 ++armv5te-none-linux-androideabi + -march=armv5te + -mtune=xscale + -msoft-float + -mthumb + -fpic + -fno-integrated-as +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_65_1-common.jam b/configs/user-config-boost-1_65_1-common.jam +index 9bb70c1..6283038 100644 +--- a/configs/user-config-boost-1_65_1-common.jam ++++ b/configs/user-config-boost-1_65_1-common.jam +@@ -13,11 +13,10 @@ $(AndroidBinariesPath)/clang++ + -fstack-protector-strong + -Wno-invalid-command-line-argument + -Wno-unused-command-line-argument ++-Wno-unused-local-typedef + -no-canonical-prefixes +--I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++/include +--I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++abi/include +--I$(AndroidNDKRoot)/sources/android/support/include + -DANDROID ++-D__ANDROID_API__=$(AndroidApiLevel) + -Wa,--noexecstack + -Wformat + -Werror=format-security +diff --git a/configs/user-config-boost-1_65_1-mips.jam b/configs/user-config-boost-1_65_1-mips.jam +index 8a373cf..a079f13 100644 +--- a/configs/user-config-boost-1_65_1-mips.jam ++++ b/configs/user-config-boost-1_65_1-mips.jam +@@ -1,11 +1,6 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/mipsel-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + mipsel-none-linux-android + -mips32 + -fpic +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/mipsel-linux-android +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_65_1-mips64.jam b/configs/user-config-boost-1_65_1-mips64.jam +index 52eddb9..511f54c 100644 +--- a/configs/user-config-boost-1_65_1-mips64.jam ++++ b/configs/user-config-boost-1_65_1-mips64.jam +@@ -1,11 +1,6 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + mips64el-none-linux-android + -fpic + -fintegrated-as +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/mips64el-linux-android +--D__ANDROID_API__=21 +diff --git a/configs/user-config-boost-1_65_1-toolset.jam b/configs/user-config-boost-1_65_1-toolset.jam +new file mode 100644 +index 0000000..78979bc +--- /dev/null ++++ b/configs/user-config-boost-1_65_1-toolset.jam +@@ -0,0 +1,42 @@ ++ ++# -------------------------------------------------------------------- ++ ++# android-stl toolset options ++toolset.flags clang-linux.compile OPTIONS libcxx_shared : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS libcxx_static : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++ ++# android-unified-headers toolset options ++toolset.flags clang-linux.compile OPTIONS on/clang-x86 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/i686-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-x8664 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/x86_64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabi : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/aarch64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mipsel-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips64 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mips64el-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x86 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x8664 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86_64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabi : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips64 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips64" : unchecked ; ++ ++# android-support toolset options ++toolset.flags clang-linux.compile OPTIONS on : "-isystem $(AndroidNDKRoot)/sources/android/support/include" : unchecked ; ++ +diff --git a/configs/user-config-boost-1_65_1-x86.jam b/configs/user-config-boost-1_65_1-x86.jam +index 77ae941..57cbf64 100644 +--- a/configs/user-config-boost-1_65_1-x86.jam ++++ b/configs/user-config-boost-1_65_1-x86.jam +@@ -1,11 +1,6 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + i686-none-linux-android + -fPIC + -mstackrealign +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/i686-linux-android +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_65_1-x86_64.jam b/configs/user-config-boost-1_65_1-x86_64.jam +index f100eb6..e343032 100644 +--- a/configs/user-config-boost-1_65_1-x86_64.jam ++++ b/configs/user-config-boost-1_65_1-x86_64.jam +@@ -1,10 +1,5 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/x86_64-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/x86_64-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + x86_64-none-linux-android + -fPIC +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/x86_64-linux-android +--D__ANDROID_API__=21 +diff --git a/configs/user-config-boost-1_65_1.jam b/configs/user-config-boost-1_65_1.jam +index 0a159d9..4683d9f 100644 +--- a/configs/user-config-boost-1_65_1.jam ++++ b/configs/user-config-boost-1_65_1.jam +@@ -37,6 +37,23 @@ + # Android configurations. + # ------------------ + ++import feature ; + import os ; ++import toolset ; ++ + local AndroidNDKRoot = [ os.environ AndroidNDKRoot ] ; ++local AndroidApiLevel = [ os.environ AndroidApiLevel ] ; + local AndroidBinariesPath = [ os.environ AndroidBinariesPath ] ; ++local AndroidLibCxxInclude = [ os.environ AndroidLibCxxInclude ] ; ++local AndroidLibCxxAbiInclude = [ os.environ AndroidLibCxxAbiInclude ] ; ++local PlatformOS = [ os.environ PlatformOS ] ; ++ ++# selects the Android NDK C++ runtime library ++feature.feature android-stl : libcxx_static libcxx_shared gnustl_static gnustl_shared : composite propagated symmetric ; ++ ++# enables use of the Android NDK unified headers ++feature.feature android-unified-headers : on off : composite propagated incidental ; ++ ++# controls inclusion of the Android NDK support_lib headers ++feature.feature android-support : on off : composite propagated ; ++ +diff --git a/configs/user-config-boost-1_66_0-arm64-v8a.jam b/configs/user-config-boost-1_66_0-arm64-v8a.jam +index c770f44..4ed01c8 100644 +--- a/configs/user-config-boost-1_66_0-arm64-v8a.jam ++++ b/configs/user-config-boost-1_66_0-arm64-v8a.jam +@@ -1,10 +1,5 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/aarch64-linux-android-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/aarch64-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + aarch64-none-linux-android + -fpic +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/aarch64-linux-android +--D__ANDROID_API__=21 +diff --git a/configs/user-config-boost-1_66_0-armeabi-v7a.jam b/configs/user-config-boost-1_66_0-armeabi-v7a.jam +index 284c21b..3c70384 100644 +--- a/configs/user-config-boost-1_66_0-armeabi-v7a.jam ++++ b/configs/user-config-boost-1_66_0-armeabi-v7a.jam +@@ -1,15 +1,10 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 + -target +-armv7-none-linux-androideabi15 ++armv7-none-linux-androideabi + -march=armv7-a + -mfloat-abi=softfp + -mfpu=vfpv3-d16 + -mthumb + -fpic + -fno-integrated-as +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_66_0-armeabi.jam b/configs/user-config-boost-1_66_0-armeabi.jam +index f119d2a..7867ef1 100644 +--- a/configs/user-config-boost-1_66_0-armeabi.jam ++++ b/configs/user-config-boost-1_66_0-armeabi.jam +@@ -1,15 +1,10 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 + -target +-armv5te-none-linux-androideabi15 ++armv5te-none-linux-androideabi + -march=armv5te + -mtune=xscale + -msoft-float + -mthumb + -fpic + -fno-integrated-as +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_66_0-common.jam b/configs/user-config-boost-1_66_0-common.jam +index 9bb70c1..6283038 100644 +--- a/configs/user-config-boost-1_66_0-common.jam ++++ b/configs/user-config-boost-1_66_0-common.jam +@@ -13,11 +13,10 @@ $(AndroidBinariesPath)/clang++ + -fstack-protector-strong + -Wno-invalid-command-line-argument + -Wno-unused-command-line-argument ++-Wno-unused-local-typedef + -no-canonical-prefixes +--I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++/include +--I$(AndroidNDKRoot)/sources/cxx-stl/llvm-libc++abi/include +--I$(AndroidNDKRoot)/sources/android/support/include + -DANDROID ++-D__ANDROID_API__=$(AndroidApiLevel) + -Wa,--noexecstack + -Wformat + -Werror=format-security +diff --git a/configs/user-config-boost-1_66_0-mips.jam b/configs/user-config-boost-1_66_0-mips.jam +index 8a373cf..a079f13 100644 +--- a/configs/user-config-boost-1_66_0-mips.jam ++++ b/configs/user-config-boost-1_66_0-mips.jam +@@ -1,11 +1,6 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/mipsel-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + mipsel-none-linux-android + -mips32 + -fpic +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/mipsel-linux-android +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_66_0-mips64.jam b/configs/user-config-boost-1_66_0-mips64.jam +index 52eddb9..511f54c 100644 +--- a/configs/user-config-boost-1_66_0-mips64.jam ++++ b/configs/user-config-boost-1_66_0-mips64.jam +@@ -1,11 +1,6 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + mips64el-none-linux-android + -fpic + -fintegrated-as +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/mips64el-linux-android +--D__ANDROID_API__=21 +diff --git a/configs/user-config-boost-1_66_0-toolset.jam b/configs/user-config-boost-1_66_0-toolset.jam +new file mode 100644 +index 0000000..78979bc +--- /dev/null ++++ b/configs/user-config-boost-1_66_0-toolset.jam +@@ -0,0 +1,42 @@ ++ ++# -------------------------------------------------------------------- ++ ++# android-stl toolset options ++toolset.flags clang-linux.compile OPTIONS libcxx_shared : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS libcxx_static : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++ ++# android-unified-headers toolset options ++toolset.flags clang-linux.compile OPTIONS on/clang-x86 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/i686-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-x8664 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/x86_64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabi : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/aarch64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mipsel-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips64 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mips64el-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x86 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x8664 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86_64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabi : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips64 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips64" : unchecked ; ++ ++# android-support toolset options ++toolset.flags clang-linux.compile OPTIONS on : "-isystem $(AndroidNDKRoot)/sources/android/support/include" : unchecked ; ++ +diff --git a/configs/user-config-boost-1_66_0-x86.jam b/configs/user-config-boost-1_66_0-x86.jam +index 77ae941..57cbf64 100644 +--- a/configs/user-config-boost-1_66_0-x86.jam ++++ b/configs/user-config-boost-1_66_0-x86.jam +@@ -1,11 +1,6 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + i686-none-linux-android + -fPIC + -mstackrealign +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/i686-linux-android +--D__ANDROID_API__=15 +diff --git a/configs/user-config-boost-1_66_0-x86_64.jam b/configs/user-config-boost-1_66_0-x86_64.jam +index f100eb6..e343032 100644 +--- a/configs/user-config-boost-1_66_0-x86_64.jam ++++ b/configs/user-config-boost-1_66_0-x86_64.jam +@@ -1,10 +1,5 @@ + -gcc-toolchain +-$(AndroidNDKRoot)/toolchains/x86_64-4.9/prebuilt/${PlatformOS}-x86_64 ++$(AndroidNDKRoot)/toolchains/x86_64-4.9/prebuilt/$(PlatformOS)-x86_64 + -target + x86_64-none-linux-android + -fPIC +---sysroot +-$(AndroidNDKRoot)/sysroot +--isystem +-$(AndroidNDKRoot)/sysroot/usr/include/x86_64-linux-android +--D__ANDROID_API__=21 +diff --git a/configs/user-config-boost-1_66_0.jam b/configs/user-config-boost-1_66_0.jam +index 0a159d9..4683d9f 100644 +--- a/configs/user-config-boost-1_66_0.jam ++++ b/configs/user-config-boost-1_66_0.jam +@@ -37,6 +37,23 @@ + # Android configurations. + # ------------------ + ++import feature ; + import os ; ++import toolset ; ++ + local AndroidNDKRoot = [ os.environ AndroidNDKRoot ] ; ++local AndroidApiLevel = [ os.environ AndroidApiLevel ] ; + local AndroidBinariesPath = [ os.environ AndroidBinariesPath ] ; ++local AndroidLibCxxInclude = [ os.environ AndroidLibCxxInclude ] ; ++local AndroidLibCxxAbiInclude = [ os.environ AndroidLibCxxAbiInclude ] ; ++local PlatformOS = [ os.environ PlatformOS ] ; ++ ++# selects the Android NDK C++ runtime library ++feature.feature android-stl : libcxx_static libcxx_shared gnustl_static gnustl_shared : composite propagated symmetric ; ++ ++# enables use of the Android NDK unified headers ++feature.feature android-unified-headers : on off : composite propagated incidental ; ++ ++# controls inclusion of the Android NDK support_lib headers ++feature.feature android-support : on off : composite propagated ; ++ diff --git a/patches/boost-1_55_0/filesystem_operations.patch b/patches/boost-1_55_0/filesystem_operations.patch new file mode 100644 index 0000000..c70fbd7 @@ -678,3 +1120,93 @@ index 0000000..246aa49 + const char * from, + const char * from_end, + std::size_t max_limit +diff --git a/patches/boost-1_65_1/filesystem_operations.patch b/patches/boost-1_65_1/filesystem_operations.patch +new file mode 100644 +index 0000000..7c35f4f +--- /dev/null ++++ b/patches/boost-1_65_1/filesystem_operations.patch +@@ -0,0 +1,39 @@ ++diff -Nuar boost_1_65_1/libs/filesystem/src/operations.cpp boost_1_65_1.patched/libs/filesystem/src/operations.cpp ++--- boost_1_65_1/libs/filesystem/src/operations.cpp 2017-09-02 02:56:12.000000000 -0700 +++++ boost_1_65_1.patched/libs/filesystem/src/operations.cpp 2018-03-05 12:36:57.458717900 -0800 ++@@ -11,6 +11,7 @@ ++ //--------------------------------------------------------------------------------------// ++ ++ // define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355) +++#if defined(__LP64__) || !defined(__ANDROID_API__) || (__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 +29,7 @@ ++ #else ++ #define _FILE_OFFSET_BITS 64 ++ #endif +++#endif ++ ++ // define BOOST_FILESYSTEM_SOURCE so that knows ++ // the library is being built (possibly exporting rather than importing code) ++@@ -221,7 +223,19 @@ ++ || ::mkdir(to.c_str(),from_stat.st_mode)!= 0)) ++ # define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool) ++ # define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0) +++#if defined(__ANDROID__) || defined(ANDROID) +++ int BOOST_RESIZE_FILE(const char *path, off_t size) +++ { +++ int result = -1; +++ int fd = open(path, O_WRONLY); +++ if (fd != -1) +++ result = ftruncate(fd, size); +++ close(fd); +++ return result; +++ } +++#else ++ # define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0) +++#endif ++ ++ # define BOOST_ERROR_NOT_SUPPORTED ENOSYS ++ # define BOOST_ERROR_ALREADY_EXISTS EEXIST +diff --git a/patches/boost-1_66_0/filesystem_operations.patch b/patches/boost-1_66_0/filesystem_operations.patch +new file mode 100644 +index 0000000..5fbb9fd +--- /dev/null ++++ b/patches/boost-1_66_0/filesystem_operations.patch +@@ -0,0 +1,39 @@ ++diff -Naur boost_1_66_0/libs/filesystem/src/operations.cpp boost_1_66_0.patched/libs/filesystem/src/operations.cpp ++--- boost_1_66_0/libs/filesystem/src/operations.cpp 2017-12-13 15:56:42.000000000 -0800 +++++ boost_1_66_0.patched/libs/filesystem/src/operations.cpp 2018-03-05 14:26:04.141671900 -0800 ++@@ -11,6 +11,7 @@ ++ //--------------------------------------------------------------------------------------// ++ ++ // define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355) +++#if defined(__LP64__) || !defined(__ANDROID_API__) || (__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 +29,7 @@ ++ #else ++ #define _FILE_OFFSET_BITS 64 ++ #endif +++#endif ++ ++ // define BOOST_FILESYSTEM_SOURCE so that knows ++ // the library is being built (possibly exporting rather than importing code) ++@@ -221,7 +223,19 @@ ++ || ::mkdir(to.c_str(),from_stat.st_mode)!= 0)) ++ # define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool) ++ # define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0) +++#if defined(__ANDROID__) || defined(ANDROID) +++ int BOOST_RESIZE_FILE(const char *path, off_t size) +++ { +++ int result = -1; +++ int fd = open(path, O_WRONLY); +++ if (fd != -1) +++ result = ftruncate(fd, size); +++ close(fd); +++ return result; +++ } +++#else ++ # define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0) +++#endif ++ ++ # define BOOST_ERROR_NOT_SUPPORTED ENOSYS ++ # define BOOST_ERROR_ALREADY_EXISTS EEXIST From 533096322fc0a0d15ba9e0daea9fe3f3c1669fdf Mon Sep 17 00:00:00 2001 From: Jesse Towner Date: Mon, 5 Mar 2018 22:20:40 -0800 Subject: [PATCH 4/6] added support for c++_static and c++_shared runtime library aliases for parity with CMake ANDROID_STL variable values --- Build_android/boost-for-android.patch | 49 +++++++++++++++------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/Build_android/boost-for-android.patch b/Build_android/boost-for-android.patch index 1107c26cd1..7bd62f66df 100644 --- a/Build_android/boost-for-android.patch +++ b/Build_android/boost-for-android.patch @@ -1,5 +1,5 @@ diff --git a/build-android.sh b/build-android.sh -index ad0707e..017c86d 100755 +index ad0707e..92d37d9 100755 --- a/build-android.sh +++ b/build-android.sh @@ -93,16 +93,20 @@ do_download () @@ -27,13 +27,21 @@ index ad0707e..017c86d 100755 register_option "--prefix=" do_prefix "Prefix to be used when installing libraries and includes." do_prefix () { if [ -d $1 ]; then -@@ -116,6 +120,14 @@ do_arch () { +@@ -116,6 +120,22 @@ do_arch () { for ARCH in $(echo $1 | tr ',' '\n') ; do ARCHLIST="$ARCH ${ARCHLIST}"; done } +STL=libcxx_static -+register_option "--stl=" do_select_stl "Select the C++ runtime library. Can be one of libcxx_static, libcxx_shared, gnustl_static or gnustl_shared." -+do_select_stl () { STL=$1; } ++register_option "--stl=" do_select_stl "Select the C++ runtime library. Can be one of c++_static (libcxx_static), c++_shared (libcxx_shared), gnustl_static or gnustl_shared." ++do_select_stl () { ++ if [ "$1" = "c++_shared" ]; then ++ STL=libcxx_shared ++ elif [ "$1" = "c++_static" ]; then ++ STL=libcxx_static ++ else ++ STL=$1 ++ fi ++} + +API=15 +register_option "--api=" do_select_api "Select the Android API Level. Default is 15 for 32-bit architectures and 21 for 64-bit architectures." @@ -42,7 +50,7 @@ index ad0707e..017c86d 100755 PROGRAM_PARAMETERS="" PROGRAM_DESCRIPTION=\ " Boost For Android\n"\ -@@ -139,10 +151,10 @@ BUILD_DIR="./build/" +@@ -139,10 +159,10 @@ BUILD_DIR="./build/" if [ $CLEAN = yes ] ; then echo "Cleaning: $BUILD_DIR" rm -f -r $PROGDIR/$BUILD_DIR @@ -55,7 +63,7 @@ index ad0707e..017c86d 100755 echo "Cleaning: $BOOST_TAR" rm -f $PROGDIR/$BOOST_TAR -@@ -209,8 +221,12 @@ case "$HOST_OS" in +@@ -209,8 +229,12 @@ case "$HOST_OS" in PlatformOS=linux esac @@ -69,7 +77,7 @@ index ad0707e..017c86d 100755 NDK_RN=`cat $NDK_RELEASE_FILE | sed 's/^r\(.*\)$/\1/g'` elif [ -n "${AndroidSourcesDetected}" ]; then if [ -f "${ANDROID_BUILD_TOP}/ndk/docs/CHANGES.html" ]; then -@@ -233,8 +249,20 @@ else +@@ -233,8 +257,20 @@ else fi fi @@ -90,7 +98,7 @@ index ad0707e..017c86d 100755 case "$NDK_RN" in 4*) TOOLCHAIN=${TOOLCHAIN:-arm-eabi-4.4.0} -@@ -277,20 +305,26 @@ case "$NDK_RN" in +@@ -277,19 +313,25 @@ case "$NDK_RN" in TOOLSET=gcc-androidR8e ;; "10 (64-bit)"|"10b (64-bit)"|"10c (64-bit)"|"10d (64-bit)") @@ -108,24 +116,23 @@ index ad0707e..017c86d 100755 + "10e-rc4 (64-bit)"|"10e (64-bit)") + TOOLCHAIN=llvm-3.6 + CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ ++ TOOLSET=clang ++ ;; ++ 11*|12*|13*) ++ TOOLCHAIN=${TOOLCHAIN:-llvm} ++ CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ + TOOLSET=clang ;; - 16.*) -+ 11*|12*|13*) ++ 14*|15*|16*) TOOLCHAIN=${TOOLCHAIN:-llvm} CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ TOOLSET=clang - ;; -+ 14*|15*|16*) -+ TOOLCHAIN=${TOOLCHAIN:-llvm} -+ CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang + UNIFIED_HEADERS=on -+ ;; + ;; *) echo "Undefined or not supported Android NDK version: $NDK_RN" - exit 1 -@@ -362,7 +396,7 @@ then +@@ -362,7 +404,7 @@ then # Make the initial bootstrap echo "Performing boost bootstrap" @@ -134,7 +141,7 @@ index ad0707e..017c86d 100755 case "$HOST_OS" in windows) cmd //c "bootstrap.bat" 2>&1 | tee -a $PROGDIR/build.log -@@ -377,7 +411,7 @@ then +@@ -377,7 +419,7 @@ then exit 1 fi cd $PROGDIR @@ -143,7 +150,7 @@ index ad0707e..017c86d 100755 # ------------------------------------------------------------- # Patching will be done only if we had a successfull bootstrap! # ------------------------------------------------------------- -@@ -387,17 +421,23 @@ then +@@ -387,17 +429,23 @@ then PATCH_BOOST_DIR=$PROGDIR/patches/boost-${BOOST_VER} if [ "$TOOLSET" = "clang" ]; then @@ -172,7 +179,7 @@ index ad0707e..017c86d 100755 else cp configs/user-config-boost-${BOOST_VER}.jam $BOOST_DIR/tools/build/v2/user-config.jam || exit 1 fi -@@ -462,24 +502,38 @@ echo "Building boost for android for $ARCH" +@@ -462,24 +510,38 @@ echo "Building boost for android for $ARCH" cd $BOOST_DIR @@ -215,7 +222,7 @@ index ad0707e..017c86d 100755 if [ "$ARCH" = "armeabi" ]; then if [ -z "$LIBRARIES" ]; then echo "Disabling boost_math library on armeabi architecture, because of broken toolchain" | tee -a $PROGDIR/build.log -@@ -504,6 +558,7 @@ echo "Building boost for android for $ARCH" +@@ -504,6 +566,7 @@ echo "Building boost for android for $ARCH" -j$NCPU \ target-os=${TARGET_OS} \ toolset=${TOOLSET_ARCH} \ From c12539b7fa5f6e4ddf6e561c3d2e5ce0b8dd0ef9 Mon Sep 17 00:00:00 2001 From: Jesse Towner Date: Wed, 7 Mar 2018 21:11:54 -0800 Subject: [PATCH 5/6] Added support for Boost 1.59.0 and fixed compilation error with Clang when including the Boost.Asio headers from 1.55.0, causing an infinite recursive call to be detected in an operator~ overload. --- Build_android/boost-for-android.patch | 408 ++++++++++++++++++++++++-- 1 file changed, 389 insertions(+), 19 deletions(-) diff --git a/Build_android/boost-for-android.patch b/Build_android/boost-for-android.patch index 7bd62f66df..2262718166 100644 --- a/Build_android/boost-for-android.patch +++ b/Build_android/boost-for-android.patch @@ -1,8 +1,19 @@ diff --git a/build-android.sh b/build-android.sh -index ad0707e..92d37d9 100755 +index ad0707e..f44c494 100755 --- a/build-android.sh +++ b/build-android.sh -@@ -93,16 +93,20 @@ do_download () +@@ -41,6 +41,10 @@ boost_version() + BOOST_VER1=1 + BOOST_VER2=65 + BOOST_VER3=1 ++ elif [ "$1" = "1.59.0" ]; then ++ BOOST_VER1=1 ++ BOOST_VER2=59 ++ BOOST_VER3=0 + elif [ "$1" = "1.55.0" ]; then + BOOST_VER1=1 + BOOST_VER2=55 +@@ -93,16 +97,20 @@ do_download () #LIBRARIES=--with-libraries=date_time,filesystem,program_options,regex,signals,system,thread,iostreams,locale LIBRARIES= register_option "--with-libraries=" do_with_libraries "Comma separated list of libraries to build." @@ -27,7 +38,7 @@ index ad0707e..92d37d9 100755 register_option "--prefix=" do_prefix "Prefix to be used when installing libraries and includes." do_prefix () { if [ -d $1 ]; then -@@ -116,6 +120,22 @@ do_arch () { +@@ -116,6 +124,22 @@ do_arch () { for ARCH in $(echo $1 | tr ',' '\n') ; do ARCHLIST="$ARCH ${ARCHLIST}"; done } @@ -50,7 +61,7 @@ index ad0707e..92d37d9 100755 PROGRAM_PARAMETERS="" PROGRAM_DESCRIPTION=\ " Boost For Android\n"\ -@@ -139,10 +159,10 @@ BUILD_DIR="./build/" +@@ -139,10 +163,10 @@ BUILD_DIR="./build/" if [ $CLEAN = yes ] ; then echo "Cleaning: $BUILD_DIR" rm -f -r $PROGDIR/$BUILD_DIR @@ -63,7 +74,7 @@ index ad0707e..92d37d9 100755 echo "Cleaning: $BOOST_TAR" rm -f $PROGDIR/$BOOST_TAR -@@ -209,8 +229,12 @@ case "$HOST_OS" in +@@ -209,8 +233,12 @@ case "$HOST_OS" in PlatformOS=linux esac @@ -77,7 +88,7 @@ index ad0707e..92d37d9 100755 NDK_RN=`cat $NDK_RELEASE_FILE | sed 's/^r\(.*\)$/\1/g'` elif [ -n "${AndroidSourcesDetected}" ]; then if [ -f "${ANDROID_BUILD_TOP}/ndk/docs/CHANGES.html" ]; then -@@ -233,8 +257,20 @@ else +@@ -233,8 +261,20 @@ else fi fi @@ -98,7 +109,7 @@ index ad0707e..92d37d9 100755 case "$NDK_RN" in 4*) TOOLCHAIN=${TOOLCHAIN:-arm-eabi-4.4.0} -@@ -277,19 +313,25 @@ case "$NDK_RN" in +@@ -277,20 +317,26 @@ case "$NDK_RN" in TOOLSET=gcc-androidR8e ;; "10 (64-bit)"|"10b (64-bit)"|"10c (64-bit)"|"10d (64-bit)") @@ -116,23 +127,24 @@ index ad0707e..92d37d9 100755 + "10e-rc4 (64-bit)"|"10e (64-bit)") + TOOLCHAIN=llvm-3.6 + CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ -+ TOOLSET=clang -+ ;; -+ 11*|12*|13*) -+ TOOLCHAIN=${TOOLCHAIN:-llvm} -+ CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ + TOOLSET=clang ;; - 16.*) -+ 14*|15*|16*) ++ 11*|12*|13*) TOOLCHAIN=${TOOLCHAIN:-llvm} CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ TOOLSET=clang -+ UNIFIED_HEADERS=on ;; ++ 14*|15*|16*) ++ TOOLCHAIN=${TOOLCHAIN:-llvm} ++ CXXPATH=$AndroidNDKRoot/toolchains/${TOOLCHAIN}/prebuilt/${PlatformOS}-x86_64/bin/clang++ ++ TOOLSET=clang ++ UNIFIED_HEADERS=on ++ ;; *) echo "Undefined or not supported Android NDK version: $NDK_RN" -@@ -362,7 +404,7 @@ then + exit 1 +@@ -362,7 +408,7 @@ then # Make the initial bootstrap echo "Performing boost bootstrap" @@ -141,7 +153,7 @@ index ad0707e..92d37d9 100755 case "$HOST_OS" in windows) cmd //c "bootstrap.bat" 2>&1 | tee -a $PROGDIR/build.log -@@ -377,7 +419,7 @@ then +@@ -377,7 +423,7 @@ then exit 1 fi cd $PROGDIR @@ -150,7 +162,7 @@ index ad0707e..92d37d9 100755 # ------------------------------------------------------------- # Patching will be done only if we had a successfull bootstrap! # ------------------------------------------------------------- -@@ -387,17 +429,23 @@ then +@@ -387,17 +433,23 @@ then PATCH_BOOST_DIR=$PROGDIR/patches/boost-${BOOST_VER} if [ "$TOOLSET" = "clang" ]; then @@ -179,7 +191,7 @@ index ad0707e..92d37d9 100755 else cp configs/user-config-boost-${BOOST_VER}.jam $BOOST_DIR/tools/build/v2/user-config.jam || exit 1 fi -@@ -462,24 +510,38 @@ echo "Building boost for android for $ARCH" +@@ -462,24 +514,38 @@ echo "Building boost for android for $ARCH" cd $BOOST_DIR @@ -222,7 +234,7 @@ index ad0707e..92d37d9 100755 if [ "$ARCH" = "armeabi" ]; then if [ -z "$LIBRARIES" ]; then echo "Disabling boost_math library on armeabi architecture, because of broken toolchain" | tee -a $PROGDIR/build.log -@@ -504,6 +566,7 @@ echo "Building boost for android for $ARCH" +@@ -504,6 +570,7 @@ echo "Building boost for android for $ARCH" -j$NCPU \ target-os=${TARGET_OS} \ toolset=${TOOLSET_ARCH} \ @@ -568,6 +580,240 @@ index 666d4c8..4683d9f 100644 -# Configure specific Python version. -# using python : 3.1 : /usr/bin/python3 : /usr/include/python3.1 : /usr/lib ; +diff --git a/configs/user-config-boost-1_59_0-arm64-v8a.jam b/configs/user-config-boost-1_59_0-arm64-v8a.jam +new file mode 100644 +index 0000000..4ed01c8 +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-arm64-v8a.jam +@@ -0,0 +1,5 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/aarch64-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++aarch64-none-linux-android ++-fpic +diff --git a/configs/user-config-boost-1_59_0-armeabi-v7a.jam b/configs/user-config-boost-1_59_0-armeabi-v7a.jam +new file mode 100644 +index 0000000..3c70384 +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-armeabi-v7a.jam +@@ -0,0 +1,10 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++armv7-none-linux-androideabi ++-march=armv7-a ++-mfloat-abi=softfp ++-mfpu=vfpv3-d16 ++-mthumb ++-fpic ++-fno-integrated-as +diff --git a/configs/user-config-boost-1_59_0-armeabi.jam b/configs/user-config-boost-1_59_0-armeabi.jam +new file mode 100644 +index 0000000..7867ef1 +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-armeabi.jam +@@ -0,0 +1,10 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++armv5te-none-linux-androideabi ++-march=armv5te ++-mtune=xscale ++-msoft-float ++-mthumb ++-fpic ++-fno-integrated-as +diff --git a/configs/user-config-boost-1_59_0-common.jam b/configs/user-config-boost-1_59_0-common.jam +new file mode 100644 +index 0000000..6283038 +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-common.jam +@@ -0,0 +1,25 @@ ++ ++# -------------------------------------------------------------------- ++ ++using clang : %ARCH% ++: ++$(AndroidBinariesPath)/clang++ ++: ++$(AndroidBinariesPath)/llvm-ar ++-fexceptions ++-frtti ++-ffunction-sections ++-funwind-tables ++-fstack-protector-strong ++-Wno-invalid-command-line-argument ++-Wno-unused-command-line-argument ++-Wno-unused-local-typedef ++-no-canonical-prefixes ++-DANDROID ++-D__ANDROID_API__=$(AndroidApiLevel) ++-Wa,--noexecstack ++-Wformat ++-Werror=format-security ++-DNDEBUG ++-O2 ++-g +diff --git a/configs/user-config-boost-1_59_0-mips.jam b/configs/user-config-boost-1_59_0-mips.jam +new file mode 100644 +index 0000000..a079f13 +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-mips.jam +@@ -0,0 +1,6 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/mipsel-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++mipsel-none-linux-android ++-mips32 ++-fpic +diff --git a/configs/user-config-boost-1_59_0-mips64.jam b/configs/user-config-boost-1_59_0-mips64.jam +new file mode 100644 +index 0000000..511f54c +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-mips64.jam +@@ -0,0 +1,6 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/mips64el-linux-android-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++mips64el-none-linux-android ++-fpic ++-fintegrated-as +diff --git a/configs/user-config-boost-1_59_0-toolset.jam b/configs/user-config-boost-1_59_0-toolset.jam +new file mode 100644 +index 0000000..78979bc +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-toolset.jam +@@ -0,0 +1,42 @@ ++ ++# -------------------------------------------------------------------- ++ ++# android-stl toolset options ++toolset.flags clang-linux.compile OPTIONS libcxx_shared : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS libcxx_static : "-I$(AndroidLibCxxInclude) -I$(AndroidLibCxxAbiInclude)" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x86 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-x8664 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabi : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-armeabiv7a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-arm64v8a : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_shared/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS gnustl_static/clang-mips64 : "-I$(AndroidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include" : unchecked ; ++ ++# android-unified-headers toolset options ++toolset.flags clang-linux.compile OPTIONS on/clang-x86 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/i686-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-x8664 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/x86_64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabi : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/aarch64-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mipsel-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS on/clang-mips64 : "--sysroot $(AndroidNDKRoot)/sysroot -isystem $(AndroidNDKRoot)/sysroot/usr/include/mips64el-linux-android" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x86 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-x8664 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-x86_64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabi : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-armeabiv7a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-arm64v8a : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-arm64" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips" : unchecked ; ++toolset.flags clang-linux.compile OPTIONS off/clang-mips64 : "--sysroot $(AndroidNDKRoot)/platforms/android-$(AndroidApiLevel)/arch-mips64" : unchecked ; ++ ++# android-support toolset options ++toolset.flags clang-linux.compile OPTIONS on : "-isystem $(AndroidNDKRoot)/sources/android/support/include" : unchecked ; ++ +diff --git a/configs/user-config-boost-1_59_0-x86.jam b/configs/user-config-boost-1_59_0-x86.jam +new file mode 100644 +index 0000000..57cbf64 +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-x86.jam +@@ -0,0 +1,6 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/x86-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++i686-none-linux-android ++-fPIC ++-mstackrealign +diff --git a/configs/user-config-boost-1_59_0-x86_64.jam b/configs/user-config-boost-1_59_0-x86_64.jam +new file mode 100644 +index 0000000..e343032 +--- /dev/null ++++ b/configs/user-config-boost-1_59_0-x86_64.jam +@@ -0,0 +1,5 @@ ++-gcc-toolchain ++$(AndroidNDKRoot)/toolchains/x86_64-4.9/prebuilt/$(PlatformOS)-x86_64 ++-target ++x86_64-none-linux-android ++-fPIC +diff --git a/configs/user-config-boost-1_59_0.jam b/configs/user-config-boost-1_59_0.jam +new file mode 100644 +index 0000000..4683d9f +--- /dev/null ++++ b/configs/user-config-boost-1_59_0.jam +@@ -0,0 +1,59 @@ ++# Copyright 2003, 2005 Douglas Gregor ++# Copyright 2004 John Maddock ++# Copyright 2002, 2003, 2004, 2007 Vladimir Prus ++# Distributed under the Boost Software License, Version 1.0. ++# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) ++ ++# This file is used to configure your Boost.Build installation. You can modify ++# this file in place, or you can place it in a permanent location so that it ++# does not get overwritten should you get a new version of Boost.Build. See: ++# ++# http://www.boost.org/boost-build2/doc/html/bbv2/overview/configuration.html ++# ++# for documentation about possible permanent locations. ++ ++# This file specifies which toolsets (C++ compilers), libraries, and other ++# tools are available. Often, you should be able to just uncomment existing ++# example lines and adjust them to taste. The complete list of supported tools, ++# and configuration instructions can be found at: ++# ++# http://boost.org/boost-build2/doc/html/bbv2/reference/tools.html ++# ++ ++# This file uses Jam language syntax to describe available tools. Mostly, ++# there are 'using' lines, that contain the name of the used tools, and ++# parameters to pass to those tools -- where paremeters are separated by ++# semicolons. Important syntax notes: ++# ++# - Both ':' and ';' must be separated from other tokens by whitespace ++# - The '\' symbol is a quote character, so when specifying Windows paths you ++# should use '/' or '\\' instead. ++# ++# More details about the syntax can be found at: ++# ++# http://boost.org/boost-build2/doc/html/bbv2/advanced.html#bbv2.advanced.jam_language ++# ++# ------------------ ++# Android configurations. ++# ------------------ ++ ++import feature ; ++import os ; ++import toolset ; ++ ++local AndroidNDKRoot = [ os.environ AndroidNDKRoot ] ; ++local AndroidApiLevel = [ os.environ AndroidApiLevel ] ; ++local AndroidBinariesPath = [ os.environ AndroidBinariesPath ] ; ++local AndroidLibCxxInclude = [ os.environ AndroidLibCxxInclude ] ; ++local AndroidLibCxxAbiInclude = [ os.environ AndroidLibCxxAbiInclude ] ; ++local PlatformOS = [ os.environ PlatformOS ] ; ++ ++# selects the Android NDK C++ runtime library ++feature.feature android-stl : libcxx_static libcxx_shared gnustl_static gnustl_shared : composite propagated symmetric ; ++ ++# enables use of the Android NDK unified headers ++feature.feature android-unified-headers : on off : composite propagated incidental ; ++ ++# controls inclusion of the Android NDK support_lib headers ++feature.feature android-support : on off : composite propagated ; ++ diff --git a/configs/user-config-boost-1_65_1-arm64-v8a.jam b/configs/user-config-boost-1_65_1-arm64-v8a.jam index c770f44..4ed01c8 100644 --- a/configs/user-config-boost-1_65_1-arm64-v8a.jam @@ -1010,6 +1256,24 @@ index 0a159d9..4683d9f 100644 +# controls inclusion of the Android NDK support_lib headers +feature.feature android-support : on off : composite propagated ; + +diff --git a/patches/boost-1_55_0/asio_resolver_query_base.patch b/patches/boost-1_55_0/asio_resolver_query_base.patch +new file mode 100644 +index 0000000..7c59a31 +--- /dev/null ++++ b/patches/boost-1_55_0/asio_resolver_query_base.patch +@@ -0,0 +1,12 @@ ++diff -Naur boost_1_55_0/boost/asio/ip/resolver_query_base.hpp boost_1_55_0.patched/boost/asio/ip/resolver_query_base.hpp ++--- boost_1_55_0/boost/asio/ip/resolver_query_base.hpp 2013-09-22 15:13:33.000000000 -0700 +++++ boost_1_55_0.patched/boost/asio/ip/resolver_query_base.hpp 2018-03-07 19:20:24.574016300 -0800 ++@@ -94,7 +94,7 @@ ++ ++ friend flags operator~(flags x) ++ { ++- return static_cast(static_cast(~x)); +++ return static_cast(~static_cast(x)); ++ } ++ ++ friend flags& operator&=(flags& x, flags y) diff --git a/patches/boost-1_55_0/filesystem_operations.patch b/patches/boost-1_55_0/filesystem_operations.patch new file mode 100644 index 0000000..c70fbd7 @@ -1127,6 +1391,112 @@ index 0000000..246aa49 + const char * from, + const char * from_end, + std::size_t max_limit +diff --git a/patches/boost-1_59_0/boost-1_59_0.patch b/patches/boost-1_59_0/boost-1_59_0.patch +new file mode 100644 +index 0000000..3d54926 +--- /dev/null ++++ b/patches/boost-1_59_0/boost-1_59_0.patch +@@ -0,0 +1,100 @@ ++diff -Naur boost_1_59_0/boost/asio/detail/socket_types.hpp boost_1_59_0.patched/boost/asio/detail/socket_types.hpp ++--- boost_1_59_0/boost/asio/detail/socket_types.hpp 2015-03-23 13:24:12.000000000 -0700 +++++ boost_1_59_0.patched/boost/asio/detail/socket_types.hpp 2018-03-07 20:27:54.992509800 -0800 ++@@ -278,7 +278,12 @@ ++ typedef int socket_type; ++ const int invalid_socket = -1; ++ const int socket_error_retval = -1; +++// @Moss - Some platforms do not define it (Android) +++#if defined(INET_ADDRSTRLEN) ++ const int max_addr_v4_str_len = INET_ADDRSTRLEN; +++#else // defined(INET_ADDRSTRLEN) +++const int max_addr_v4_str_len = 16; +++#endif // defined(INET_ADDRSTRLEN) ++ #if defined(INET6_ADDRSTRLEN) ++ const int max_addr_v6_str_len = INET6_ADDRSTRLEN + 1 + IF_NAMESIZE; ++ #else // defined(INET6_ADDRSTRLEN) ++diff -Naur boost_1_59_0/boost/asio/ip/impl/address_v6.ipp boost_1_59_0.patched/boost/asio/ip/impl/address_v6.ipp ++--- boost_1_59_0/boost/asio/ip/impl/address_v6.ipp 2015-03-23 13:24:12.000000000 -0700 +++++ boost_1_59_0.patched/boost/asio/ip/impl/address_v6.ipp 2018-03-07 20:27:55.002148200 -0800 ++@@ -11,6 +11,23 @@ ++ #ifndef BOOST_ASIO_IP_IMPL_ADDRESS_V6_IPP ++ #define BOOST_ASIO_IP_IMPL_ADDRESS_V6_IPP ++ +++// @Moss - Define IPv6 macros +++#if !defined(IN6_IS_ADDR_MULTICAST) +++#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff) +++#endif +++ +++#if !defined(IN6_IS_ADDR_MC_NODELOCAL) +++#define IN6_IS_ADDR_MC_NODELOCAL(a) \ +++ (IN6_IS_ADDR_MULTICAST(a) \ +++ && ((((__const uint8_t *) (a))[1] & 0xf) == 0x1)) +++#endif +++ +++#if !defined(IN6_IS_ADDR_MC_GLOBAL) +++#define IN6_IS_ADDR_MC_GLOBAL(a) \ +++ (IN6_IS_ADDR_MULTICAST(a) \ +++ && ((((__const uint8_t *) (a))[1] & 0xf) == 0xe)) +++#endif +++ ++ #if defined(_MSC_VER) && (_MSC_VER >= 1200) ++ # pragma once ++ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) ++diff -Naur boost_1_59_0/boost/config/user.hpp boost_1_59_0.patched/boost/config/user.hpp ++--- boost_1_59_0/boost/config/user.hpp 2015-08-04 04:44:49.000000000 -0700 +++++ boost_1_59_0.patched/boost/config/user.hpp 2018-03-07 20:27:55.011995500 -0800 ++@@ -13,6 +13,14 @@ ++ // configuration policy: ++ // ++ +++// Android defines +++#define _REENTRANT 1 +++#define _GLIBCXX__PTHREADS 1 +++// There is problem with std::atomic on android (and some other platforms). +++// See this link for more info: +++// https://code.google.com/p/android/issues/detail?id=42735#makechanges +++#define BOOST_ASIO_DISABLE_STD_ATOMIC 1 +++ ++ // define this to locate a compiler config file: ++ // #define BOOST_COMPILER_CONFIG ++ ++diff -Naur boost_1_59_0/libs/filesystem/src/operations.cpp boost_1_59_0.patched/libs/filesystem/src/operations.cpp ++--- boost_1_59_0/libs/filesystem/src/operations.cpp 2015-07-27 04:09:17.000000000 -0700 +++++ boost_1_59_0.patched/libs/filesystem/src/operations.cpp 2018-03-07 20:42:42.518393500 -0800 ++@@ -11,6 +11,7 @@ ++ //--------------------------------------------------------------------------------------// ++ ++ // define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355) +++#if defined(__LP64__) || !defined(__ANDROID_API__) || (__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 +29,7 @@ ++ #else ++ #define _FILE_OFFSET_BITS 64 ++ #endif +++#endif ++ ++ // define BOOST_FILESYSTEM_SOURCE so that knows ++ // the library is being built (possibly exporting rather than importing code) ++@@ -220,7 +222,19 @@ ++ || ::mkdir(to.c_str(),from_stat.st_mode)!= 0)) ++ # define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool) ++ # define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0) +++#if defined(__ANDROID__) || defined(ANDROID) +++ int BOOST_RESIZE_FILE(const char *path, off_t size) +++ { +++ int result = -1; +++ int fd = open(path, O_WRONLY); +++ if (fd != -1) +++ result = ftruncate(fd, size); +++ close(fd); +++ return result; +++ } +++#else ++ # define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0) +++#endif ++ ++ # define BOOST_ERROR_NOT_SUPPORTED ENOSYS ++ # define BOOST_ERROR_ALREADY_EXISTS EEXIST diff --git a/patches/boost-1_65_1/filesystem_operations.patch b/patches/boost-1_65_1/filesystem_operations.patch new file mode 100644 index 0000000..7c35f4f From aa383eaa00bc2da2d409d7c7983492ad5efdd97d Mon Sep 17 00:00:00 2001 From: Jesse Towner Date: Thu, 8 Mar 2018 19:08:54 -0800 Subject: [PATCH 6/6] Build both release and debug variants of Boost for each target architecture. --- Build_android/boost-for-android.patch | 55 ++++++++++++--------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/Build_android/boost-for-android.patch b/Build_android/boost-for-android.patch index 2262718166..f554044307 100644 --- a/Build_android/boost-for-android.patch +++ b/Build_android/boost-for-android.patch @@ -1,5 +1,5 @@ diff --git a/build-android.sh b/build-android.sh -index ad0707e..f44c494 100755 +index ad0707e..56d44f6 100755 --- a/build-android.sh +++ b/build-android.sh @@ -41,6 +41,10 @@ boost_version() @@ -234,14 +234,17 @@ index ad0707e..f44c494 100755 if [ "$ARCH" = "armeabi" ]; then if [ -z "$LIBRARIES" ]; then echo "Disabling boost_math library on armeabi architecture, because of broken toolchain" | tee -a $PROGDIR/build.log -@@ -504,6 +570,7 @@ echo "Building boost for android for $ARCH" +@@ -504,8 +570,10 @@ echo "Building boost for android for $ARCH" -j$NCPU \ target-os=${TARGET_OS} \ toolset=${TOOLSET_ARCH} \ + $ANDROID_FEATURES \ $cflags \ $cxxflags \ ++ variant=debug,release \ link=static \ + threading=multi \ + --layout=versioned \ diff --git a/configs/user-config-boost-1_55_0-arm64-v8a.jam b/configs/user-config-boost-1_55_0-arm64-v8a.jam new file mode 100644 index 0000000..4ed01c8 @@ -287,7 +290,7 @@ index 0000000..7867ef1 +-fno-integrated-as diff --git a/configs/user-config-boost-1_55_0-common.jam b/configs/user-config-boost-1_55_0-common.jam new file mode 100644 -index 0000000..6283038 +index 0000000..56de635 --- /dev/null +++ b/configs/user-config-boost-1_55_0-common.jam @@ -0,0 +1,25 @@ @@ -302,7 +305,7 @@ index 0000000..6283038 +-fexceptions +-frtti +-ffunction-sections -+-funwind-tables ++-fasynchronous-unwind-tables +-fstack-protector-strong +-Wno-invalid-command-line-argument +-Wno-unused-command-line-argument @@ -625,7 +628,7 @@ index 0000000..7867ef1 +-fno-integrated-as diff --git a/configs/user-config-boost-1_59_0-common.jam b/configs/user-config-boost-1_59_0-common.jam new file mode 100644 -index 0000000..6283038 +index 0000000..56de635 --- /dev/null +++ b/configs/user-config-boost-1_59_0-common.jam @@ -0,0 +1,25 @@ @@ -640,7 +643,7 @@ index 0000000..6283038 +-fexceptions +-frtti +-ffunction-sections -+-funwind-tables ++-fasynchronous-unwind-tables +-fstack-protector-strong +-Wno-invalid-command-line-argument +-Wno-unused-command-line-argument @@ -875,10 +878,15 @@ index f119d2a..7867ef1 100644 -$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi --D__ANDROID_API__=15 diff --git a/configs/user-config-boost-1_65_1-common.jam b/configs/user-config-boost-1_65_1-common.jam -index 9bb70c1..6283038 100644 +index 9bb70c1..56de635 100644 --- a/configs/user-config-boost-1_65_1-common.jam +++ b/configs/user-config-boost-1_65_1-common.jam -@@ -13,11 +13,10 @@ $(AndroidBinariesPath)/clang++ +@@ -9,15 +9,14 @@ $(AndroidBinariesPath)/clang++ + -fexceptions + -frtti + -ffunction-sections +--funwind-tables ++-fasynchronous-unwind-tables -fstack-protector-strong -Wno-invalid-command-line-argument -Wno-unused-command-line-argument @@ -1096,10 +1104,15 @@ index f119d2a..7867ef1 100644 -$(AndroidNDKRoot)/sysroot/usr/include/arm-linux-androideabi --D__ANDROID_API__=15 diff --git a/configs/user-config-boost-1_66_0-common.jam b/configs/user-config-boost-1_66_0-common.jam -index 9bb70c1..6283038 100644 +index 9bb70c1..56de635 100644 --- a/configs/user-config-boost-1_66_0-common.jam +++ b/configs/user-config-boost-1_66_0-common.jam -@@ -13,11 +13,10 @@ $(AndroidBinariesPath)/clang++ +@@ -9,15 +9,14 @@ $(AndroidBinariesPath)/clang++ + -fexceptions + -frtti + -ffunction-sections +--funwind-tables ++-fasynchronous-unwind-tables -fstack-protector-strong -Wno-invalid-command-line-argument -Wno-unused-command-line-argument @@ -1393,10 +1406,10 @@ index 0000000..246aa49 + std::size_t max_limit diff --git a/patches/boost-1_59_0/boost-1_59_0.patch b/patches/boost-1_59_0/boost-1_59_0.patch new file mode 100644 -index 0000000..3d54926 +index 0000000..eaaf6c7 --- /dev/null +++ b/patches/boost-1_59_0/boost-1_59_0.patch -@@ -0,0 +1,100 @@ +@@ -0,0 +1,82 @@ +diff -Naur boost_1_59_0/boost/asio/detail/socket_types.hpp boost_1_59_0.patched/boost/asio/detail/socket_types.hpp +--- boost_1_59_0/boost/asio/detail/socket_types.hpp 2015-03-23 13:24:12.000000000 -0700 ++++ boost_1_59_0.patched/boost/asio/detail/socket_types.hpp 2018-03-07 20:27:54.992509800 -0800 @@ -1440,24 +1453,6 @@ index 0000000..3d54926 + #if defined(_MSC_VER) && (_MSC_VER >= 1200) + # pragma once + #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) -+diff -Naur boost_1_59_0/boost/config/user.hpp boost_1_59_0.patched/boost/config/user.hpp -+--- boost_1_59_0/boost/config/user.hpp 2015-08-04 04:44:49.000000000 -0700 -++++ boost_1_59_0.patched/boost/config/user.hpp 2018-03-07 20:27:55.011995500 -0800 -+@@ -13,6 +13,14 @@ -+ // configuration policy: -+ // -+ -++// Android defines -++#define _REENTRANT 1 -++#define _GLIBCXX__PTHREADS 1 -++// There is problem with std::atomic on android (and some other platforms). -++// See this link for more info: -++// https://code.google.com/p/android/issues/detail?id=42735#makechanges -++#define BOOST_ASIO_DISABLE_STD_ATOMIC 1 -++ -+ // define this to locate a compiler config file: -+ // #define BOOST_COMPILER_CONFIG -+ +diff -Naur boost_1_59_0/libs/filesystem/src/operations.cpp boost_1_59_0.patched/libs/filesystem/src/operations.cpp +--- boost_1_59_0/libs/filesystem/src/operations.cpp 2015-07-27 04:09:17.000000000 -0700 ++++ boost_1_59_0.patched/libs/filesystem/src/operations.cpp 2018-03-07 20:42:42.518393500 -0800