1*58b9f456SAndroid Build Coastguard Worker#!/bin/bash 2*58b9f456SAndroid Build Coastguard Worker#===- libcxx/utils/docker/build_docker_image.sh ----------------------------===// 3*58b9f456SAndroid Build Coastguard Worker# 4*58b9f456SAndroid Build Coastguard Worker# The LLVM Compiler Infrastructure 5*58b9f456SAndroid Build Coastguard Worker# 6*58b9f456SAndroid Build Coastguard Worker# This file is distributed under the University of Illinois Open Source 7*58b9f456SAndroid Build Coastguard Worker# License. See LICENSE.TXT for details. 8*58b9f456SAndroid Build Coastguard Worker# 9*58b9f456SAndroid Build Coastguard Worker#===----------------------------------------------------------------------===// 10*58b9f456SAndroid Build Coastguard Workerset -e 11*58b9f456SAndroid Build Coastguard Worker 12*58b9f456SAndroid Build Coastguard WorkerIMAGE_SOURCE="" 13*58b9f456SAndroid Build Coastguard WorkerDOCKER_REPOSITORY="" 14*58b9f456SAndroid Build Coastguard WorkerDOCKER_TAG="" 15*58b9f456SAndroid Build Coastguard Worker 16*58b9f456SAndroid Build Coastguard Workerfunction show_usage() { 17*58b9f456SAndroid Build Coastguard Worker cat << EOF 18*58b9f456SAndroid Build Coastguard WorkerUsage: build_docker_image.sh [options] [-- [cmake_args]...] 19*58b9f456SAndroid Build Coastguard Worker 20*58b9f456SAndroid Build Coastguard WorkerAvailable options: 21*58b9f456SAndroid Build Coastguard Worker General: 22*58b9f456SAndroid Build Coastguard Worker -h|--help show this help message 23*58b9f456SAndroid Build Coastguard Worker Docker-specific: 24*58b9f456SAndroid Build Coastguard Worker -s|--source image source dir (i.e. debian8, nvidia-cuda, etc) 25*58b9f456SAndroid Build Coastguard Worker -d|--docker-repository docker repository for the image 26*58b9f456SAndroid Build Coastguard Worker -t|--docker-tag docker tag for the image 27*58b9f456SAndroid Build Coastguard Worker 28*58b9f456SAndroid Build Coastguard WorkerRequired options: --source and --docker-repository. 29*58b9f456SAndroid Build Coastguard Worker 30*58b9f456SAndroid Build Coastguard WorkerFor example, running: 31*58b9f456SAndroid Build Coastguard Worker$ build_docker_image.sh -s debian9 -d mydocker/debian9-clang -t latest 32*58b9f456SAndroid Build Coastguard Workerwill produce two docker images: 33*58b9f456SAndroid Build Coastguard Worker mydocker/debian9-clang-build:latest - an intermediate image used to compile 34*58b9f456SAndroid Build Coastguard Worker clang. 35*58b9f456SAndroid Build Coastguard Worker mydocker/clang-debian9:latest - a small image with preinstalled clang. 36*58b9f456SAndroid Build Coastguard WorkerPlease note that this example produces a not very useful installation, since it 37*58b9f456SAndroid Build Coastguard Workerdoesn't override CMake defaults, which produces a Debug and non-boostrapped 38*58b9f456SAndroid Build Coastguard Workerversion of clang. 39*58b9f456SAndroid Build Coastguard WorkerEOF 40*58b9f456SAndroid Build Coastguard Worker} 41*58b9f456SAndroid Build Coastguard Worker 42*58b9f456SAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do 43*58b9f456SAndroid Build Coastguard Worker case "$1" in 44*58b9f456SAndroid Build Coastguard Worker -h|--help) 45*58b9f456SAndroid Build Coastguard Worker show_usage 46*58b9f456SAndroid Build Coastguard Worker exit 0 47*58b9f456SAndroid Build Coastguard Worker ;; 48*58b9f456SAndroid Build Coastguard Worker -s|--source) 49*58b9f456SAndroid Build Coastguard Worker shift 50*58b9f456SAndroid Build Coastguard Worker IMAGE_SOURCE="$1" 51*58b9f456SAndroid Build Coastguard Worker shift 52*58b9f456SAndroid Build Coastguard Worker ;; 53*58b9f456SAndroid Build Coastguard Worker -d|--docker-repository) 54*58b9f456SAndroid Build Coastguard Worker shift 55*58b9f456SAndroid Build Coastguard Worker DOCKER_REPOSITORY="$1" 56*58b9f456SAndroid Build Coastguard Worker shift 57*58b9f456SAndroid Build Coastguard Worker ;; 58*58b9f456SAndroid Build Coastguard Worker -t|--docker-tag) 59*58b9f456SAndroid Build Coastguard Worker shift 60*58b9f456SAndroid Build Coastguard Worker DOCKER_TAG="$1" 61*58b9f456SAndroid Build Coastguard Worker shift 62*58b9f456SAndroid Build Coastguard Worker ;; 63*58b9f456SAndroid Build Coastguard Worker *) 64*58b9f456SAndroid Build Coastguard Worker echo "Unknown argument $1" 65*58b9f456SAndroid Build Coastguard Worker exit 1 66*58b9f456SAndroid Build Coastguard Worker ;; 67*58b9f456SAndroid Build Coastguard Worker esac 68*58b9f456SAndroid Build Coastguard Workerdone 69*58b9f456SAndroid Build Coastguard Worker 70*58b9f456SAndroid Build Coastguard Worker 71*58b9f456SAndroid Build Coastguard Workercommand -v docker >/dev/null || 72*58b9f456SAndroid Build Coastguard Worker { 73*58b9f456SAndroid Build Coastguard Worker echo "Docker binary cannot be found. Please install Docker to use this script." 74*58b9f456SAndroid Build Coastguard Worker exit 1 75*58b9f456SAndroid Build Coastguard Worker } 76*58b9f456SAndroid Build Coastguard Worker 77*58b9f456SAndroid Build Coastguard Workerif [ "$IMAGE_SOURCE" == "" ]; then 78*58b9f456SAndroid Build Coastguard Worker echo "Required argument missing: --source" 79*58b9f456SAndroid Build Coastguard Worker exit 1 80*58b9f456SAndroid Build Coastguard Workerfi 81*58b9f456SAndroid Build Coastguard Worker 82*58b9f456SAndroid Build Coastguard Workerif [ "$DOCKER_REPOSITORY" == "" ]; then 83*58b9f456SAndroid Build Coastguard Worker echo "Required argument missing: --docker-repository" 84*58b9f456SAndroid Build Coastguard Worker exit 1 85*58b9f456SAndroid Build Coastguard Workerfi 86*58b9f456SAndroid Build Coastguard Worker 87*58b9f456SAndroid Build Coastguard WorkerSOURCE_DIR=$(dirname $0) 88*58b9f456SAndroid Build Coastguard Workerif [ ! -d "$SOURCE_DIR/$IMAGE_SOURCE" ]; then 89*58b9f456SAndroid Build Coastguard Worker echo "No sources for '$IMAGE_SOURCE' were found in $SOURCE_DIR" 90*58b9f456SAndroid Build Coastguard Worker exit 1 91*58b9f456SAndroid Build Coastguard Workerfi 92*58b9f456SAndroid Build Coastguard Worker 93*58b9f456SAndroid Build Coastguard WorkerBUILD_DIR=$(mktemp -d) 94*58b9f456SAndroid Build Coastguard Workertrap "rm -rf $BUILD_DIR" EXIT 95*58b9f456SAndroid Build Coastguard Workerecho "Using a temporary directory for the build: $BUILD_DIR" 96*58b9f456SAndroid Build Coastguard Worker 97*58b9f456SAndroid Build Coastguard Workercp -r "$SOURCE_DIR/$IMAGE_SOURCE" "$BUILD_DIR/$IMAGE_SOURCE" 98*58b9f456SAndroid Build Coastguard Workercp -r "$SOURCE_DIR/scripts" "$BUILD_DIR/scripts" 99*58b9f456SAndroid Build Coastguard Worker 100*58b9f456SAndroid Build Coastguard Worker 101*58b9f456SAndroid Build Coastguard Workerif [ "$DOCKER_TAG" != "" ]; then 102*58b9f456SAndroid Build Coastguard Worker DOCKER_TAG=":$DOCKER_TAG" 103*58b9f456SAndroid Build Coastguard Workerfi 104*58b9f456SAndroid Build Coastguard Worker 105*58b9f456SAndroid Build Coastguard Workerecho "Building ${DOCKER_REPOSITORY}${DOCKER_TAG} from $IMAGE_SOURCE" 106*58b9f456SAndroid Build Coastguard Workerdocker build -t "${DOCKER_REPOSITORY}${DOCKER_TAG}" \ 107*58b9f456SAndroid Build Coastguard Worker -f "$BUILD_DIR/$IMAGE_SOURCE/Dockerfile" \ 108*58b9f456SAndroid Build Coastguard Worker "$BUILD_DIR" 109*58b9f456SAndroid Build Coastguard Workerecho "Done" 110