diff options
Diffstat (limited to 'utils/docker/build_docker_image.sh')
| -rwxr-xr-x | utils/docker/build_docker_image.sh | 40 | 
1 files changed, 29 insertions, 11 deletions
diff --git a/utils/docker/build_docker_image.sh b/utils/docker/build_docker_image.sh index 33f690ad5c43..ad7831925f9a 100755 --- a/utils/docker/build_docker_image.sh +++ b/utils/docker/build_docker_image.sh @@ -15,7 +15,7 @@ DOCKER_TAG=""  BUILDSCRIPT_ARGS=""  function show_usage() { -  usage=$(cat << EOF +  cat << EOF  Usage: build_docker_image.sh [options] [-- [cmake_args]...]  Available options: @@ -38,6 +38,9 @@ Available options:                          Can be specified multiple times.      -i|--install-target name of a cmake install target to build and include in                          the resulting archive. Can be specified multiple times. +    -c|--checksums      name of a file, containing checksums of llvm checkout. +                        Script will fail if checksums of the checkout do not +                        match.  Required options: --source and --docker-repository, at least one    --install-target. @@ -64,10 +67,9 @@ $ ./build_docker_image.sh -s debian8 -d mydocker/clang-debian8 -t "latest" \      -DCLANG_ENABLE_BOOTSTRAP=ON \       -DCLANG_BOOTSTRAP_TARGETS="install-clang;install-clang-headers"  EOF -) -  echo "$usage"  } +CHECKSUMS_FILE=""  SEEN_INSTALL_TARGET=0  while [[ $# -gt 0 ]]; do    case "$1" in @@ -97,6 +99,11 @@ while [[ $# -gt 0 ]]; do        BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS $1 $2"        shift 2        ;; +    -c|--checksums) +      shift +      CHECKSUMS_FILE="$1" +      shift +      ;;      --)        shift        BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS -- $*" @@ -130,30 +137,41 @@ if [ $SEEN_INSTALL_TARGET -eq 0 ]; then    exit 1  fi -cd $(dirname $0) -if [ ! -d $IMAGE_SOURCE ]; then -  echo "No sources for '$IMAGE_SOURCE' were found in $PWD" +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 -echo "Building from $IMAGE_SOURCE" +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" + +mkdir "$BUILD_DIR/checksums" +if [ "$CHECKSUMS_FILE" != "" ]; then +  cp "$CHECKSUMS_FILE" "$BUILD_DIR/checksums/checksums.txt" +fi  if [ "$DOCKER_TAG" != "" ]; then    DOCKER_TAG=":$DOCKER_TAG"  fi +echo "Building from $IMAGE_SOURCE"  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" . +  -f "$BUILD_DIR/$IMAGE_SOURCE/build/Dockerfile" \ +  "$BUILD_DIR"  echo "Copying clang installation to release image sources" -docker run -v "$PWD/$IMAGE_SOURCE:/workspace" "$DOCKER_REPOSITORY-build$DOCKER_TAG" \ +docker run -v "$BUILD_DIR/$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" +  "$BUILD_DIR/$IMAGE_SOURCE/release"  echo "Done"  | 
