On some distributions, like CentOS, the default version of boost
is really old. So the best option is to build a newer one from source.
Also even on Fedora or Ubuntu it might be useful to point to
different version of boost other than what ./scripts/setup.py installs.

This script automates process of downloading the sources of specified version
of boost and building it using default or specified toolchain.
The last CROSS_AARCH64_TOOLSET parameter (gcc or gcc-arm) is intended to 
cross-compile
the aarch64 version of boost on x86_64 machine.

The built version of the boost is symlinked into the 
build/downloaded_packages/<arch>/boost/install/ directory and will
automatically be used where cross-compiling aarch64 OSv kernel.
In order to use x64 version of boost built using this script
we still need to make changes to the main makefile and
modules/common.gmk.

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>
---
 scripts/download_and_build_boost.sh | 63 +++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)
 create mode 100755 scripts/download_and_build_boost.sh

diff --git a/scripts/download_and_build_boost.sh 
b/scripts/download_and_build_boost.sh
new file mode 100755
index 00000000..7181f5d4
--- /dev/null
+++ b/scripts/download_and_build_boost.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+#
+# Copyright (C) 2020 Waldemar Kozaczuk
+#
+# This work is open source software, licensed under the terms of the
+# BSD license as described in the LICENSE file in the top-level directory.
+#
+
+# Usage:
+#  ./scripts/download_and_build_boost.sh <BOOST_VERSION> <ARCH> 
<CROSS_AARCH64_TOOLSET>
+#
+
+OSV_ROOT=$(dirname $(readlink -e $0))/..
+echo $OSV_ROOT
+
+BOOST_VERSION=$1
+if [[ "${BOOST_VERSION}" == "" ]]; then
+  BOOST_VERSION="1.70.0"
+fi
+BOOST_VERSION2=${BOOST_VERSION//[.]/_}
+
+ARCH=$2
+if [[ "${ARCH}" == "" ]]; then
+  ARCH=$(uname -m)
+fi
+
+#If CROSS_AARCH64_TOOLSET is set or passed we assume we are crosscompiling 
aarch64 on Intel
+CROSS_AARCH64_TOOLSET=$3
+
+rm -rf %s/boost/install
+
+TAR_DOWNLOAD_DIR=${OSV_ROOT}/build/downloaded_packages/${ARCH}/boost/upstream/
+mkdir -p ${TAR_DOWNLOAD_DIR}
+
+BOOST_URL=https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION2}.tar.gz
+wget -c -O ${TAR_DOWNLOAD_DIR}/boost_${BOOST_VERSION2}.tar.gz ${BOOST_URL}
+
+pushd ${TAR_DOWNLOAD_DIR} 
+rm -rf ./boost_${BOOST_VERSION2} && tar -xf ./boost_${BOOST_VERSION2}.tar.gz
+cd ./boost_${BOOST_VERSION2}
+./bootstrap.sh 
--with-libraries=system,thread,test,chrono,regex,date_time,filesystem,locale,random,atomic,log,program_options
+
+BOOST_DIR=$(pwd)
+case $CROSS_AARCH64_TOOLSET in
+  gcc)
+    echo "using gcc : arm : aarch64-linux-gnu-g++ ;" > user-config.jam ;;
+  gcc-arm)
+    echo "using gcc : arm : aarch64-none-linux-gnu-g++ ;" > user-config.jam ;;
+esac
+
+B2_OPTIONS="threading=multi"
+if [[ "${CROSS_AARCH64_TOOLSET}" != "" ]]; then
+  B2_OPTIONS="${B2_OPTIONS} --user-config=${BOOST_DIR}/user-config.jam 
toolset=${CROSS_AARCH64_TOOLSET} architecture=arm address-model=64"
+fi
+./b2 ${B2_OPTIONS} -j$(nproc)
+
+#
+# Create symlinks to install boost and make it visible to OSv makefile
+rm -f ../../install
+ln -s upstream/boost_${BOOST_VERSION2}/stage ../../install
+mkdir -p stage/usr/include
+ln -s ../../../boost stage/usr/include/boost
+popd
-- 
2.29.2

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20210205212222.1038474-1-jwkozaczuk%40gmail.com.

Reply via email to