]>
Commit | Line | Data |
---|---|---|
abe05a73 | 1 | #!/usr/bin/env bash |
476ff2be SL |
2 | |
3 | set -e | |
4 | ||
83c7162d XL |
5 | if [ -n "$CI_JOB_NAME" ]; then |
6 | echo "[CI_JOB_NAME=$CI_JOB_NAME]" | |
7 | fi | |
8 | ||
8bb4bdeb XL |
9 | if [ "$NO_CHANGE_USER" = "" ]; then |
10 | if [ "$LOCAL_USER_ID" != "" ]; then | |
11 | useradd --shell /bin/bash -u $LOCAL_USER_ID -o -c "" -m user | |
12 | export HOME=/home/user | |
13 | unset LOCAL_USER_ID | |
14 | exec su --preserve-environment -c "env PATH=$PATH \"$0\"" user | |
15 | fi | |
476ff2be SL |
16 | fi |
17 | ||
8faf50e0 XL |
18 | # only enable core dump on Linux |
19 | if [ -f /proc/sys/kernel/core_pattern ]; then | |
20 | ulimit -c unlimited | |
21 | fi | |
22 | ||
3dfed10e XL |
23 | # There was a bad interaction between "old" 32-bit binaries on current 64-bit |
24 | # kernels with selinux enabled, where ASLR mmap would sometimes choose a low | |
25 | # address and then block it for being below `vm.mmap_min_addr` -> `EACCES`. | |
26 | # This is probably a kernel bug, but setting `ulimit -Hs` works around it. | |
27 | # See also `dist-i686-linux` where this setting is enabled. | |
28 | if [ "$SET_HARD_RLIMIT_STACK" = "1" ]; then | |
29 | rlimit_stack=$(ulimit -Ss) | |
30 | if [ "$rlimit_stack" != "" ]; then | |
31 | ulimit -Hs "$rlimit_stack" | |
32 | fi | |
33 | fi | |
34 | ||
8bb4bdeb XL |
35 | ci_dir=`cd $(dirname $0) && pwd` |
36 | source "$ci_dir/shared.sh" | |
37 | ||
ba9703b0 XL |
38 | if command -v python > /dev/null; then |
39 | PYTHON="python" | |
40 | elif command -v python3 > /dev/null; then | |
41 | PYTHON="python3" | |
42 | else | |
43 | PYTHON="python2" | |
44 | fi | |
45 | ||
60c5eb7d | 46 | if ! isCI || isCiBranch auto || isCiBranch beta; then |
94b46f34 | 47 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set build.print-step-timings --enable-verbose-tests" |
7cac9316 XL |
48 | fi |
49 | ||
32a655c1 | 50 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-sccache" |
32a655c1 | 51 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-manage-submodules" |
8bb4bdeb | 52 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-locked-deps" |
0bf4aa26 | 53 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-cargo-native-static" |
a1dfa0c6 | 54 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.codegen-units-std=1" |
8bb4bdeb XL |
55 | |
56 | if [ "$DIST_SRC" = "" ]; then | |
57 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-dist-src" | |
58 | fi | |
32a655c1 SL |
59 | |
60 | # If we're deploying artifacts then we set the release channel, otherwise if | |
ff7c6d11 | 61 | # we're not deploying then we want to be sure to enable all assertions because |
32a655c1 SL |
62 | # we'll be running tests |
63 | # | |
64 | # FIXME: need a scheme for changing this `nightly` value to `beta` and `stable` | |
65 | # either automatically or manually. | |
2a314972 | 66 | export RUST_RELEASE_CHANNEL=stable |
dfeec247 XL |
67 | |
68 | # Always set the release channel for bootstrap; this is normally not important (i.e., only dist | |
69 | # builds would seem to matter) but in practice bootstrap wants to know whether we're targeting | |
70 | # master, beta, or stable with a build to determine whether to run some checks (notably toolstate). | |
71 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --release-channel=$RUST_RELEASE_CHANNEL" | |
72 | ||
dc9dc135 | 73 | if [ "$DEPLOY$DEPLOY_ALT" = "1" ]; then |
32a655c1 | 74 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-static-stdcpp" |
b7449926 | 75 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.remap-debuginfo" |
dc9dc135 | 76 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --debuginfo-level-std=1" |
32a655c1 SL |
77 | |
78 | if [ "$NO_LLVM_ASSERTIONS" = "1" ]; then | |
79 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-llvm-assertions" | |
8bb4bdeb | 80 | elif [ "$DEPLOY_ALT" != "" ]; then |
e74abb32 XL |
81 | if [ "$NO_PARALLEL_COMPILER" = "" ]; then |
82 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.parallel-compiler" | |
83 | fi | |
abe05a73 | 84 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-assertions" |
0bf4aa26 | 85 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir" |
32a655c1 SL |
86 | fi |
87 | else | |
ea8adc8c XL |
88 | # We almost always want debug assertions enabled, but sometimes this takes too |
89 | # long for too little benefit, so we just turn them off. | |
90 | if [ "$NO_DEBUG_ASSERTIONS" = "" ]; then | |
91 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-debug-assertions" | |
92 | fi | |
32a655c1 SL |
93 | |
94 | # In general we always want to run tests with LLVM assertions enabled, but not | |
95 | # all platforms currently support that, so we have an option to disable. | |
96 | if [ "$NO_LLVM_ASSERTIONS" = "" ]; then | |
97 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-assertions" | |
98 | fi | |
0bf4aa26 XL |
99 | |
100 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir" | |
101 | fi | |
102 | ||
103 | if [ "$RUST_RELEASE_CHANNEL" = "nightly" ] || [ "$DIST_REQUIRE_ALL_TOOLS" = "" ]; then | |
104 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-missing-tools" | |
476ff2be SL |
105 | fi |
106 | ||
1b1a35ee XL |
107 | export COMPILETEST_NEEDS_ALL_LLVM_COMPONENTS=1 |
108 | ||
e1599b0c XL |
109 | # Print the date from the local machine and the date from an external source to |
110 | # check for clock drifts. An HTTP URL is used instead of HTTPS since on Azure | |
111 | # Pipelines it happened that the certificates were marked as expired. | |
112 | datecheck() { | |
113 | echo "== clock drift check ==" | |
114 | echo -n " local time: " | |
115 | date | |
116 | echo -n " network time: " | |
117 | curl -fs --head http://detectportal.firefox.com/success.txt | grep ^Date: \ | |
118 | | sed 's/Date: //g' || true | |
119 | echo "== end clock drift check ==" | |
120 | } | |
121 | datecheck | |
122 | trap datecheck EXIT | |
123 | ||
0531ce1d XL |
124 | # We've had problems in the past of shell scripts leaking fds into the sccache |
125 | # server (#48192) which causes Cargo to erroneously think that a build script | |
126 | # hasn't finished yet. Try to solve that problem by starting a very long-lived | |
127 | # sccache server at the start of the build, but no need to worry if this fails. | |
128 | SCCACHE_IDLE_TIMEOUT=10800 sccache --start-server || true | |
129 | ||
83c7162d | 130 | if [ "$RUN_CHECK_WITH_PARALLEL_QUERIES" != "" ]; then |
9fa01778 | 131 | $SRC/configure --enable-parallel-compiler |
ba9703b0 | 132 | CARGO_INCREMENTAL=0 $PYTHON ../x.py check |
0531ce1d XL |
133 | rm -f config.toml |
134 | rm -rf build | |
135 | fi | |
136 | ||
32a655c1 | 137 | $SRC/configure $RUST_CONFIGURE_ARGS |
7cac9316 | 138 | |
8bb4bdeb | 139 | retry make prepare |
476ff2be | 140 | |
3b2f2976 | 141 | make check-bootstrap |
3b2f2976 | 142 | |
0531ce1d XL |
143 | # Display the CPU and memory information. This helps us know why the CI timing |
144 | # is fluctuating. | |
e74abb32 | 145 | if isMacOS; then |
0531ce1d XL |
146 | system_profiler SPHardwareDataType || true |
147 | sysctl hw || true | |
476ff2be SL |
148 | ncpus=$(sysctl -n hw.ncpu) |
149 | else | |
0531ce1d XL |
150 | cat /proc/cpuinfo || true |
151 | cat /proc/meminfo || true | |
32a655c1 | 152 | ncpus=$(grep processor /proc/cpuinfo | wc -l) |
476ff2be SL |
153 | fi |
154 | ||
32a655c1 SL |
155 | if [ ! -z "$SCRIPT" ]; then |
156 | sh -x -c "$SCRIPT" | |
476ff2be | 157 | else |
7cac9316 | 158 | do_make() { |
7cac9316 | 159 | echo "make -j $ncpus $1" |
0531ce1d | 160 | make -j $ncpus $1 |
7cac9316 | 161 | local retval=$? |
7cac9316 XL |
162 | return $retval |
163 | } | |
164 | ||
7cac9316 | 165 | do_make "$RUST_CHECK_TARGET" |
476ff2be | 166 | fi |
dc9dc135 XL |
167 | |
168 | sccache --show-stats || true |