Skip to content

Instantly share code, notes, and snippets.

@bjodah
Created February 28, 2020 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjodah/9866f3bcf247002a26176785e8d33817 to your computer and use it in GitHub Desktop.
Save bjodah/9866f3bcf247002a26176785e8d33817 to your computer and use it in GitHub Desktop.
#!/bin/bash
# This script uses docker to build a specific symengine commit under CentOS6/GCC8/boost1.72
#
# Example usage:
#
# $ sudo ./docker_symengine_cos6.sh e7d7ae55f4fd6740a48acaea0e7e24542ceda6b7
#
if ! which docker; then
2>&1 echo "You need to have docker installed. See e.g. https://www.docker.com/community-edition#/download"
exit 1
fi
if [ -z ${1:-""} ]; then
2>&1 echo 'No commit given, pass e.g. "master" as an argument'
exit 1
fi
set -euxo pipefail
if [ ! -d environment_cos6 ]; then
mkdir environment_cos6
cat <<EOF >environment_cos6/Dockerfile
FROM centos:6
ENV LANG en_US.UTF-8
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 && \
yum update -y && \
yum install -y \
bzip2 \
make \
patch \
sudo \
tar \
which \
m4 \
perl \
centos-release-scl && \
yum --enablerepo=centos-sclo-rh-testing install -y \
devtoolset-8-binutils \
devtoolset-8-gcc \
devtoolset-8-gcc-c++ && \
yum clean all && \
curl -Ls https://github.com/Kitware/CMake/releases/download/v3.16.4/cmake-3.16.4-Linux-x86_64.tar.gz | tar xz -C /opt/ && \
curl -Ls https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.bz2 | tar xj -C /opt/
EOF
fi
if groups | grep docker; then
DOCKERCMD=docker
else
DOCKERCMD="sudo docker"
fi
DOCKERIMAGE=$($DOCKERCMD build environment_cos6 | tee /dev/tty | tail -n 1 | cut -d' ' -f3)
MOUNT=$(realpath mount_cos6)
if [ ! -d $MOUNT ]; then
mkdir $MOUNT
fi
if [ ! -e $MOUNT/run.sh ]; then
cat <<'EOF' >$MOUNT/run.sh
#!/bin/bash -xe
export SYMENGINE_COMMIT=$1
if [ ! -d symengine-${SYMENGINE_COMMIT} ]; then
curl -Ls https://github.com/symengine/symengine/archive/${SYMENGINE_COMMIT}.tar.gz | tar xz
fi
mkdir -p symengine-build
cd symengine-build
export PATH="$(ls -d /opt/cmake-* | head -n 1)/bin:$PATH"
. scl_source enable devtoolset-8
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS_RELEASE="-O3 -DNDEBUG -march=sandybridge -funroll-loops" \
-DBUILD_SHARED_LIBS=OFF \
-DINTEGER_CLASS=boostmp \
../symengine-${SYMENGINE_COMMIT}
make -j $(nproc)
ctest --output-on-failure
EOF
chmod +x $MOUNT/run.sh
fi
HOST_USER=${SUDO_USER:-${LOGNAME}}
$DOCKERCMD run --rm --name "symengine_compile" \
-e HOST_WHOAMI=${HOST_USER} -e HOST_UID=$(id -u ${HOST_USER}) -e HOST_GID=$(id -g ${HOST_USER}) \
-v $MOUNT:/mount -w /mount --cap-add SYS_PTRACE \
-it $DOCKERIMAGE /usr/bin/env bash -x -c \
"groupadd -f --gid \$HOST_GID \$HOST_WHOAMI; \
useradd --uid \$HOST_UID --gid \$HOST_GID --home /mount \$HOST_WHOAMI; \
/usr/bin/sudo -E -u \$HOST_WHOAMI -i /bin/bash /mount/run.sh $1"
@bjodah
Copy link
Author

bjodah commented Mar 22, 2020

xref: symengine/symengine#1639
TODO: use patched boost and/or update symengine source to work-around bug in boost.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment