xref: /aosp_15_r20/external/open-dice/bootstrap.sh (revision 60b67249c2e226f42f35cc6cfe66c6048e0bae6b)
1*60b67249SAndroid Build Coastguard Worker# Copyright 2020 Google LLC
2*60b67249SAndroid Build Coastguard Worker#
3*60b67249SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*60b67249SAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*60b67249SAndroid Build Coastguard Worker# the License at
6*60b67249SAndroid Build Coastguard Worker#
7*60b67249SAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*60b67249SAndroid Build Coastguard Worker#
9*60b67249SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*60b67249SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*60b67249SAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*60b67249SAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*60b67249SAndroid Build Coastguard Worker# the License.
14*60b67249SAndroid Build Coastguard Worker
15*60b67249SAndroid Build Coastguard Worker# This script must be sourced, not executed.
16*60b67249SAndroid Build Coastguard Worker#
17*60b67249SAndroid Build Coastguard Worker# Create a new environment:
18*60b67249SAndroid Build Coastguard Worker#
19*60b67249SAndroid Build Coastguard Worker#   source bootstrap.sh
20*60b67249SAndroid Build Coastguard Worker#
21*60b67249SAndroid Build Coastguard Worker# Activate an existing environment:
22*60b67249SAndroid Build Coastguard Worker#
23*60b67249SAndroid Build Coastguard Worker#   source activate.sh
24*60b67249SAndroid Build Coastguard Worker
25*60b67249SAndroid Build Coastguard Worker_bootstrap_abspath () {
26*60b67249SAndroid Build Coastguard Worker  $(command -v python3 || command -v python2 || command -v python) -c "import os.path; print(os.path.abspath('$@'))"
27*60b67249SAndroid Build Coastguard Worker}
28*60b67249SAndroid Build Coastguard Worker
29*60b67249SAndroid Build Coastguard Worker# Shell: bash.
30*60b67249SAndroid Build Coastguard Workerif test -n "$BASH"; then
31*60b67249SAndroid Build Coastguard Worker  _BOOTSTRAP_PATH="$(_bootstrap_abspath "$BASH_SOURCE")"
32*60b67249SAndroid Build Coastguard Worker# Shell: zsh.
33*60b67249SAndroid Build Coastguard Workerelif test -n "$ZSH_NAME"; then
34*60b67249SAndroid Build Coastguard Worker  _BOOTSTRAP_PATH="$(_bootstrap_abspath "${(%):-%N}")"
35*60b67249SAndroid Build Coastguard Worker# Shell: dash.
36*60b67249SAndroid Build Coastguard Workerelif test ${0##*/} = dash; then
37*60b67249SAndroid Build Coastguard Worker  _BOOTSTRAP_PATH="$(_bootstrap_abspath \
38*60b67249SAndroid Build Coastguard Worker    "$(lsof -p $$ -Fn0 | tail -1 | sed 's#^[^/]*##;')")"
39*60b67249SAndroid Build Coastguard Worker# If everything else fails, try $0. It could work.
40*60b67249SAndroid Build Coastguard Workerelse
41*60b67249SAndroid Build Coastguard Worker  _BOOTSTRAP_PATH="$(_bootstrap_abspath "$0")"
42*60b67249SAndroid Build Coastguard Workerfi
43*60b67249SAndroid Build Coastguard Worker
44*60b67249SAndroid Build Coastguard Worker# Check if this file is being executed or sourced.
45*60b67249SAndroid Build Coastguard Worker_pw_sourced=0
46*60b67249SAndroid Build Coastguard Workerif [ -n "$SWARMING_BOT_ID" ]; then
47*60b67249SAndroid Build Coastguard Worker  # If set we're running on swarming and don't need this check.
48*60b67249SAndroid Build Coastguard Worker  _pw_sourced=1
49*60b67249SAndroid Build Coastguard Workerelif [ -n "$ZSH_EVAL_CONTEXT" ]; then
50*60b67249SAndroid Build Coastguard Worker  case $ZSH_EVAL_CONTEXT in *:file) _pw_sourced=1;; esac
51*60b67249SAndroid Build Coastguard Workerelif [ -n "$KSH_VERSION" ]; then
52*60b67249SAndroid Build Coastguard Worker  [ "$(cd $(dirname -- $0) && pwd -P)/$(basename -- $0)" != \
53*60b67249SAndroid Build Coastguard Worker    "$(cd $(dirname -- ${.sh.file}) && pwd -P)/$(basename -- ${.sh.file})" ] \
54*60b67249SAndroid Build Coastguard Worker    && _pw_sourced=1
55*60b67249SAndroid Build Coastguard Workerelif [ -n "$BASH_VERSION" ]; then
56*60b67249SAndroid Build Coastguard Worker  (return 0 2>/dev/null) && _pw_sourced=1
57*60b67249SAndroid Build Coastguard Workerelse  # All other shells: examine $0 for known shell binary filenames
58*60b67249SAndroid Build Coastguard Worker  # Detects `sh` and `dash`; add additional shell filenames as needed.
59*60b67249SAndroid Build Coastguard Worker  case ${0##*/} in sh|dash) _pw_sourced=1;; esac
60*60b67249SAndroid Build Coastguard Workerfi
61*60b67249SAndroid Build Coastguard Worker
62*60b67249SAndroid Build Coastguard Worker# Downstream projects need to set something other than PW_ROOT here, like
63*60b67249SAndroid Build Coastguard Worker# YOUR_PROJECT_ROOT. Please also set PW_PROJECT_ROOT and PW_ROOT before
64*60b67249SAndroid Build Coastguard Worker# invoking pw_bootstrap or pw_activate.
65*60b67249SAndroid Build Coastguard Worker######### BEGIN PROJECT-SPECIFIC CODE #########
66*60b67249SAndroid Build Coastguard WorkerOPEN_DICE_ROOT="$(_bootstrap_abspath "$(dirname "$_BOOTSTRAP_PATH")")"
67*60b67249SAndroid Build Coastguard Workerexport OPEN_DICE_ROOT
68*60b67249SAndroid Build Coastguard WorkerPW_PROJECT_ROOT="$OPEN_DICE_ROOT"
69*60b67249SAndroid Build Coastguard WorkerPW_ROOT="$OPEN_DICE_ROOT/third_party/pigweed/src"
70*60b67249SAndroid Build Coastguard Worker
71*60b67249SAndroid Build Coastguard Worker# Set your project's banner and color.
72*60b67249SAndroid Build Coastguard WorkerPW_BRANDING_BANNER="$OPEN_DICE_ROOT/banner.txt"
73*60b67249SAndroid Build Coastguard Workerexport PW_BRANDING_BANNER
74*60b67249SAndroid Build Coastguard WorkerPW_BRANDING_BANNER_COLOR=magenta
75*60b67249SAndroid Build Coastguard Workerexport PW_BRANDING_BANNER_COLOR
76*60b67249SAndroid Build Coastguard Worker
77*60b67249SAndroid Build Coastguard Workeropen_dice_banner() {
78*60b67249SAndroid Build Coastguard Worker  cat "$PW_BRANDING_BANNER"
79*60b67249SAndroid Build Coastguard Worker  echo
80*60b67249SAndroid Build Coastguard Worker}
81*60b67249SAndroid Build Coastguard Worker
82*60b67249SAndroid Build Coastguard WorkerPW_BANNER_FUNC="open_dice_banner"
83*60b67249SAndroid Build Coastguard Worker########## END PROJECT-SPECIFIC CODE ##########
84*60b67249SAndroid Build Coastguard Workerexport PW_BANNER_FUNC
85*60b67249SAndroid Build Coastguard Workerexport PW_PROJECT_ROOT
86*60b67249SAndroid Build Coastguard Workerexport PW_ROOT
87*60b67249SAndroid Build Coastguard Worker
88*60b67249SAndroid Build Coastguard Worker_util_sh="$PW_ROOT/pw_env_setup/util.sh"
89*60b67249SAndroid Build Coastguard Worker
90*60b67249SAndroid Build Coastguard Worker# Double-check that the Pigweed submodule has been checked out.
91*60b67249SAndroid Build Coastguard Workerif [ ! -e "$_util_sh" ]; then
92*60b67249SAndroid Build Coastguard Worker  echo "Error: $_util_sh not found."
93*60b67249SAndroid Build Coastguard Worker  echo "Did you forget to initialize the git submodules?"
94*60b67249SAndroid Build Coastguard Worker  echo "To setup the git submodules run:"
95*60b67249SAndroid Build Coastguard Worker  echo "  git submodule update --init"
96*60b67249SAndroid Build Coastguard Worker  return
97*60b67249SAndroid Build Coastguard Workerfi
98*60b67249SAndroid Build Coastguard Worker
99*60b67249SAndroid Build Coastguard Worker. "$_util_sh"
100*60b67249SAndroid Build Coastguard Worker
101*60b67249SAndroid Build Coastguard Workerpw_deactivate
102*60b67249SAndroid Build Coastguard Workerpw_eval_sourced "$_pw_sourced"
103*60b67249SAndroid Build Coastguard Workerpw_check_root "$PW_ROOT"
104*60b67249SAndroid Build Coastguard Worker_PW_ACTUAL_ENVIRONMENT_ROOT="$(pw_get_env_root)"
105*60b67249SAndroid Build Coastguard Workerexport _PW_ACTUAL_ENVIRONMENT_ROOT
106*60b67249SAndroid Build Coastguard WorkerSETUP_SH="$_PW_ACTUAL_ENVIRONMENT_ROOT/activate.sh"
107*60b67249SAndroid Build Coastguard Worker
108*60b67249SAndroid Build Coastguard Worker# Run full bootstrap when invoked as bootstrap, or env file is missing/empty.
109*60b67249SAndroid Build Coastguard Workerif [ "$(basename "$_BOOTSTRAP_PATH")" = "bootstrap.sh" ] || \
110*60b67249SAndroid Build Coastguard Worker  [ ! -f "$SETUP_SH" ] || \
111*60b67249SAndroid Build Coastguard Worker  [ ! -s "$SETUP_SH" ]; then
112*60b67249SAndroid Build Coastguard Worker# This is where pw_bootstrap is called. Most small projects will include
113*60b67249SAndroid Build Coastguard Worker# --use-pigweed-defaults.
114*60b67249SAndroid Build Coastguard Worker######### BEGIN PROJECT-SPECIFIC CODE #########
115*60b67249SAndroid Build Coastguard Worker  pw_bootstrap --shell-file "$SETUP_SH" --install-dir "$_PW_ACTUAL_ENVIRONMENT_ROOT" --config-file "$PW_PROJECT_ROOT/pigweed.json"
116*60b67249SAndroid Build Coastguard Worker########## END PROJECT-SPECIFIC CODE ##########
117*60b67249SAndroid Build Coastguard Worker  pw_finalize bootstrap "$SETUP_SH"
118*60b67249SAndroid Build Coastguard Workerelse
119*60b67249SAndroid Build Coastguard Worker  pw_activate
120*60b67249SAndroid Build Coastguard Worker  pw_finalize activate "$SETUP_SH"
121*60b67249SAndroid Build Coastguard Workerfi
122*60b67249SAndroid Build Coastguard Worker
123*60b67249SAndroid Build Coastguard Workerif [ "$_PW_ENV_SETUP_STATUS" -eq 0 ]; then
124*60b67249SAndroid Build Coastguard Worker# This is where any additional checks about the environment should go.
125*60b67249SAndroid Build Coastguard Worker######### BEGIN PROJECT-SPECIFIC CODE #########
126*60b67249SAndroid Build Coastguard Worker  echo -n
127*60b67249SAndroid Build Coastguard Worker########## END PROJECT-SPECIFIC CODE ##########
128*60b67249SAndroid Build Coastguard Workerfi
129*60b67249SAndroid Build Coastguard Worker
130*60b67249SAndroid Build Coastguard Workerunset _pw_sourced
131*60b67249SAndroid Build Coastguard Workerunset _BOOTSTRAP_PATH
132*60b67249SAndroid Build Coastguard Workerunset SETUP_SH
133*60b67249SAndroid Build Coastguard Workerunset _bootstrap_abspath
134*60b67249SAndroid Build Coastguard Workerunset _util_sh
135*60b67249SAndroid Build Coastguard Worker
136*60b67249SAndroid Build Coastguard Workerpw_cleanup
137