Index: docs/Docker.rst =================================================================== --- docs/Docker.rst +++ docs/Docker.rst @@ -88,15 +88,11 @@ ./llvm/utils/docker/build_docker_image.sh \ --source debian8 \ --docker-repository clang-debian8 --docker-tag "staging" \ - -- \ -p clang -i install-clang -i install-clang-headers \ -- \ -DCMAKE_BUILD_TYPE=Release -Note there are two levels of ``--`` indirection. First one separates -``build_docker_image.sh`` arguments from ``llvm/utils/build_install_llvm.sh`` -arguments. Second one separates CMake arguments from ``build_install_llvm.sh`` -arguments. Note that build like that doesn't use a 2-stage build process that +Note that build like that doesn't use a 2-stage build process that you probably want for clang. Running a 2-stage build is a little more intricate, this command will do that: @@ -108,7 +104,6 @@ ./build_docker_image.sh \ --source debian8 \ --docker-repository clang-debian8 --docker-tag "staging" \ - -- \ -p clang -i stage2-install-clang -i stage2-install-clang-headers \ -- \ -DLLVM_TARGETS_TO_BUILD=Native -DCMAKE_BUILD_TYPE=Release \ @@ -178,7 +173,6 @@ ./llvm/utils/docker/build_docker_image.sh \ -s debian8 --d clang-debian8 -t "staging" \ - -- \ --branch branches/google/stable \ -p clang -i install-clang -i install-clang-headers \ -- \ Index: utils/docker/build_docker_image.sh =================================================================== --- utils/docker/build_docker_image.sh +++ utils/docker/build_docker_image.sh @@ -16,20 +16,37 @@ function show_usage() { usage=$(cat << EOF -Usage: build_docker_image.sh [options] [-- [buildscript_args]...] +Usage: build_docker_image.sh [options] [-- [cmake_args]...] Available options: + General: + -h|--help show this help message + Docker-specific: -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 -Required options: --source and --docker-repository. - -All options after '--' are passed to buildscript (see -scripts/build_install_llvm.sh). + LLVM-specific: + -b|--branch svn branch to checkout, i.e. 'trunk', + 'branches/release_40' + (default: 'trunk') + -r|--revision svn revision to checkout + -p|--llvm-project name of an svn project to checkout. Will also add the + project to a list LLVM_ENABLE_PROJECTS, passed to CMake. + For clang, please use 'clang', not 'cfe'. + 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. + +Required options: --source and --docker-repository, at least one + --install-target. + +All options after '--' are passed to CMake invocation. For example, running: $ build_docker_image.sh -s debian8 -d mydocker/debian8-clang -t latest \ - -- -p clang -i install-clang -i install-clang-headers + -p clang -i install-clang -i install-clang-headers will produce two docker images: mydocker/debian8-clang-build:latest - an intermediate image used to compile clang. @@ -38,13 +55,20 @@ doesn't override CMake defaults, which produces a Debug and non-boostrapped version of clang. -For an example of a somewhat more useful build, search for 2-stage build -instructions in llvm/docs/Docker.rst. +To get a 2-stage clang build, you could use this command: +$ ./build_docker_image.sh -s debian8 -d mydocker/clang-debian8 -t "latest" \ + -p clang -i stage2-install-clang -i stage2-install-clang-headers \ + -- \ + -DLLVM_TARGETS_TO_BUILD=Native -DCMAKE_BUILD_TYPE=Release \ + -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \ + -DCLANG_ENABLE_BOOTSTRAP=ON \ + -DCLANG_BOOTSTRAP_TARGETS="install-clang;install-clang-headers" EOF ) echo "$usage" } +SEEN_INSTALL_TARGET=0 while [[ $# -gt 0 ]]; do case "$1" in -h|--help) @@ -66,9 +90,16 @@ DOCKER_TAG="$1" shift ;; + -i|--install-target|-r|--revision|-b|--branch|-p|--llvm-project) + if [ "$1" == "-i" ] || [ "$1" == "--install-target" ]; then + SEEN_INSTALL_TARGET=1 + fi + BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS $1 $2" + shift 2 + ;; --) shift - BUILDSCRIPT_ARGS="$*" + BUILDSCRIPT_ARGS="$BUILDSCRIPT_ARGS -- $*" shift $# ;; *) @@ -94,6 +125,11 @@ exit 1 fi +if [ $SEEN_INSTALL_TARGET -eq 0 ]; then + echo "Please provide at least one --install-target" + exit 1 +fi + cd $(dirname $0) if [ ! -d $IMAGE_SOURCE ]; then echo "No sources for '$IMAGE_SOURCE' were found in $PWD"