| #!/usr/bin/env bash |
| #===- libcxx/utils/docker/scripts/build_install_llvm_version_default.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 |
| --install destination directory where to install the targets. |
| --branch the branch or tag of LLVM to build |
| Required options: --install, and --version. |
| |
| All options after '--' are passed to CMake invocation. |
| EOF |
| } |
| |
| LLVM_BRANCH="" |
| CMAKE_ARGS="" |
| LLVM_INSTALL_DIR="" |
| |
| while [[ $# -gt 0 ]]; do |
| case "$1" in |
| --install) |
| shift |
| LLVM_INSTALL_DIR="$1" |
| shift |
| ;; |
| --branch) |
| shift |
| LLVM_BRANCH="$1" |
| shift |
| ;; |
| --) |
| shift |
| CMAKE_ARGS="$*" |
| shift $# |
| ;; |
| -h|--help) |
| show_usage |
| exit 0 |
| ;; |
| *) |
| echo "Unknown option: $1" |
| exit 1 |
| esac |
| done |
| |
| |
| if [ "$LLVM_INSTALL_DIR" == "" ]; then |
| echo "No install directory. Please specify the --install argument." |
| exit 1 |
| fi |
| |
| if [ "$LLVM_BRANCH" == "" ]; then |
| echo "No install directory. Please specify the --branch argument." |
| exit 1 |
| fi |
| |
| if [ "$CMAKE_ARGS" == "" ]; then |
| CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RELEASE '-DCMAKE_C_FLAGS=-gline-tables-only' '-DCMAKE_CXX_FLAGS=-gline-tables-only' -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON" |
| fi |
| |
| set -x |
| |
| TMP_ROOT="$(mktemp -d -p /tmp)" |
| LLVM_SOURCE_DIR="$TMP_ROOT/llvm-project" |
| LLVM_BUILD_DIR="$TMP_ROOT/build" |
| LLVM="$LLVM_SOURCE_DIR/llvm" |
| |
| git clone --branch $LLVM_BRANCH --single-branch --depth=1 https://github.com/llvm/llvm-project.git $LLVM_SOURCE_DIR |
| |
| pushd "$LLVM_SOURCE_DIR" |
| |
| # Setup the source-tree using the old style layout |
| ln -s $LLVM_SOURCE_DIR/libcxx $LLVM/projects/libcxx |
| ln -s $LLVM_SOURCE_DIR/libcxxabi $LLVM/projects/libcxxabi |
| ln -s $LLVM_SOURCE_DIR/compiler-rt $LLVM/projects/compiler-rt |
| ln -s $LLVM_SOURCE_DIR/clang $LLVM/tools/clang |
| ln -s $LLVM_SOURCE_DIR/clang-tools-extra $LLVM/tools/clang/tools/extra |
| |
| popd |
| |
| # Configure and build |
| mkdir "$LLVM_BUILD_DIR" |
| pushd "$LLVM_BUILD_DIR" |
| cmake -GNinja "-DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_DIR" $CMAKE_ARGS $LLVM |
| ninja install |
| popd |
| |
| # Cleanup |
| rm -rf "$TMP_ROOT/" |
| |
| echo "Done" |