|  | #!/usr/bin/env bash | 
|  | #===- llvm/utils/docker/scripts/build_install_llvm.sh ---------------------===// | 
|  | # | 
|  | # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | # See https://llvm.org/LICENSE.txt for license information. | 
|  | # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | # | 
|  | #===-----------------------------------------------------------------------===// | 
|  |  | 
|  | set -e | 
|  |  | 
|  | function show_usage() { | 
|  | cat << EOF | 
|  | Usage: build_install_llvm.sh [options] -- [cmake-args] | 
|  |  | 
|  | Run cmake with the specified arguments. Used inside docker container. | 
|  | Passes additional -DCMAKE_INSTALL_PREFIX and puts the build results into | 
|  | the directory specified by --to option. | 
|  |  | 
|  | Available options: | 
|  | -h|--help           show this help message | 
|  | -i|--install-target name of a cmake install target to build and include in | 
|  | the resulting archive. Can be specified multiple times. | 
|  | --to                destination directory where to install the targets. | 
|  | Required options: --to, at least one --install-target. | 
|  |  | 
|  | All options after '--' are passed to CMake invocation. | 
|  | EOF | 
|  | } | 
|  |  | 
|  | CMAKE_ARGS="" | 
|  | CMAKE_INSTALL_TARGETS="" | 
|  | CLANG_INSTALL_DIR="" | 
|  |  | 
|  | while [[ $# -gt 0 ]]; do | 
|  | case "$1" in | 
|  | -i|--install-target) | 
|  | shift | 
|  | CMAKE_INSTALL_TARGETS="$CMAKE_INSTALL_TARGETS $1" | 
|  | shift | 
|  | ;; | 
|  | --to) | 
|  | shift | 
|  | CLANG_INSTALL_DIR="$1" | 
|  | shift | 
|  | ;; | 
|  | --) | 
|  | shift | 
|  | CMAKE_ARGS="$*" | 
|  | shift $# | 
|  | ;; | 
|  | -h|--help) | 
|  | show_usage | 
|  | exit 0 | 
|  | ;; | 
|  | *) | 
|  | echo "Unknown option: $1" | 
|  | exit 1 | 
|  | esac | 
|  | done | 
|  |  | 
|  | if [ "$CMAKE_INSTALL_TARGETS" == "" ]; then | 
|  | echo "No install targets. Please pass one or more --install-target." | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | if [ "$CLANG_INSTALL_DIR" == "" ]; then | 
|  | echo "No install directory. Please specify the --to argument." | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | CLANG_BUILD_DIR=/tmp/clang-build | 
|  |  | 
|  | mkdir -p "$CLANG_INSTALL_DIR" | 
|  |  | 
|  | mkdir -p "$CLANG_BUILD_DIR/build" | 
|  | pushd "$CLANG_BUILD_DIR/build" | 
|  |  | 
|  | # Run the build as specified in the build arguments. | 
|  | echo "Running build" | 
|  | cmake -GNinja \ | 
|  | -DCMAKE_INSTALL_PREFIX="$CLANG_INSTALL_DIR" \ | 
|  | $CMAKE_ARGS \ | 
|  | "$CLANG_BUILD_DIR/src/llvm" | 
|  | ninja $CMAKE_INSTALL_TARGETS | 
|  |  | 
|  | popd | 
|  |  | 
|  | # Cleanup. | 
|  | rm -rf "$CLANG_BUILD_DIR/build" | 
|  |  | 
|  | echo "Done" |