summaryrefslogtreecommitdiff
path: root/utils/docker/build_docker_image.sh
diff options
context:
space:
mode:
authorIlya Biryukov <ibiryukov@google.com>2017-06-30 09:46:45 +0000
committerIlya Biryukov <ibiryukov@google.com>2017-06-30 09:46:45 +0000
commit83aa9ad2a39beb8e98861258efd6dbaff97727ca (patch)
tree62edb3dde661ed6f1d4c32d9792d9fc4ee7bcf3d /utils/docker/build_docker_image.sh
parent7dab9bfe3016988a518ea5868cbf0457d335a356 (diff)
Added Dockerfiles to build clang from sources.
Reviewers: klimek, chandlerc, mehdi_amini Reviewed By: klimek, mehdi_amini Subscribers: mehdi_amini, jlebar, llvm-commits Differential Revision: https://reviews.llvm.org/D34197 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306810 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/docker/build_docker_image.sh')
-rwxr-xr-xutils/docker/build_docker_image.sh121
1 files changed, 121 insertions, 0 deletions
diff --git a/utils/docker/build_docker_image.sh b/utils/docker/build_docker_image.sh
new file mode 100755
index 00000000000..2ec07ab6da4
--- /dev/null
+++ b/utils/docker/build_docker_image.sh
@@ -0,0 +1,121 @@
+#!/bin/bash
+#===- llvm/utils/docker/build_docker_image.sh ----------------------------===//
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===----------------------------------------------------------------------===//
+set -e
+
+IMAGE_SOURCE=""
+DOCKER_REPOSITORY=""
+DOCKER_TAG=""
+BUILDSCRIPT_ARGS=""
+
+function show_usage() {
+ usage=$(cat << EOF
+Usage: build_docker_image.sh [options] [-- [buildscript_args]...]
+
+Available options:
+ -s|--source image source dir (i.e. debian8, nvidia-cuda, etc)
+ -d|--docker-repository docker repository for the image
+ -t|--docker-tag docker tag for the image
+Required options: --source and --docker-repository.
+
+All options after '--' are passed to buildscript (see
+scripts/build_install_llvm.sh).
+
+For example, running:
+$ build_docker_image.sh -s debian8 -d mydocker/debian8-clang -t latest \
+ -- -p clang -i install-clang -i install-clang-headers
+will produce two docker images:
+ mydocker/debian8-clang-build:latest - an intermediate image used to compile
+ clang.
+ mydocker/clang-debian8:latest - a small image with preinstalled clang.
+Please note that this example produces a not very useful installation, since it
+doesn't override CMake defaults, which produces a Debug and non-boostrapped
+version of clang.
+For an example of a somewhat more useful build, see build_clang_image.sh.
+EOF
+)
+ echo "$usage"
+}
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ -h|--help)
+ show_usage
+ exit 0
+ ;;
+ -s|--source)
+ shift
+ IMAGE_SOURCE="$1"
+ shift
+ ;;
+ -d|--docker-repository)
+ shift
+ DOCKER_REPOSITORY="$1"
+ shift
+ ;;
+ -t|--docker-tag)
+ shift
+ DOCKER_TAG="$1"
+ shift
+ ;;
+ --)
+ shift
+ BUILDSCRIPT_ARGS="$*"
+ shift $#
+ ;;
+ *)
+ echo "Unknown argument $1"
+ exit 1
+ ;;
+ esac
+done
+
+command -v docker >/dev/null ||
+ {
+ echo "Docker binary cannot be found. Please install Docker to use this script."
+ exit 1
+ }
+
+if [ "$IMAGE_SOURCE" == "" ]; then
+ echo "Required argument missing: --source"
+ exit 1
+fi
+
+if [ "$DOCKER_REPOSITORY" == "" ]; then
+ echo "Required argument missing: --docker-repository"
+ exit 1
+fi
+
+cd $(dirname $0)
+if [ ! -d $IMAGE_SOURCE ]; then
+ echo "No sources for '$IMAGE_SOURCE' were found in $PWD"
+ exit 1
+fi
+
+echo "Building from $IMAGE_SOURCE"
+
+if [ "$DOCKER_TAG" != "" ]; then
+ DOCKER_TAG=":$DOCKER_TAG"
+fi
+
+echo "Building $DOCKER_REPOSITORY-build$DOCKER_TAG"
+docker build -t "$DOCKER_REPOSITORY-build$DOCKER_TAG" \
+ --build-arg "buildscript_args=$BUILDSCRIPT_ARGS" \
+ -f "$IMAGE_SOURCE/build/Dockerfile" .
+
+echo "Copying clang installation to release image sources"
+docker run -v "$PWD/$IMAGE_SOURCE:/workspace" "$DOCKER_REPOSITORY-build$DOCKER_TAG" \
+ cp /tmp/clang.tar.gz /workspace/release
+trap "rm -f $PWD/$IMAGE_SOURCE/release/clang.tar.gz" EXIT
+
+echo "Building release image"
+docker build -t "${DOCKER_REPOSITORY}${DOCKER_TAG}" \
+ "$IMAGE_SOURCE/release"
+
+echo "Done"