]>
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 | 55 | |
5869c6ff XL |
56 | # Only produce xz tarballs on CI. gz tarballs will be generated by the release |
57 | # process by recompressing the existing xz ones. This decreases the storage | |
58 | # space required for CI artifacts. | |
59 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --dist-compression-formats=xz" | |
60 | ||
8bb4bdeb XL |
61 | if [ "$DIST_SRC" = "" ]; then |
62 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-dist-src" | |
63 | fi | |
32a655c1 SL |
64 | |
65 | # If we're deploying artifacts then we set the release channel, otherwise if | |
ff7c6d11 | 66 | # we're not deploying then we want to be sure to enable all assertions because |
32a655c1 SL |
67 | # we'll be running tests |
68 | # | |
69 | # FIXME: need a scheme for changing this `nightly` value to `beta` and `stable` | |
70 | # either automatically or manually. | |
36d6ef2b | 71 | export RUST_RELEASE_CHANNEL=stable |
dfeec247 XL |
72 | |
73 | # Always set the release channel for bootstrap; this is normally not important (i.e., only dist | |
74 | # builds would seem to matter) but in practice bootstrap wants to know whether we're targeting | |
75 | # master, beta, or stable with a build to determine whether to run some checks (notably toolstate). | |
76 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --release-channel=$RUST_RELEASE_CHANNEL" | |
77 | ||
dc9dc135 | 78 | if [ "$DEPLOY$DEPLOY_ALT" = "1" ]; then |
32a655c1 | 79 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-static-stdcpp" |
b7449926 | 80 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.remap-debuginfo" |
dc9dc135 | 81 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --debuginfo-level-std=1" |
32a655c1 SL |
82 | |
83 | if [ "$NO_LLVM_ASSERTIONS" = "1" ]; then | |
84 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-llvm-assertions" | |
8bb4bdeb | 85 | elif [ "$DEPLOY_ALT" != "" ]; then |
e74abb32 XL |
86 | if [ "$NO_PARALLEL_COMPILER" = "" ]; then |
87 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.parallel-compiler" | |
88 | fi | |
abe05a73 | 89 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-assertions" |
0bf4aa26 | 90 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir" |
32a655c1 SL |
91 | fi |
92 | else | |
ea8adc8c XL |
93 | # We almost always want debug assertions enabled, but sometimes this takes too |
94 | # long for too little benefit, so we just turn them off. | |
95 | if [ "$NO_DEBUG_ASSERTIONS" = "" ]; then | |
96 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-debug-assertions" | |
97 | fi | |
32a655c1 SL |
98 | |
99 | # In general we always want to run tests with LLVM assertions enabled, but not | |
100 | # all platforms currently support that, so we have an option to disable. | |
101 | if [ "$NO_LLVM_ASSERTIONS" = "" ]; then | |
102 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-assertions" | |
103 | fi | |
0bf4aa26 XL |
104 | |
105 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir" | |
106 | fi | |
107 | ||
108 | if [ "$RUST_RELEASE_CHANNEL" = "nightly" ] || [ "$DIST_REQUIRE_ALL_TOOLS" = "" ]; then | |
109 | RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-missing-tools" | |
476ff2be SL |
110 | fi |
111 | ||
1b1a35ee XL |
112 | export COMPILETEST_NEEDS_ALL_LLVM_COMPONENTS=1 |
113 | ||
e1599b0c XL |
114 | # Print the date from the local machine and the date from an external source to |
115 | # check for clock drifts. An HTTP URL is used instead of HTTPS since on Azure | |
116 | # Pipelines it happened that the certificates were marked as expired. | |
117 | datecheck() { | |
118 | echo "== clock drift check ==" | |
119 | echo -n " local time: " | |
120 | date | |
121 | echo -n " network time: " | |
122 | curl -fs --head http://detectportal.firefox.com/success.txt | grep ^Date: \ | |
123 | | sed 's/Date: //g' || true | |
124 | echo "== end clock drift check ==" | |
125 | } | |
126 | datecheck | |
127 | trap datecheck EXIT | |
128 | ||
0531ce1d XL |
129 | # We've had problems in the past of shell scripts leaking fds into the sccache |
130 | # server (#48192) which causes Cargo to erroneously think that a build script | |
131 | # hasn't finished yet. Try to solve that problem by starting a very long-lived | |
132 | # sccache server at the start of the build, but no need to worry if this fails. | |
133 | SCCACHE_IDLE_TIMEOUT=10800 sccache --start-server || true | |
134 | ||
83c7162d | 135 | if [ "$RUN_CHECK_WITH_PARALLEL_QUERIES" != "" ]; then |
9fa01778 | 136 | $SRC/configure --enable-parallel-compiler |
ba9703b0 | 137 | CARGO_INCREMENTAL=0 $PYTHON ../x.py check |
0531ce1d XL |
138 | rm -f config.toml |
139 | rm -rf build | |
140 | fi | |
141 | ||
32a655c1 | 142 | $SRC/configure $RUST_CONFIGURE_ARGS |
7cac9316 | 143 | |
8bb4bdeb | 144 | retry make prepare |
476ff2be | 145 | |
3b2f2976 | 146 | make check-bootstrap |
3b2f2976 | 147 | |
0531ce1d XL |
148 | # Display the CPU and memory information. This helps us know why the CI timing |
149 | # is fluctuating. | |
e74abb32 | 150 | if isMacOS; then |
0531ce1d XL |
151 | system_profiler SPHardwareDataType || true |
152 | sysctl hw || true | |
476ff2be SL |
153 | ncpus=$(sysctl -n hw.ncpu) |
154 | else | |
0531ce1d XL |
155 | cat /proc/cpuinfo || true |
156 | cat /proc/meminfo || true | |
32a655c1 | 157 | ncpus=$(grep processor /proc/cpuinfo | wc -l) |
476ff2be SL |
158 | fi |
159 | ||
32a655c1 SL |
160 | if [ ! -z "$SCRIPT" ]; then |
161 | sh -x -c "$SCRIPT" | |
476ff2be | 162 | else |
7cac9316 | 163 | do_make() { |
7cac9316 | 164 | echo "make -j $ncpus $1" |
0531ce1d | 165 | make -j $ncpus $1 |
7cac9316 | 166 | local retval=$? |
7cac9316 XL |
167 | return $retval |
168 | } | |
169 | ||
7cac9316 | 170 | do_make "$RUST_CHECK_TARGET" |
476ff2be | 171 | fi |
dc9dc135 XL |
172 | |
173 | sccache --show-stats || true |