blob: 9c7fa48e673f7afb6dd6393cdf6e85ade813ae0a [file] [log] [blame]
#!/bin/bash
set -ex
image="$1"
shift
if [ -z "${image}" ]; then
echo "Usage: $0 IMAGE"
exit 1
fi
UBUNTU_VERSION="$(echo "${image}" | perl -n -e'/ubuntu(\d+\.\d+)/ && print $1')"
CENTOS_VERSION="$(echo "${image}" | perl -n -e'/centos(\d+)/ && print $1')"
if [ -n "${UBUNTU_VERSION}" ]; then
OS="ubuntu"
DOCKERFILE="ubuntu/Dockerfile"
elif [ -n "${CENTOS_VERSION}" ]; then
OS="centos"
DOCKERFILE="centos/Dockerfile"
else
echo "Unable to derive operating system base..."
exit 1
fi
if [[ "$image" == py* ]]; then
PYTHON_VERSION="$(echo "${image}" | perl -n -e'/py(\d+(\.\d+)?)/ && print $1')"
fi
if [[ "$image" == *cuda* ]]; then
CUDA_VERSION="$(echo "${image}" | perl -n -e'/cuda(\d+\.\d+)/ && print $1')"
CUDNN_VERSION="$(echo "${image}" | perl -n -e'/cudnn(\d+)/ && print $1')"
DOCKERFILE="${OS}-cuda/Dockerfile"
fi
# TODO: the version number here actually doesn't do anything at the
# moment
if [[ "$image" == *rocm* ]]; then
ROCM_VERSION="$(echo "${image}" | perl -n -e'/rocm(\d+\.\d+\.\d+|nightly)/ && print $1')"
DOCKERFILE="${OS}-rocm/Dockerfile"
# newer cmake version needed
CMAKE_VERSION=3.6.3
fi
if [[ "$image" == *conda* ]]; then
# Unlike python version, Anaconda version is either 2 or 3
ANACONDA_VERSION="$(echo "${image}" | perl -n -e'/conda(\d)/ && print $1')"
fi
if [[ "$image" == *-mkl-* ]]; then
MKL=yes
fi
if [[ "$image" == *-android-* ]]; then
ANDROID=yes
# The Android NDK requires CMake 3.6 or higher.
# See https://github.com/caffe2/caffe2/pull/1740 for more info.
CMAKE_VERSION=3.6.3
fi
if [[ "$image" == *-gcc* ]]; then
GCC_VERSION="$(echo "${image}" | perl -n -e'/gcc(\d+(\.\d+)?)/ && print $1')"
fi
if [[ "$image" == *-clang* ]]; then
CLANG_VERSION="$(echo "${image}" | perl -n -e'/clang(\d+(\.\d+)?)/ && print $1')"
fi
if [[ "$image" == *-devtoolset* ]]; then
DEVTOOLSET_VERSION="$(echo "${image}" | perl -n -e'/devtoolset(\d+(\.\d+)?)/ && print $1')"
fi
# Copy over common scripts to directory containing the Dockerfile to build
cp -a common/* "$(dirname ${DOCKERFILE})"
# Set Jenkins UID and GID if running Jenkins
if [ -n "${JENKINS:-}" ]; then
JENKINS_UID=$(id -u jenkins)
JENKINS_GID=$(id -g jenkins)
fi
# Build image
docker build \
--build-arg "BUILD_ENVIRONMENT=${image}" \
--build-arg "EC2=${EC2:-}" \
--build-arg "JENKINS=${JENKINS:-}" \
--build-arg "JENKINS_UID=${JENKINS_UID:-}" \
--build-arg "JENKINS_GID=${JENKINS_GID:-}" \
--build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}" \
--build-arg "CENTOS_VERSION=${CENTOS_VERSION}" \
--build-arg "DEVTOOLSET_VERSION=${DEVTOOLSET_VERSION}" \
--build-arg "PYTHON_VERSION=${PYTHON_VERSION}" \
--build-arg "ANACONDA_VERSION=${ANACONDA_VERSION}" \
--build-arg "CUDA_VERSION=${CUDA_VERSION}" \
--build-arg "CUDNN_VERSION=${CUDNN_VERSION}" \
--build-arg "MKL=${MKL}" \
--build-arg "ANDROID=${ANDROID}" \
--build-arg "GCC_VERSION=${GCC_VERSION}" \
--build-arg "CLANG_VERSION=${CLANG_VERSION}" \
--build-arg "CMAKE_VERSION=${CMAKE_VERSION:-}" \
--build-arg "ROCM_VERSION=${ROCM_VERSION}" \
"$@" \
"$(dirname ${DOCKERFILE})"