forked from bazelbuild/bazel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
compile.sh
executable file
·99 lines (84 loc) · 3.39 KB
/
compile.sh
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
#!/bin/bash
# Copyright 2014 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This script bootstraps building a Bazel binary without Bazel then
# use this compiled Bazel to bootstrap Bazel itself. It can also
# be provided with a previous version of Bazel to bootstrap Bazel
# itself.
# The resulting binary can be found at output/bazel.
set -o errexit
# Correct PATH on Windows, to avoid using "FIND.EXE" instead of "/usr/bin/find"
# etc, leading to confusing errors.
export BAZEL_OLD_PATH=$PATH
case "$(uname -s | tr [:upper:] [:lower:])" in
msys*|mingw*|cygwin*)
# Check that the PATH is set up correctly by attempting to locate `[`.
# This ensures that `which` is installed correctly and can succeed, while
# also avoids accidentally locating a tool that exists in plain Windows too
# (like "find" for "FIND.EXE").
which [ >&/dev/null || export PATH="/bin:/usr/bin:$PATH"
esac
# Check that the bintools can be found, otherwise we would see very confusing
# error messages.
hash tr >&/dev/null || {
echo >&2 "ERROR: cannot locate GNU coreutils; check your PATH."
echo >&2 " (You may need to run 'export PATH=/bin:/usr/bin:\$PATH)'"
exit 1
}
cd "$(dirname "$0")"
# Set the default verbose mode in buildenv.sh so that we do not display command
# output unless there is a failure. We do this conditionally to offer the user
# a chance of overriding this in case they want to do so.
: ${VERBOSE:=no}
source scripts/bootstrap/buildenv.sh
mkdir -p output
: ${BAZEL:=}
#
# Create an initial binary so we can host ourself
#
if [ ! -x "${BAZEL}" ]; then
new_step 'Building Bazel from scratch'
source scripts/bootstrap/compile.sh
fi
#
# Bootstrap bazel using the previous bazel binary = release binary
#
if [ "${EMBED_LABEL-x}" = "x" ]; then
# Add a default label when unspecified
git_sha1=$(git_sha1)
EMBED_LABEL="$(get_last_version) (@${git_sha1:-non-git})"
fi
if [[ $PLATFORM == "darwin" ]] && \
xcodebuild -showsdks 2> /dev/null | grep -q '\-sdk iphonesimulator'; then
EXTRA_BAZEL_ARGS="${EXTRA_BAZEL_ARGS-} --define IPHONE_SDK=1"
fi
source scripts/bootstrap/bootstrap.sh
new_step 'Building Bazel with Bazel'
display "."
log "Building output/bazel"
# We set host and target platform directly since the defaults in @bazel_tools
# have not yet been generated.
bazel_build "src:bazel${EXE_EXT}" \
--experimental_host_platform=//tools/platforms:host_platform \
--experimental_platforms=//tools/platforms:target_platform \
|| fail "Could not build Bazel"
bazel_bin_path="$(get_bazel_bin_path)/src/bazel${EXE_EXT}"
[ -e "$bazel_bin_path" ] \
|| fail "Could not find freshly built Bazel binary at '$bazel_bin_path'"
cp -f "$bazel_bin_path" "output/bazel${EXE_EXT}" \
|| fail "Could not copy '$bazel_bin_path' to 'output/bazel${EXE_EXT}'"
chmod 0755 "output/bazel${EXE_EXT}"
BAZEL="$(pwd)/output/bazel${EXE_EXT}"
clear_log
display "Build successful! Binary is here: ${BAZEL}"