aboutsummaryrefslogtreecommitdiff
path: root/helpers/llvm-env
blob: d90c76739b582c30050bffaeba8d986895af49bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/env bash

# This script manages the environment needed by the helper scripts
# It needs to have one environment variable set in order to do its job:
# LLVM_ROOT - the directory under which the llvm sources and build directories
# will live

# This script is meant to be sourced, so we don't want things to exit on error,
# because that would kill the whole shell. Instead, we trap and return from the
# script (which leaves the shell running, so people can see what went wrong).
clean_exit="trap '' ERR; return"

trap "$clean_exit" ERR

. llvm-common

# Check that we have actually been sourced
if [ -z "$PS1" ]; then
  echo "This script must be sourced. You might want to create an alias llvm-env=\". llvm-env\""
  exit 1
fi

if [ "$1" = "" ]; then
  if [ -z "$LLVM_SRC" ]; then
    echo "You haven't set up a worktree"
    eval $clean_exit
  fi

  worktree=`basename $(readlink -m $LLVM_SRC/../)`
  echo $worktree
  eval $clean_exit
elif [ "$1" = "-h" ]; then
  echo "Usage: $0 <branch> [-cleanup] [-d]"
  echo "  <branch> : the name of the branch you want to set the env for;"
  echo "             it will be created if it does not already exist."
  echo "  -cleanup : will clean up the environment corresponding to <branch>;"
  echo "             this includes the worktrees for all the subprojects, as"
  echo "             well as any directories in that environment (especially the"
  echo "             build dirs!)"
  echo "             it will not clean up any branches (you should use"
  echo "             llvm-branch for that)"
  echo "  -d : build the debug version."
  eval $clean_exit
fi

branch=$1
shift

if [[ $branch = -* ]]; then
  echo "Invalid branch name $branch"
  eval $clean_exit
fi

if [ "$branch" = "master" ]; then
  echo "Building master directly is not supported."
  echo "You can instead run 'llvm-env TrackMaster'"
  echo "to create an environment that tracks master."
  eval $clean_exit
fi

clean=false
if [ "$1" = "-cleanup" ]; then
  clean=true
  shift
fi

debug_build=false
OPTIND=0
while getopts "d" opt; do
  if [ "$opt" = "d" ]; then
    debug_build=true
  else
    eval $clean_exit
  fi
  shift
done

if [ "$1" != "" ]; then
  echo "Too many args?"
  eval $clean_exit
fi

llvm_dir=$LLVM_ROOT/repos/llvm
llvm_worktree_dir=$LLVM_ROOT/$branch/llvm

llvm_build_dir=$LLVM_ROOT/$branch/build
if $debug_build; then
  llvm_build_dir=$LLVM_ROOT/$branch/debug
fi

if [ "$clean" = true ]; then
  .llvm-env-remove $llvm_dir $llvm_worktree_dir
else
  .llvm-env-add $branch $llvm_dir $llvm_worktree_dir
fi

# Changes to the environment should be confined to the end of the script, to
# make sure we don't change half the environment and then fail out

if [ "$clean" = true ]; then
  # Clean up the environment to make sure the other scripts error out
  # accordingly instead of trying anything stupid
  export LLVM_SRC=
  export LLVM_BLD=
  export LLVM_DEBUG=
  if [ ! -z "$LLVM_OLD_PATH" ]; then
    export PATH=$LLVM_OLD_PATH
  fi
  eval $clean_exit
fi

export LLVM_SRC=$llvm_worktree_dir
export LLVM_BLD=$llvm_build_dir
export LLVM_DEBUG=$debug_build # For llvm-build to know

# Make it possible to undo changes to the PATH: we export an LLVM_OLD_PATH, and
# instead of appending the binary dir to $PATH, we append to $LLVM_OLD_PATH (if
# it exists)
# This is intended to support scenarios where you want to switch between a
# release and debug build of the same branch in the same shell, without growing
# a huge PATH
path_to_add_to=$PATH
if [ ! -z "$LLVM_OLD_PATH" ]; then
  path_to_add_to=$LLVM_OLD_PATH
fi

export LLVM_OLD_PATH=$path_to_add_to
export PATH=$llvm_build_dir/bin:$path_to_add_to

eval $clean_exit