xref: /llvm-project/llvm/utils/docker/scripts/build_install_llvm.sh (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1af351daeSIlya Biryukov#!/usr/bin/env bash
2af351daeSIlya Biryukov#===- llvm/utils/docker/scripts/build_install_llvm.sh ---------------------===//
3af351daeSIlya Biryukov#
4*2946cd70SChandler Carruth# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*2946cd70SChandler Carruth# See https://llvm.org/LICENSE.txt for license information.
6*2946cd70SChandler Carruth# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7af351daeSIlya Biryukov#
8af351daeSIlya Biryukov#===-----------------------------------------------------------------------===//
9af351daeSIlya Biryukov
10af351daeSIlya Biryukovset -e
11af351daeSIlya Biryukov
12af351daeSIlya Biryukovfunction show_usage() {
131e4f6027SDon Hinton  cat << EOF
14af351daeSIlya BiryukovUsage: build_install_llvm.sh [options] -- [cmake-args]
15af351daeSIlya Biryukov
162bf7c51dSIlya BiryukovRun cmake with the specified arguments. Used inside docker container.
17d9502010SIlya BiryukovPasses additional -DCMAKE_INSTALL_PREFIX and puts the build results into
182bf7c51dSIlya Biryukovthe directory specified by --to option.
19af351daeSIlya Biryukov
20af351daeSIlya BiryukovAvailable options:
21af351daeSIlya Biryukov  -h|--help           show this help message
22af351daeSIlya Biryukov  -i|--install-target name of a cmake install target to build and include in
23af351daeSIlya Biryukov                      the resulting archive. Can be specified multiple times.
242bf7c51dSIlya Biryukov  --to                destination directory where to install the targets.
252bf7c51dSIlya BiryukovRequired options: --to, at least one --install-target.
26af351daeSIlya Biryukov
27af351daeSIlya BiryukovAll options after '--' are passed to CMake invocation.
28af351daeSIlya BiryukovEOF
29af351daeSIlya Biryukov}
30af351daeSIlya Biryukov
31af351daeSIlya BiryukovCMAKE_ARGS=""
32af351daeSIlya BiryukovCMAKE_INSTALL_TARGETS=""
332bf7c51dSIlya BiryukovCLANG_INSTALL_DIR=""
34e421fc81SIlya Biryukov
35af351daeSIlya Biryukovwhile [[ $# -gt 0 ]]; do
36af351daeSIlya Biryukov  case "$1" in
37af351daeSIlya Biryukov    -i|--install-target)
38af351daeSIlya Biryukov      shift
39af351daeSIlya Biryukov      CMAKE_INSTALL_TARGETS="$CMAKE_INSTALL_TARGETS $1"
40af351daeSIlya Biryukov      shift
41af351daeSIlya Biryukov      ;;
422bf7c51dSIlya Biryukov    --to)
432bf7c51dSIlya Biryukov      shift
442bf7c51dSIlya Biryukov      CLANG_INSTALL_DIR="$1"
452bf7c51dSIlya Biryukov      shift
462bf7c51dSIlya Biryukov      ;;
47af351daeSIlya Biryukov    --)
48af351daeSIlya Biryukov      shift
49af351daeSIlya Biryukov      CMAKE_ARGS="$*"
50af351daeSIlya Biryukov      shift $#
51af351daeSIlya Biryukov      ;;
52af351daeSIlya Biryukov    -h|--help)
53af351daeSIlya Biryukov      show_usage
54af351daeSIlya Biryukov      exit 0
55af351daeSIlya Biryukov      ;;
56af351daeSIlya Biryukov    *)
57af351daeSIlya Biryukov      echo "Unknown option: $1"
58af351daeSIlya Biryukov      exit 1
59af351daeSIlya Biryukov  esac
60af351daeSIlya Biryukovdone
61af351daeSIlya Biryukov
62af351daeSIlya Biryukovif [ "$CMAKE_INSTALL_TARGETS" == "" ]; then
63af351daeSIlya Biryukov  echo "No install targets. Please pass one or more --install-target."
64af351daeSIlya Biryukov  exit 1
65af351daeSIlya Biryukovfi
66af351daeSIlya Biryukov
672bf7c51dSIlya Biryukovif [ "$CLANG_INSTALL_DIR" == "" ]; then
682bf7c51dSIlya Biryukov  echo "No install directory. Please specify the --to argument."
692bf7c51dSIlya Biryukov  exit 1
70e421fc81SIlya Biryukovfi
7175db0812SIlya Biryukov
72af351daeSIlya BiryukovCLANG_BUILD_DIR=/tmp/clang-build
73af351daeSIlya Biryukov
742bf7c51dSIlya Biryukovmkdir -p "$CLANG_INSTALL_DIR"
75af351daeSIlya Biryukov
762bf7c51dSIlya Biryukovmkdir -p "$CLANG_BUILD_DIR/build"
7713cde86eSIlya Biryukovpushd "$CLANG_BUILD_DIR/build"
78af351daeSIlya Biryukov
79af351daeSIlya Biryukov# Run the build as specified in the build arguments.
80af351daeSIlya Biryukovecho "Running build"
81af351daeSIlya Biryukovcmake -GNinja \
82af351daeSIlya Biryukov  -DCMAKE_INSTALL_PREFIX="$CLANG_INSTALL_DIR" \
83af351daeSIlya Biryukov  $CMAKE_ARGS \
84af351daeSIlya Biryukov  "$CLANG_BUILD_DIR/src/llvm"
85af351daeSIlya Biryukovninja $CMAKE_INSTALL_TARGETS
86af351daeSIlya Biryukov
87af351daeSIlya Biryukovpopd
88af351daeSIlya Biryukov
89af351daeSIlya Biryukov# Cleanup.
902bf7c51dSIlya Biryukovrm -rf "$CLANG_BUILD_DIR/build"
91af351daeSIlya Biryukov
92af351daeSIlya Biryukovecho "Done"
93