summaryrefslogtreecommitdiff
path: root/utils/docker/build_docker_image.sh
diff options
context:
space:
mode:
Diffstat (limited to 'utils/docker/build_docker_image.sh')
-rwxr-xr-xutils/docker/build_docker_image.sh40
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"