| #!/bin/bash |
| #===- libcxx/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="" |
| |
| function show_usage() { |
| cat << EOF |
| Usage: build_docker_image.sh [options] [-- [cmake_args]...] |
| |
| Available options: |
| General: |
| -h|--help show this help message |
| Docker-specific: |
| -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. |
| |
| For example, running: |
| $ build_docker_image.sh -s debian9 -d mydocker/debian9-clang -t latest |
| will produce two docker images: |
| mydocker/debian9-clang-build:latest - an intermediate image used to compile |
| clang. |
| mydocker/clang-debian9: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. |
| EOF |
| } |
| |
| 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 |
| ;; |
| *) |
| 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 |
| |
| SOURCE_DIR=$(dirname $0) |
| if [ ! -d "$SOURCE_DIR/$IMAGE_SOURCE" ]; then |
| echo "No sources for '$IMAGE_SOURCE' were found in $SOURCE_DIR" |
| exit 1 |
| fi |
| |
| BUILD_DIR=$(mktemp -d) |
| trap "rm -rf $BUILD_DIR" EXIT |
| echo "Using a temporary directory for the build: $BUILD_DIR" |
| |
| cp -r "$SOURCE_DIR/$IMAGE_SOURCE" "$BUILD_DIR/$IMAGE_SOURCE" |
| cp -r "$SOURCE_DIR/scripts" "$BUILD_DIR/scripts" |
| |
| |
| if [ "$DOCKER_TAG" != "" ]; then |
| DOCKER_TAG=":$DOCKER_TAG" |
| fi |
| |
| echo "Building ${DOCKER_REPOSITORY}${DOCKER_TAG} from $IMAGE_SOURCE" |
| docker build -t "${DOCKER_REPOSITORY}${DOCKER_TAG}" \ |
| -f "$BUILD_DIR/$IMAGE_SOURCE/Dockerfile" \ |
| "$BUILD_DIR" |
| echo "Done" |