xref: /aosp_15_r20/external/libcxx/utils/docker/scripts/checkout_git.sh (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker#!/usr/bin/env bash
2*58b9f456SAndroid Build Coastguard Worker#===- llvm/utils/docker/scripts/checkout.sh ---------------------===//
3*58b9f456SAndroid Build Coastguard Worker#
4*58b9f456SAndroid Build Coastguard Worker#                     The LLVM Compiler Infrastructure
5*58b9f456SAndroid Build Coastguard Worker#
6*58b9f456SAndroid Build Coastguard Worker# This file is distributed under the University of Illinois Open Source
7*58b9f456SAndroid Build Coastguard Worker# License. See LICENSE.TXT for details.
8*58b9f456SAndroid Build Coastguard Worker#
9*58b9f456SAndroid Build Coastguard Worker#===-----------------------------------------------------------------------===//
10*58b9f456SAndroid Build Coastguard Worker
11*58b9f456SAndroid Build Coastguard Workerset -e
12*58b9f456SAndroid Build Coastguard Worker
13*58b9f456SAndroid Build Coastguard Workerfunction show_usage() {
14*58b9f456SAndroid Build Coastguard Worker  cat << EOF
15*58b9f456SAndroid Build Coastguard WorkerUsage: checkout.sh [options]
16*58b9f456SAndroid Build Coastguard Worker
17*58b9f456SAndroid Build Coastguard WorkerCheckout svn sources into /tmp/clang-build/src. Used inside a docker container.
18*58b9f456SAndroid Build Coastguard Worker
19*58b9f456SAndroid Build Coastguard WorkerAvailable options:
20*58b9f456SAndroid Build Coastguard Worker  -h|--help           show this help message
21*58b9f456SAndroid Build Coastguard Worker  -b|--branch         svn branch to checkout, i.e. 'trunk',
22*58b9f456SAndroid Build Coastguard Worker                      'branches/release_40'
23*58b9f456SAndroid Build Coastguard Worker                      (default: 'trunk')
24*58b9f456SAndroid Build Coastguard Worker  -p|--llvm-project   name of an svn project to checkout.
25*58b9f456SAndroid Build Coastguard Worker                      For clang, please use 'clang', not 'cfe'.
26*58b9f456SAndroid Build Coastguard Worker                      Project 'llvm' is always included and ignored, if
27*58b9f456SAndroid Build Coastguard Worker                      specified.
28*58b9f456SAndroid Build Coastguard Worker                      Can be specified multiple times.
29*58b9f456SAndroid Build Coastguard WorkerEOF
30*58b9f456SAndroid Build Coastguard Worker}
31*58b9f456SAndroid Build Coastguard Worker
32*58b9f456SAndroid Build Coastguard WorkerLLVM_BRANCH=""
33*58b9f456SAndroid Build Coastguard Worker# We always checkout llvm
34*58b9f456SAndroid Build Coastguard WorkerLLVM_PROJECTS="llvm"
35*58b9f456SAndroid Build Coastguard WorkerSOURCE_DIR=""
36*58b9f456SAndroid Build Coastguard Worker
37*58b9f456SAndroid Build Coastguard Workerfunction contains_project() {
38*58b9f456SAndroid Build Coastguard Worker  local TARGET_PROJ="$1"
39*58b9f456SAndroid Build Coastguard Worker  local PROJ
40*58b9f456SAndroid Build Coastguard Worker  for PROJ in $LLVM_PROJECTS; do
41*58b9f456SAndroid Build Coastguard Worker    if [ "$PROJ" == "$TARGET_PROJ" ]; then
42*58b9f456SAndroid Build Coastguard Worker      return 0
43*58b9f456SAndroid Build Coastguard Worker    fi
44*58b9f456SAndroid Build Coastguard Worker  done
45*58b9f456SAndroid Build Coastguard Worker  return 1
46*58b9f456SAndroid Build Coastguard Worker}
47*58b9f456SAndroid Build Coastguard Worker
48*58b9f456SAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do
49*58b9f456SAndroid Build Coastguard Worker  case "$1" in
50*58b9f456SAndroid Build Coastguard Worker    --to)
51*58b9f456SAndroid Build Coastguard Worker      shift
52*58b9f456SAndroid Build Coastguard Worker      SOURCE_DIR="$1"
53*58b9f456SAndroid Build Coastguard Worker      shift
54*58b9f456SAndroid Build Coastguard Worker      ;;
55*58b9f456SAndroid Build Coastguard Worker    -b|--branch)
56*58b9f456SAndroid Build Coastguard Worker      shift
57*58b9f456SAndroid Build Coastguard Worker      LLVM_BRANCH="$1"
58*58b9f456SAndroid Build Coastguard Worker      shift
59*58b9f456SAndroid Build Coastguard Worker      ;;
60*58b9f456SAndroid Build Coastguard Worker    -p|--llvm-project)
61*58b9f456SAndroid Build Coastguard Worker      shift
62*58b9f456SAndroid Build Coastguard Worker      PROJ="$1"
63*58b9f456SAndroid Build Coastguard Worker      shift
64*58b9f456SAndroid Build Coastguard Worker
65*58b9f456SAndroid Build Coastguard Worker      if [ "$PROJ" == "cfe" ]; then
66*58b9f456SAndroid Build Coastguard Worker        PROJ="clang"
67*58b9f456SAndroid Build Coastguard Worker      fi
68*58b9f456SAndroid Build Coastguard Worker
69*58b9f456SAndroid Build Coastguard Worker      if ! contains_project "$PROJ" ; then
70*58b9f456SAndroid Build Coastguard Worker        if [ "$PROJ" == "clang-tools-extra" ] && [ ! contains_project "clang" ]; then
71*58b9f456SAndroid Build Coastguard Worker          echo "Project 'clang-tools-extra' specified before 'clang'. Adding 'clang' to a list of projects first."
72*58b9f456SAndroid Build Coastguard Worker          LLVM_PROJECTS="$LLVM_PROJECTS clang"
73*58b9f456SAndroid Build Coastguard Worker        fi
74*58b9f456SAndroid Build Coastguard Worker        LLVM_PROJECTS="$LLVM_PROJECTS $PROJ"
75*58b9f456SAndroid Build Coastguard Worker      else
76*58b9f456SAndroid Build Coastguard Worker        echo "Project '$PROJ' is already enabled, ignoring extra occurrences."
77*58b9f456SAndroid Build Coastguard Worker      fi
78*58b9f456SAndroid Build Coastguard Worker      ;;
79*58b9f456SAndroid Build Coastguard Worker    -h|--help)
80*58b9f456SAndroid Build Coastguard Worker      show_usage
81*58b9f456SAndroid Build Coastguard Worker      exit 0
82*58b9f456SAndroid Build Coastguard Worker      ;;
83*58b9f456SAndroid Build Coastguard Worker    *)
84*58b9f456SAndroid Build Coastguard Worker      echo "Unknown option: $1"
85*58b9f456SAndroid Build Coastguard Worker      exit 1
86*58b9f456SAndroid Build Coastguard Worker  esac
87*58b9f456SAndroid Build Coastguard Workerdone
88*58b9f456SAndroid Build Coastguard Worker
89*58b9f456SAndroid Build Coastguard Workerif [ "$SOURCE_DIR" == "" ]; then
90*58b9f456SAndroid Build Coastguard Worker  echo "Must specify checkout directory using --to"
91*58b9f456SAndroid Build Coastguard Worker  exit 1
92*58b9f456SAndroid Build Coastguard Workerfi
93*58b9f456SAndroid Build Coastguard Worker
94*58b9f456SAndroid Build Coastguard Workerif [ "$LLVM_BRANCH" == "" ]; then
95*58b9f456SAndroid Build Coastguard Worker  GIT_BRANCH_ARG=""
96*58b9f456SAndroid Build Coastguard Workerelse
97*58b9f456SAndroid Build Coastguard Worker  GIT_BRANCH_ARG="--branch $LLVM_BRANCH"
98*58b9f456SAndroid Build Coastguard Workerfi
99*58b9f456SAndroid Build Coastguard Worker
100*58b9f456SAndroid Build Coastguard Workerif [ "$LLVM_SVN_REV" != "" ]; then
101*58b9f456SAndroid Build Coastguard Worker  SVN_REV_ARG="-r$LLVM_SVN_REV"
102*58b9f456SAndroid Build Coastguard Worker  echo "Checking out svn revision r$LLVM_SVN_REV."
103*58b9f456SAndroid Build Coastguard Workerelse
104*58b9f456SAndroid Build Coastguard Worker  SVN_REV_ARG=""
105*58b9f456SAndroid Build Coastguard Worker  echo "Checking out latest svn revision."
106*58b9f456SAndroid Build Coastguard Workerfi
107*58b9f456SAndroid Build Coastguard Worker
108*58b9f456SAndroid Build Coastguard Worker# Get the sources from svn.
109*58b9f456SAndroid Build Coastguard Workerecho "Checking out sources from git"
110*58b9f456SAndroid Build Coastguard Worker
111*58b9f456SAndroid Build Coastguard Workerfor LLVM_PROJECT in $LLVM_PROJECTS; do
112*58b9f456SAndroid Build Coastguard Worker  if [ "$LLVM_PROJECT" == "llvm" ]; then
113*58b9f456SAndroid Build Coastguard Worker    CHECKOUT_DIR="$SOURCE_DIR"
114*58b9f456SAndroid Build Coastguard Worker  elif [ "$LLVM_PROJECT" == "libcxx" ] || [ "$LLVM_PROJECT" == "libcxxabi" ] || [ "$LLVM_PROJECT" == "compiler-rt" ]; then
115*58b9f456SAndroid Build Coastguard Worker    CHECKOUT_DIR="$SOURCE_DIR/projects/$LLVM_PROJECT"
116*58b9f456SAndroid Build Coastguard Worker  elif [ "$LLVM_PROJECT" == "clang" ]; then
117*58b9f456SAndroid Build Coastguard Worker    CHECKOUT_DIR="$SOURCE_DIR/tools/clang"
118*58b9f456SAndroid Build Coastguard Worker  elif [ "$LLVM_PROJECT" == "clang-tools-extra" ]; then
119*58b9f456SAndroid Build Coastguard Worker    CHECKOUT_DIR="$SOURCE_DIR/tools/clang/tools/extra"
120*58b9f456SAndroid Build Coastguard Worker  else
121*58b9f456SAndroid Build Coastguard Worker    CHECKOUT_DIR="$SOURCE_DIR/$LLVM_PROJECT"
122*58b9f456SAndroid Build Coastguard Worker  fi
123*58b9f456SAndroid Build Coastguard Worker
124*58b9f456SAndroid Build Coastguard Worker  echo "Checking out https://git.llvm.org/git/$LLVM_PROJECT to $CHECKOUT_DIR"
125*58b9f456SAndroid Build Coastguard Worker  git clone --depth=1 $GIT_BRANCH_ARG \
126*58b9f456SAndroid Build Coastguard Worker    "https://git.llvm.org/git/$LLVM_PROJECT.git" \
127*58b9f456SAndroid Build Coastguard Worker    "$CHECKOUT_DIR"
128*58b9f456SAndroid Build Coastguard Workerdone
129*58b9f456SAndroid Build Coastguard Worker
130*58b9f456SAndroid Build Coastguard Workerecho "Done"
131