[PowerPC] Keep vector int to fp conversions in vector domain
[llvm-core.git] / utils / docker / build_docker_image.sh
blob820a5f75ad132d6ea1bc1141ac7ccab55aeceab6
1 #!/bin/bash
2 #===- llvm/utils/docker/build_docker_image.sh ----------------------------===//
4 # The LLVM Compiler Infrastructure
6 # This file is distributed under the University of Illinois Open Source
7 # License. See LICENSE.TXT for details.
9 #===----------------------------------------------------------------------===//
10 set -e
12 IMAGE_SOURCE=""
13 DOCKER_REPOSITORY=""
14 DOCKER_TAG=""
15 BUILDSCRIPT_ARGS=""
16 CHECKOUT_ARGS=""
17 CMAKE_ENABLED_PROJECTS=""
19 function show_usage() {
20 cat << EOF
21 Usage: build_docker_image.sh [options] [-- [cmake_args]...]
23 Available options:
24 General:
25 -h|--help show this help message
26 Docker-specific:
27 -s|--source image source dir (i.e. debian8, nvidia-cuda, etc)
28 -d|--docker-repository docker repository for the image
29 -t|--docker-tag docker tag for the image
30 Checkout arguments:
31 -b|--branch svn branch to checkout, i.e. 'trunk',
32 'branches/release_40'
33 (default: 'trunk')
34 -r|--revision svn revision to checkout
35 -c|--cherrypick revision to cherry-pick. Can be specified multiple times.
36 Cherry-picks are performed in the sorted order using the
37 following command:
38 'svn patch <(svn diff -c \$rev)'.
39 -p|--llvm-project name of an svn project to checkout. Will also add the
40 project to a list LLVM_ENABLE_PROJECTS, passed to CMake.
41 For clang, please use 'clang', not 'cfe'.
42 Project 'llvm' is always included and ignored, if
43 specified.
44 Can be specified multiple times.
45 -c|--checksums name of a file, containing checksums of llvm checkout.
46 Script will fail if checksums of the checkout do not
47 match.
48 Build-specific:
49 -i|--install-target name of a cmake install target to build and include in
50 the resulting archive. Can be specified multiple times.
52 Required options: --source and --docker-repository, at least one
53 --install-target.
55 All options after '--' are passed to CMake invocation.
57 For example, running:
58 $ build_docker_image.sh -s debian8 -d mydocker/debian8-clang -t latest \
59 -p clang -i install-clang -i install-clang-headers
60 will produce two docker images:
61 mydocker/debian8-clang-build:latest - an intermediate image used to compile
62 clang.
63 mydocker/clang-debian8:latest - a small image with preinstalled clang.
64 Please note that this example produces a not very useful installation, since it
65 doesn't override CMake defaults, which produces a Debug and non-boostrapped
66 version of clang.
68 To get a 2-stage clang build, you could use this command:
69 $ ./build_docker_image.sh -s debian8 -d mydocker/clang-debian8 -t "latest" \
70 -p clang -i stage2-install-clang -i stage2-install-clang-headers \
71 -- \
72 -DLLVM_TARGETS_TO_BUILD=Native -DCMAKE_BUILD_TYPE=Release \
73 -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \
74 -DCLANG_ENABLE_BOOTSTRAP=ON \
75 -DCLANG_BOOTSTRAP_TARGETS="install-clang;install-clang-headers"
76 EOF
79 CHECKSUMS_FILE=""
80 SEEN_INSTALL_TARGET=0
81 SEEN_CMAKE_ARGS=0
82 while [[ $# -gt 0 ]]; do
83 case "$1" in
84 -h|--help)
85 show_usage
86 exit 0
88 -s|--source)
89 shift
90 IMAGE_SOURCE="$1"
91 shift
93 -d|--docker-repository)
94 shift
95 DOCKER_REPOSITORY="$1"
96 shift
98 -t|--docker-tag)
99 shift
100 DOCKER_TAG="$1"
101 shift
103 -r|--revision|-c|-cherrypick|-b|--branch)
104 CHECKOUT_ARGS="$CHECKOUT_ARGS $1 $2"
105 shift 2
107 -i|--install-target)
108 SEEN_INSTALL_TARGET=1
109 BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS $1 $2"
110 shift 2
112 -p|--llvm-project)
113 PROJ="$2"
114 if [ "$PROJ" == "cfe" ]; then
115 PROJ="clang"
118 CHECKOUT_ARGS="$CHECKOUT_ARGS $1 $PROJ"
119 if [ "$PROJ" != "clang-tools-extra" ]; then
120 CMAKE_ENABLED_PROJECTS="$CMAKE_ENABLED_PROJECTS;$PROJ"
123 shift 2
125 -c|--checksums)
126 shift
127 CHECKSUMS_FILE="$1"
128 shift
131 shift
132 BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS -- $*"
133 SEEN_CMAKE_ARGS=1
134 shift $#
137 echo "Unknown argument $1"
138 exit 1
140 esac
141 done
144 if [ "$CMAKE_ENABLED_PROJECTS" != "" ]; then
145 # Remove the leading ';' character.
146 CMAKE_ENABLED_PROJECTS="${CMAKE_ENABLED_PROJECTS:1}"
148 if [[ $SEEN_CMAKE_ARGS -eq 0 ]]; then
149 BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS --"
151 BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS -DLLVM_ENABLE_PROJECTS=$CMAKE_ENABLED_PROJECTS"
154 command -v docker >/dev/null ||
156 echo "Docker binary cannot be found. Please install Docker to use this script."
157 exit 1
160 if [ "$IMAGE_SOURCE" == "" ]; then
161 echo "Required argument missing: --source"
162 exit 1
165 if [ "$DOCKER_REPOSITORY" == "" ]; then
166 echo "Required argument missing: --docker-repository"
167 exit 1
170 if [ $SEEN_INSTALL_TARGET -eq 0 ]; then
171 echo "Please provide at least one --install-target"
172 exit 1
175 SOURCE_DIR=$(dirname $0)
176 if [ ! -d "$SOURCE_DIR/$IMAGE_SOURCE" ]; then
177 echo "No sources for '$IMAGE_SOURCE' were found in $SOURCE_DIR"
178 exit 1
181 BUILD_DIR=$(mktemp -d)
182 trap "rm -rf $BUILD_DIR" EXIT
183 echo "Using a temporary directory for the build: $BUILD_DIR"
185 cp -r "$SOURCE_DIR/$IMAGE_SOURCE" "$BUILD_DIR/$IMAGE_SOURCE"
186 cp -r "$SOURCE_DIR/scripts" "$BUILD_DIR/scripts"
188 mkdir "$BUILD_DIR/checksums"
189 if [ "$CHECKSUMS_FILE" != "" ]; then
190 cp "$CHECKSUMS_FILE" "$BUILD_DIR/checksums/checksums.txt"
193 if [ "$DOCKER_TAG" != "" ]; then
194 DOCKER_TAG=":$DOCKER_TAG"
197 echo "Building ${DOCKER_REPOSITORY}${DOCKER_TAG} from $IMAGE_SOURCE"
198 docker build -t "${DOCKER_REPOSITORY}${DOCKER_TAG}" \
199 --build-arg "checkout_args=$CHECKOUT_ARGS" \
200 --build-arg "buildscript_args=$BUILDSCRIPT_ARGS" \
201 -f "$BUILD_DIR/$IMAGE_SOURCE/Dockerfile" \
202 "$BUILD_DIR"
203 echo "Done"