diff options
Diffstat (limited to 'llvm/utils/docker/build_docker_image.sh')
| -rwxr-xr-x | llvm/utils/docker/build_docker_image.sh | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/llvm/utils/docker/build_docker_image.sh b/llvm/utils/docker/build_docker_image.sh index 0e129636ca4..89b98aaaf7c 100755 --- a/llvm/utils/docker/build_docker_image.sh +++ b/llvm/utils/docker/build_docker_image.sh @@ -13,6 +13,8 @@ IMAGE_SOURCE="" DOCKER_REPOSITORY="" DOCKER_TAG="" BUILDSCRIPT_ARGS="" +CHECKOUT_ARGS="" +CMAKE_ENABLED_PROJECTS="" function show_usage() { cat << EOF @@ -25,7 +27,7 @@ Available options: -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 - LLVM-specific: + Checkout arguments: -b|--branch svn branch to checkout, i.e. 'trunk', 'branches/release_40' (default: 'trunk') @@ -40,11 +42,12 @@ Available options: Project 'llvm' is always included and ignored, if specified. 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. + Build-specific: + -i|--install-target name of a cmake install target to build and include in + the resulting archive. Can be specified multiple times. Required options: --source and --docker-repository, at least one --install-target. @@ -75,6 +78,7 @@ EOF CHECKSUMS_FILE="" SEEN_INSTALL_TARGET=0 +SEEN_CMAKE_ARGS=0 while [[ $# -gt 0 ]]; do case "$1" in -h|--help) @@ -96,13 +100,28 @@ while [[ $# -gt 0 ]]; do DOCKER_TAG="$1" shift ;; - -i|--install-target|-r|--revision|-c|-cherrypick|-b|--branch|-p|--llvm-project) - if [ "$1" == "-i" ] || [ "$1" == "--install-target" ]; then - SEEN_INSTALL_TARGET=1 - fi + -r|--revision|-c|-cherrypick|-b|--branch) + CHECKOUT_ARGS="$CHECKOUT_ARGS $1 $2" + shift 2 + ;; + -i|--install-target) + SEEN_INSTALL_TARGET=1 BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS $1 $2" shift 2 ;; + -p|--llvm-project) + PROJ="$2" + if [ "$PROJ" == "cfe" ]; then + PROJ="clang" + fi + + CHECKOUT_ARGS="$CHECKOUT_ARGS $1 $PROJ" + if [ "$PROJ" != "clang-tools-extra" ]; then + CMAKE_ENABLED_PROJECTS="$CMAKE_ENABLED_PROJECTS:$PROJ" + fi + + shift 2 + ;; -c|--checksums) shift CHECKSUMS_FILE="$1" @@ -111,6 +130,7 @@ while [[ $# -gt 0 ]]; do --) shift BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS -- $*" + SEEN_CMAKE_ARGS=1 shift $# ;; *) @@ -120,6 +140,17 @@ while [[ $# -gt 0 ]]; do esac done + +if [ "$CMAKE_ENABLED_PROJECTS" != "" ]; then + # Remove the leading ':' character. + CMAKE_ENABLED_PROJECTS="${CMAKE_ENABLED_PROJECTS:1}" + + if [[ $SEEN_CMAKE_ARGS -eq 0 ]]; then + BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS --" + fi + BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS -DLLVM_ENABLE_PROJECTS=$CMAKE_ENABLED_PROJECTS" +fi + command -v docker >/dev/null || { echo "Docker binary cannot be found. Please install Docker to use this script." @@ -165,6 +196,7 @@ fi echo "Building ${DOCKER_REPOSITORY}${DOCKER_TAG} from $IMAGE_SOURCE" docker build -t "${DOCKER_REPOSITORY}${DOCKER_TAG}" \ + --build-arg "checkout_args=$CHECKOUT_ARGS" \ --build-arg "buildscript_args=$BUILDSCRIPT_ARGS" \ -f "$BUILD_DIR/$IMAGE_SOURCE/Dockerfile" \ "$BUILD_DIR" |

