]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | #!/bin/sh |
2 | ||
7453a54e SL |
3 | # /bin/sh on Solaris is not a POSIX compatible shell, but /usr/bin/bash is. |
4 | if [ `uname -s` = 'SunOS' -a "${POSIX_SHELL}" != "true" ]; then | |
5 | POSIX_SHELL="true" | |
6 | export POSIX_SHELL | |
7 | exec /usr/bin/env bash $0 "$@" | |
8 | fi | |
9 | unset POSIX_SHELL # clear it so if we invoke other scripts, they run as bash as well | |
10 | ||
223e47cc | 11 | msg() { |
62682a34 | 12 | echo "configure: $*" |
223e47cc LB |
13 | } |
14 | ||
15 | step_msg() { | |
16 | msg | |
17 | msg "$1" | |
18 | msg | |
19 | } | |
20 | ||
21 | warn() { | |
22 | echo "configure: WARNING: $1" | |
23 | } | |
24 | ||
25 | err() { | |
26 | echo "configure: error: $1" | |
27 | exit 1 | |
28 | } | |
29 | ||
d9579d0f AL |
30 | run() { |
31 | msg "$@" | |
32 | "$@" | |
33 | } | |
34 | ||
223e47cc LB |
35 | need_ok() { |
36 | if [ $? -ne 0 ] | |
37 | then | |
1a4d82fc | 38 | err "$1" |
223e47cc LB |
39 | fi |
40 | } | |
41 | ||
42 | need_cmd() { | |
1a4d82fc | 43 | if command -v $1 >/dev/null 2>&1 |
62682a34 SL |
44 | then msg "found program '$1'" |
45 | else err "program '$1' is missing, please install it" | |
223e47cc LB |
46 | fi |
47 | } | |
48 | ||
49 | make_dir() { | |
50 | if [ ! -d $1 ] | |
51 | then | |
d9579d0f | 52 | run mkdir -p $1 |
223e47cc LB |
53 | fi |
54 | } | |
55 | ||
56 | copy_if_changed() { | |
57 | if cmp -s $1 $2 | |
58 | then | |
59 | msg "leaving $2 unchanged" | |
60 | else | |
d9579d0f | 61 | run cp -f $1 $2 |
223e47cc LB |
62 | chmod u-w $2 # make copied artifact read-only |
63 | fi | |
64 | } | |
65 | ||
66 | move_if_changed() { | |
67 | if cmp -s $1 $2 | |
68 | then | |
69 | msg "leaving $2 unchanged" | |
70 | else | |
d9579d0f | 71 | run mv -f $1 $2 |
223e47cc LB |
72 | chmod u-w $2 # make moved artifact read-only |
73 | fi | |
74 | } | |
75 | ||
76 | putvar() { | |
77 | local T | |
78 | eval T=\$$1 | |
79 | eval TLEN=\${#$1} | |
80 | if [ $TLEN -gt 35 ] | |
81 | then | |
82 | printf "configure: %-20s := %.35s ...\n" $1 "$T" | |
83 | else | |
84 | printf "configure: %-20s := %s %s\n" $1 "$T" "$2" | |
85 | fi | |
86 | printf "%-20s := %s\n" $1 "$T" >>config.tmp | |
87 | } | |
88 | ||
1a4d82fc JJ |
89 | putpathvar() { |
90 | local T | |
91 | eval T=\$$1 | |
92 | eval TLEN=\${#$1} | |
93 | if [ $TLEN -gt 35 ] | |
94 | then | |
95 | printf "configure: %-20s := %.35s ...\n" $1 "$T" | |
96 | else | |
97 | printf "configure: %-20s := %s %s\n" $1 "$T" "$2" | |
98 | fi | |
99 | if [ -z "$T" ] | |
100 | then | |
101 | printf "%-20s := \n" $1 >>config.tmp | |
102 | else | |
103 | printf "%-20s := \"%s\"\n" $1 "$T" >>config.tmp | |
104 | fi | |
105 | } | |
106 | ||
223e47cc LB |
107 | probe() { |
108 | local V=$1 | |
109 | shift | |
110 | local P | |
111 | local T | |
112 | for P | |
113 | do | |
1a4d82fc | 114 | T=$(command -v $P 2>&1) |
223e47cc LB |
115 | if [ $? -eq 0 ] |
116 | then | |
d9579d0f AL |
117 | VER0=$($P --version 2>/dev/null \ |
118 | | grep -o '[vV]\?[0-9][0-9.][a-z0-9.-]*' | head -1 ) | |
223e47cc LB |
119 | if [ $? -eq 0 -a "x${VER0}" != "x" ] |
120 | then | |
121 | VER="($VER0)" | |
122 | else | |
123 | VER="" | |
124 | fi | |
125 | break | |
126 | else | |
127 | VER="" | |
128 | T="" | |
129 | fi | |
130 | done | |
131 | eval $V=\$T | |
1a4d82fc | 132 | putpathvar $V "$VER" |
223e47cc LB |
133 | } |
134 | ||
135 | probe_need() { | |
223e47cc | 136 | probe $* |
3157f602 XL |
137 | local V=$1 |
138 | shift | |
223e47cc LB |
139 | eval VV=\$$V |
140 | if [ -z "$VV" ] | |
141 | then | |
3157f602 | 142 | err "$V needed, but unable to find any of: $*" |
223e47cc LB |
143 | fi |
144 | } | |
145 | ||
146 | validate_opt () { | |
147 | for arg in $CFG_CONFIGURE_ARGS | |
148 | do | |
149 | isArgValid=0 | |
150 | for option in $BOOL_OPTIONS | |
151 | do | |
152 | if test --disable-$option = $arg | |
153 | then | |
154 | isArgValid=1 | |
155 | fi | |
156 | if test --enable-$option = $arg | |
157 | then | |
158 | isArgValid=1 | |
159 | fi | |
160 | done | |
161 | for option in $VAL_OPTIONS | |
162 | do | |
163 | if echo "$arg" | grep -q -- "--$option=" | |
164 | then | |
165 | isArgValid=1 | |
166 | fi | |
167 | done | |
168 | if [ "$arg" = "--help" ] | |
169 | then | |
970d7e83 | 170 | echo |
223e47cc LB |
171 | echo "No more help available for Configure options," |
172 | echo "check the Wiki or join our IRC channel" | |
173 | break | |
174 | else | |
175 | if test $isArgValid -eq 0 | |
176 | then | |
177 | err "Option '$arg' is not recognized" | |
178 | fi | |
179 | fi | |
180 | done | |
181 | } | |
182 | ||
1a4d82fc JJ |
183 | # `valopt OPTION_NAME DEFAULT DOC` extracts a string-valued option |
184 | # from command line, using provided default value for the option if | |
185 | # not present, and saves it to the generated config.mk. | |
186 | # | |
187 | # `valopt_nosave` is much the same, except that it does not save the | |
188 | # result to config.mk (instead the script should use `putvar` itself | |
189 | # later on to save it). `valopt_core` is the core upon which the | |
190 | # other two are built. | |
191 | ||
192 | valopt_core() { | |
193 | VAL_OPTIONS="$VAL_OPTIONS $2" | |
194 | ||
195 | local SAVE=$1 | |
196 | local OP=$2 | |
197 | local DEFAULT=$3 | |
198 | shift | |
223e47cc LB |
199 | shift |
200 | shift | |
201 | local DOC="$*" | |
202 | if [ $HELP -eq 0 ] | |
203 | then | |
204 | local UOP=$(echo $OP | tr '[:lower:]' '[:upper:]' | tr '\-' '\_') | |
205 | local V="CFG_${UOP}" | |
9346a6ac | 206 | local V_PROVIDED="${V}_PROVIDED" |
223e47cc LB |
207 | eval $V="$DEFAULT" |
208 | for arg in $CFG_CONFIGURE_ARGS | |
209 | do | |
210 | if echo "$arg" | grep -q -- "--$OP=" | |
211 | then | |
212 | val=$(echo "$arg" | cut -f2 -d=) | |
213 | eval $V=$val | |
9346a6ac | 214 | eval $V_PROVIDED=1 |
223e47cc LB |
215 | fi |
216 | done | |
1a4d82fc JJ |
217 | if [ "$SAVE" = "save" ] |
218 | then | |
219 | putvar $V | |
220 | fi | |
223e47cc LB |
221 | else |
222 | if [ -z "$DEFAULT" ] | |
223 | then | |
224 | DEFAULT="<none>" | |
225 | fi | |
226 | OP="${OP}=[${DEFAULT}]" | |
227 | printf " --%-30s %s\n" "$OP" "$DOC" | |
228 | fi | |
229 | } | |
230 | ||
1a4d82fc JJ |
231 | valopt_nosave() { |
232 | valopt_core nosave "$@" | |
233 | } | |
223e47cc | 234 | |
1a4d82fc JJ |
235 | valopt() { |
236 | valopt_core save "$@" | |
237 | } | |
238 | ||
239 | # `opt OPTION_NAME DEFAULT DOC` extracts a boolean-valued option from | |
240 | # command line, using the provided default value (0/1) for the option | |
241 | # if not present, and saves it to the generated config.mk. | |
242 | # | |
243 | # `opt_nosave` is much the same, except that it does not save the | |
244 | # result to config.mk (instead the script should use `putvar` itself | |
245 | # later on to save it). `opt_core` is the core upon which the other | |
246 | # two are built. | |
247 | ||
248 | opt_core() { | |
249 | BOOL_OPTIONS="$BOOL_OPTIONS $2" | |
250 | ||
251 | local SAVE=$1 | |
252 | local OP=$2 | |
253 | local DEFAULT=$3 | |
254 | shift | |
223e47cc LB |
255 | shift |
256 | shift | |
257 | local DOC="$*" | |
258 | local FLAG="" | |
259 | ||
260 | if [ $DEFAULT -eq 0 ] | |
261 | then | |
262 | FLAG="enable" | |
9346a6ac | 263 | DEFAULT_FLAG="disable" |
223e47cc LB |
264 | else |
265 | FLAG="disable" | |
9346a6ac | 266 | DEFAULT_FLAG="enable" |
223e47cc LB |
267 | DOC="don't $DOC" |
268 | fi | |
269 | ||
270 | if [ $HELP -eq 0 ] | |
271 | then | |
272 | for arg in $CFG_CONFIGURE_ARGS | |
273 | do | |
274 | if [ "$arg" = "--${FLAG}-${OP}" ] | |
275 | then | |
276 | OP=$(echo $OP | tr 'a-z-' 'A-Z_') | |
277 | FLAG=$(echo $FLAG | tr 'a-z' 'A-Z') | |
278 | local V="CFG_${FLAG}_${OP}" | |
9346a6ac | 279 | local V_PROVIDED="CFG_${FLAG}_${OP}_PROVIDED" |
223e47cc | 280 | eval $V=1 |
9346a6ac | 281 | eval $V_PROVIDED=1 |
1a4d82fc JJ |
282 | if [ "$SAVE" = "save" ] |
283 | then | |
284 | putvar $V | |
285 | fi | |
9346a6ac AL |
286 | elif [ "$arg" = "--${DEFAULT_FLAG}-${OP}" ] |
287 | then | |
288 | OP=$(echo $OP | tr 'a-z-' 'A-Z_') | |
289 | DEFAULT_FLAG=$(echo $DEFAULT_FLAG | tr 'a-z' 'A-Z') | |
290 | local V_PROVIDED="CFG_${DEFAULT_FLAG}_${OP}_PROVIDED" | |
291 | eval $V_PROVIDED=1 | |
223e47cc LB |
292 | fi |
293 | done | |
294 | else | |
c1a9b12d | 295 | if [ -n "$META" ] |
223e47cc LB |
296 | then |
297 | OP="$OP=<$META>" | |
298 | fi | |
299 | printf " --%-30s %s\n" "$FLAG-$OP" "$DOC" | |
300 | fi | |
301 | } | |
302 | ||
1a4d82fc JJ |
303 | opt_nosave() { |
304 | opt_core nosave "$@" | |
305 | } | |
306 | ||
307 | opt() { | |
308 | opt_core save "$@" | |
309 | } | |
310 | ||
311 | envopt() { | |
312 | local NAME=$1 | |
313 | local V="CFG_${NAME}" | |
314 | eval VV=\$$V | |
315 | ||
316 | # If configure didn't set a value already, then check environment. | |
317 | # | |
318 | # (It is recommended that the configure script always check the | |
319 | # environment before setting any values to envopt variables; see | |
320 | # e.g. how CFG_CC is handled, where it first checks `-z "$CC"`, | |
321 | # and issues msg if it ends up employing that provided value.) | |
322 | if [ -z "$VV" ] | |
323 | then | |
324 | eval $V=\$$NAME | |
325 | eval VV=\$$V | |
326 | fi | |
327 | ||
328 | # If script or environment provided a value, save it. | |
c1a9b12d | 329 | if [ -n "$VV" ] |
1a4d82fc JJ |
330 | then |
331 | putvar $V | |
332 | fi | |
333 | } | |
334 | ||
c1a9b12d SL |
335 | enable_if_not_disabled() { |
336 | local OP=$1 | |
337 | local UOP=$(echo $OP | tr '[:lower:]' '[:upper:]' | tr '\-' '\_') | |
338 | local ENAB_V="CFG_ENABLE_$UOP" | |
339 | local EXPLICITLY_DISABLED="CFG_DISABLE_${UOP}_PROVIDED" | |
340 | eval VV=\$$EXPLICITLY_DISABLED | |
341 | if [ -z "$VV" ]; then | |
342 | eval $ENAB_V=1 | |
343 | fi | |
344 | } | |
345 | ||
1a4d82fc JJ |
346 | to_gnu_triple() { |
347 | case $1 in | |
348 | i686-pc-windows-gnu) echo i686-w64-mingw32 ;; | |
349 | x86_64-pc-windows-gnu) echo x86_64-w64-mingw32 ;; | |
350 | *) echo $1 ;; | |
351 | esac | |
352 | } | |
353 | ||
d9579d0f AL |
354 | # Prints the absolute path of a directory to stdout |
355 | abs_path() { | |
356 | local _path="$1" | |
357 | # Unset CDPATH because it causes havok: it makes the destination unpredictable | |
358 | # and triggers 'cd' to print the path to stdout. Route `cd`'s output to /dev/null | |
359 | # for good measure. | |
360 | (unset CDPATH && cd "$_path" > /dev/null && pwd) | |
361 | } | |
362 | ||
9e0c209e SL |
363 | HELP=0 |
364 | for arg; do | |
365 | case "$arg" in | |
366 | --help) HELP=1;; | |
367 | esac | |
368 | done | |
369 | ||
223e47cc LB |
370 | msg "looking for configure programs" |
371 | need_cmd cmp | |
372 | need_cmd mkdir | |
373 | need_cmd printf | |
374 | need_cmd cut | |
375 | need_cmd head | |
376 | need_cmd grep | |
377 | need_cmd xargs | |
378 | need_cmd cp | |
379 | need_cmd find | |
380 | need_cmd uname | |
381 | need_cmd date | |
382 | need_cmd tr | |
383 | need_cmd sed | |
970d7e83 | 384 | need_cmd file |
85aaf69f | 385 | need_cmd make |
223e47cc LB |
386 | |
387 | msg "inspecting environment" | |
388 | ||
389 | CFG_OSTYPE=$(uname -s) | |
390 | CFG_CPUTYPE=$(uname -m) | |
391 | ||
392 | if [ $CFG_OSTYPE = Darwin -a $CFG_CPUTYPE = i386 ] | |
393 | then | |
394 | # Darwin's `uname -s` lies and always returns i386. We have to use sysctl | |
395 | # instead. | |
396 | if sysctl hw.optional.x86_64 | grep -q ': 1' | |
397 | then | |
398 | CFG_CPUTYPE=x86_64 | |
399 | fi | |
400 | fi | |
401 | ||
402 | # The goal here is to come up with the same triple as LLVM would, | |
403 | # at least for the subset of platforms we're willing to target. | |
404 | ||
405 | case $CFG_OSTYPE in | |
406 | ||
407 | Linux) | |
408 | CFG_OSTYPE=unknown-linux-gnu | |
409 | ;; | |
410 | ||
411 | FreeBSD) | |
412 | CFG_OSTYPE=unknown-freebsd | |
413 | ;; | |
414 | ||
1a4d82fc JJ |
415 | DragonFly) |
416 | CFG_OSTYPE=unknown-dragonfly | |
417 | ;; | |
418 | ||
c34b1796 AL |
419 | Bitrig) |
420 | CFG_OSTYPE=unknown-bitrig | |
421 | ;; | |
422 | ||
85aaf69f | 423 | OpenBSD) |
c34b1796 | 424 | CFG_OSTYPE=unknown-openbsd |
85aaf69f SL |
425 | ;; |
426 | ||
c1a9b12d SL |
427 | NetBSD) |
428 | CFG_OSTYPE=unknown-netbsd | |
429 | ;; | |
430 | ||
223e47cc LB |
431 | Darwin) |
432 | CFG_OSTYPE=apple-darwin | |
433 | ;; | |
434 | ||
7453a54e SL |
435 | SunOS) |
436 | CFG_OSTYPE=sun-solaris | |
437 | CFG_CPUTYPE=$(isainfo -n) | |
438 | ;; | |
439 | ||
9e0c209e SL |
440 | Haiku) |
441 | CFG_OSTYPE=unknown-haiku | |
442 | ;; | |
443 | ||
1a4d82fc JJ |
444 | MINGW*) |
445 | # msys' `uname` does not print gcc configuration, but prints msys | |
446 | # configuration. so we cannot believe `uname -m`: | |
447 | # msys1 is always i686 and msys2 is always x86_64. | |
448 | # instead, msys defines $MSYSTEM which is MINGW32 on i686 and | |
449 | # MINGW64 on x86_64. | |
450 | CFG_CPUTYPE=i686 | |
451 | CFG_OSTYPE=pc-windows-gnu | |
452 | if [ "$MSYSTEM" = MINGW64 ] | |
453 | then | |
454 | CFG_CPUTYPE=x86_64 | |
455 | fi | |
223e47cc | 456 | ;; |
1a4d82fc JJ |
457 | |
458 | MSYS*) | |
459 | CFG_OSTYPE=pc-windows-gnu | |
460 | ;; | |
461 | ||
c34b1796 | 462 | # Thad's Cygwin identifiers below |
223e47cc LB |
463 | |
464 | # Vista 32 bit | |
465 | CYGWIN_NT-6.0) | |
1a4d82fc | 466 | CFG_OSTYPE=pc-windows-gnu |
223e47cc LB |
467 | CFG_CPUTYPE=i686 |
468 | ;; | |
469 | ||
470 | # Vista 64 bit | |
471 | CYGWIN_NT-6.0-WOW64) | |
1a4d82fc | 472 | CFG_OSTYPE=pc-windows-gnu |
223e47cc LB |
473 | CFG_CPUTYPE=x86_64 |
474 | ;; | |
475 | ||
476 | # Win 7 32 bit | |
477 | CYGWIN_NT-6.1) | |
1a4d82fc | 478 | CFG_OSTYPE=pc-windows-gnu |
223e47cc LB |
479 | CFG_CPUTYPE=i686 |
480 | ;; | |
481 | ||
482 | # Win 7 64 bit | |
483 | CYGWIN_NT-6.1-WOW64) | |
1a4d82fc | 484 | CFG_OSTYPE=pc-windows-gnu |
223e47cc LB |
485 | CFG_CPUTYPE=x86_64 |
486 | ;; | |
487 | ||
c34b1796 AL |
488 | # Win 8 # uname -s on 64-bit cygwin does not contain WOW64, so simply use uname -m to detect arch (works in my install) |
489 | CYGWIN_NT-6.3) | |
490 | CFG_OSTYPE=pc-windows-gnu | |
491 | ;; | |
223e47cc LB |
492 | # We do not detect other OS such as XP/2003 using 64 bit using uname. |
493 | # If we want to in the future, we will need to use Cygwin - Chuck's csih helper in /usr/lib/csih/winProductName.exe or alternative. | |
494 | *) | |
495 | err "unknown OS type: $CFG_OSTYPE" | |
496 | ;; | |
497 | esac | |
498 | ||
499 | ||
500 | case $CFG_CPUTYPE in | |
501 | ||
502 | i386 | i486 | i686 | i786 | x86) | |
503 | CFG_CPUTYPE=i686 | |
504 | ;; | |
505 | ||
506 | xscale | arm) | |
507 | CFG_CPUTYPE=arm | |
508 | ;; | |
509 | ||
c30ab7b3 | 510 | armv6l) |
1a4d82fc JJ |
511 | CFG_CPUTYPE=arm |
512 | CFG_OSTYPE="${CFG_OSTYPE}eabihf" | |
513 | ;; | |
514 | ||
c30ab7b3 SL |
515 | armv7l) |
516 | CFG_CPUTYPE=armv7 | |
517 | CFG_OSTYPE="${CFG_OSTYPE}eabihf" | |
518 | ;; | |
519 | ||
1a4d82fc JJ |
520 | aarch64) |
521 | CFG_CPUTYPE=aarch64 | |
522 | ;; | |
523 | ||
9cc50fc6 | 524 | powerpc | ppc) |
85aaf69f SL |
525 | CFG_CPUTYPE=powerpc |
526 | ;; | |
527 | ||
9cc50fc6 SL |
528 | powerpc64 | ppc64) |
529 | CFG_CPUTYPE=powerpc64 | |
530 | ;; | |
531 | ||
532 | powerpc64le | ppc64le) | |
533 | CFG_CPUTYPE=powerpc64le | |
534 | ;; | |
535 | ||
9e0c209e SL |
536 | s390x) |
537 | CFG_CPUTYPE=s390x | |
538 | ;; | |
539 | ||
223e47cc LB |
540 | x86_64 | x86-64 | x64 | amd64) |
541 | CFG_CPUTYPE=x86_64 | |
542 | ;; | |
543 | ||
9e0c209e SL |
544 | BePC) |
545 | CFG_CPUTYPE=i686 | |
546 | ;; | |
547 | ||
223e47cc LB |
548 | *) |
549 | err "unknown CPU type: $CFG_CPUTYPE" | |
550 | esac | |
551 | ||
552 | # Detect 64 bit linux systems with 32 bit userland and force 32 bit compilation | |
553 | if [ $CFG_OSTYPE = unknown-linux-gnu -a $CFG_CPUTYPE = x86_64 ] | |
554 | then | |
c34b1796 AL |
555 | # $SHELL does not exist in standard 'sh', so probably only exists |
556 | # if configure is running in an interactive bash shell. /usr/bin/env | |
557 | # exists *everywhere*. | |
558 | BIN_TO_PROBE="$SHELL" | |
9cc50fc6 SL |
559 | if [ ! -r "$BIN_TO_PROBE" ]; then |
560 | if [ -r "/usr/bin/env" ]; then | |
561 | BIN_TO_PROBE="/usr/bin/env" | |
562 | else | |
563 | warn "Cannot check if the userland is i686 or x86_64" | |
564 | fi | |
565 | fi | |
566 | file -L "$BIN_TO_PROBE" | grep -q "x86[_-]64" | |
567 | if [ $? != 0 ]; then | |
568 | msg "i686 userland on x86_64 Linux kernel" | |
569 | CFG_CPUTYPE=i686 | |
223e47cc LB |
570 | fi |
571 | fi | |
572 | ||
573 | ||
1a4d82fc | 574 | DEFAULT_BUILD="${CFG_CPUTYPE}-${CFG_OSTYPE}" |
223e47cc | 575 | |
d9579d0f | 576 | CFG_SRC_DIR="$(abs_path $(dirname $0))/" |
62682a34 | 577 | CFG_SRC_DIR_RELATIVE="$(dirname $0)/" |
223e47cc | 578 | CFG_BUILD_DIR="$(pwd)/" |
1a4d82fc | 579 | CFG_SELF="$0" |
223e47cc LB |
580 | CFG_CONFIGURE_ARGS="$@" |
581 | ||
92a42be0 | 582 | |
7453a54e | 583 | case "${CFG_SRC_DIR}" in |
92a42be0 SL |
584 | *\ * ) |
585 | err "The path to the rust source directory contains spaces, which is not supported" | |
586 | ;; | |
587 | *) | |
588 | ;; | |
589 | esac | |
590 | ||
591 | ||
223e47cc | 592 | OPTIONS="" |
9e0c209e | 593 | if [ "$HELP" -eq 1 ] |
223e47cc | 594 | then |
970d7e83 | 595 | echo |
223e47cc | 596 | echo "Usage: $CFG_SELF [options]" |
970d7e83 | 597 | echo |
223e47cc | 598 | echo "Options:" |
970d7e83 | 599 | echo |
223e47cc LB |
600 | else |
601 | msg "recreating config.tmp" | |
602 | echo '' >config.tmp | |
603 | ||
604 | step_msg "processing $CFG_SELF args" | |
605 | fi | |
606 | ||
607 | BOOL_OPTIONS="" | |
608 | VAL_OPTIONS="" | |
609 | ||
d9579d0f | 610 | opt debug 0 "debug mode; disables optimization unless \`--enable-optimize\` given" |
223e47cc LB |
611 | opt valgrind 0 "run tests with valgrind (memcheck by default)" |
612 | opt helgrind 0 "run tests with helgrind instead of memcheck" | |
1a4d82fc | 613 | opt valgrind-rpass 1 "run rpass-valgrind tests with valgrind" |
c34b1796 AL |
614 | opt docs 1 "build standard library documentation" |
615 | opt compiler-docs 0 "build compiler documentation" | |
1a4d82fc | 616 | opt optimize-tests 1 "build tests with optimizations" |
d9579d0f | 617 | opt debuginfo-tests 0 "build tests with debugger metadata" |
c30ab7b3 | 618 | opt quiet-tests 0 "enable quieter output when running tests" |
3157f602 | 619 | opt libcpp 1 "build llvm with libc++ instead of libstdc++ when using clang" |
9346a6ac AL |
620 | opt llvm-assertions 0 "build LLVM with assertions" |
621 | opt debug-assertions 0 "build with debugging assertions" | |
223e47cc | 622 | opt fast-make 0 "use .gitmodules as timestamp for submodule deps" |
970d7e83 | 623 | opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds" |
476ff2be | 624 | opt sccache 0 "invoke gcc/clang via sccache to reuse object files between builds" |
223e47cc | 625 | opt local-rust 0 "use an installed rustc rather than downloading a snapshot" |
5bcae85e | 626 | opt local-rebuild 0 "assume local-rust matches the current version, for rebuilds; implies local-rust, and is implied if local-rust already matches the current version" |
1a4d82fc | 627 | opt llvm-static-stdcpp 0 "statically link to libstdc++ for LLVM" |
476ff2be | 628 | opt llvm-link-shared 0 "prefer shared linking to LLVM (llvm-config --link-shared)" |
9cc50fc6 | 629 | opt rpath 1 "build rpaths into rustc itself" |
b039eaaf | 630 | opt stage0-landing-pads 1 "enable landing pads during bootstrap with stage0" |
1a4d82fc JJ |
631 | # This is used by the automation to produce single-target nightlies |
632 | opt dist-host-only 0 "only install bins for the host architecture" | |
633 | opt inject-std-version 1 "inject the current compiler version of libstd into programs" | |
62682a34 | 634 | opt llvm-version-check 1 "check if the LLVM version is supported, build anyway" |
476ff2be | 635 | opt rustbuild 1 "use the rust and cargo based build system" |
54a0048b | 636 | opt codegen-tests 1 "run the src/test/codegen tests" |
a7813a04 | 637 | opt option-checking 1 "complain about unrecognized options in this configure script" |
5bcae85e | 638 | opt ninja 0 "build LLVM using the Ninja generator (for MSVC, requires building in the correct environment)" |
476ff2be | 639 | opt vendor 0 "enable usage of vendored Rust crates" |
1a4d82fc | 640 | |
9346a6ac AL |
641 | # Optimization and debugging options. These may be overridden by the release channel, etc. |
642 | opt_nosave optimize 1 "build optimized rust code" | |
643 | opt_nosave optimize-cxx 1 "build optimized C++ code" | |
644 | opt_nosave optimize-llvm 1 "build optimized LLVM" | |
645 | opt_nosave llvm-assertions 0 "build LLVM with assertions" | |
646 | opt_nosave debug-assertions 0 "build with debugging assertions" | |
476ff2be | 647 | opt_nosave llvm-release-debuginfo 0 "build LLVM with debugger metadata" |
9346a6ac | 648 | opt_nosave debuginfo 0 "build with debugger metadata" |
c30ab7b3 | 649 | opt_nosave debuginfo-lines 0 "build with line number debugger metadata" |
476ff2be | 650 | opt_nosave debuginfo-only-std 0 "build only libstd with debugging information" |
9346a6ac AL |
651 | opt_nosave debug-jemalloc 0 "build jemalloc with --enable-debug --enable-fill" |
652 | ||
1a4d82fc JJ |
653 | valopt localstatedir "/var/lib" "local state directory" |
654 | valopt sysconfdir "/etc" "install system configuration files" | |
655 | ||
656 | valopt datadir "${CFG_PREFIX}/share" "install data" | |
657 | valopt infodir "${CFG_PREFIX}/share/info" "install additional info" | |
223e47cc | 658 | valopt llvm-root "" "set LLVM root" |
62682a34 | 659 | valopt python "" "set path to python" |
1a4d82fc JJ |
660 | valopt jemalloc-root "" "set directory where libjemalloc_pic.a is located" |
661 | valopt build "${DEFAULT_BUILD}" "GNUs ./configure syntax LLVM build triple" | |
7453a54e | 662 | valopt android-cross-path "" "Android NDK standalone path (deprecated)" |
e9174d1e | 663 | valopt i686-linux-android-ndk "" "i686-linux-android NDK standalone path" |
c1a9b12d | 664 | valopt arm-linux-androideabi-ndk "" "arm-linux-androideabi NDK standalone path" |
a7813a04 | 665 | valopt armv7-linux-androideabi-ndk "" "armv7-linux-androideabi NDK standalone path" |
c1a9b12d | 666 | valopt aarch64-linux-android-ndk "" "aarch64-linux-android NDK standalone path" |
9cc50fc6 | 667 | valopt nacl-cross-path "" "NaCl SDK path (Pepper Canary is recommended). Must be absolute!" |
c30ab7b3 | 668 | valopt musl-root "/usr/local" "MUSL root installation directory (deprecated)" |
476ff2be SL |
669 | valopt musl-root-x86_64 "" "x86_64-unknown-linux-musl install directory" |
670 | valopt musl-root-i686 "" "i686-unknown-linux-musl install directory" | |
671 | valopt musl-root-arm "" "arm-unknown-linux-musleabi install directory" | |
672 | valopt musl-root-armhf "" "arm-unknown-linux-musleabihf install directory" | |
673 | valopt musl-root-armv7 "" "armv7-unknown-linux-musleabihf install directory" | |
9cc50fc6 | 674 | valopt extra-filename "" "Additional data that is hashed and passed to the -C extra-filename flag" |
223e47cc | 675 | |
5bcae85e SL |
676 | if [ -e ${CFG_SRC_DIR}.git ] |
677 | then | |
678 | valopt release-channel "dev" "the name of the release channel to build" | |
679 | else | |
680 | # If we have no git directory then we are probably a tarball distribution | |
681 | # and should default to stable channel - Issue 28322 | |
682 | probe CFG_GIT git | |
683 | msg "git: no git directory. Changing default release channel to stable" | |
684 | valopt release-channel "stable" "the name of the release channel to build" | |
685 | fi | |
686 | ||
e9174d1e SL |
687 | # Used on systems where "cc" and "ar" are unavailable |
688 | valopt default-linker "cc" "the default linker" | |
689 | valopt default-ar "ar" "the default ar" | |
690 | ||
1a4d82fc JJ |
691 | # Many of these are saved below during the "writing configuration" step |
692 | # (others are conditionally saved). | |
693 | opt_nosave manage-submodules 1 "let the build manage the git submodules" | |
694 | opt_nosave clang 0 "prefer clang to gcc for building the runtime" | |
9346a6ac | 695 | opt_nosave jemalloc 1 "build liballoc with jemalloc" |
d9579d0f | 696 | opt elf-tls 1 "elf thread local storage on platforms where supported" |
1a4d82fc JJ |
697 | |
698 | valopt_nosave prefix "/usr/local" "set installation prefix" | |
699 | valopt_nosave local-rust-root "/usr/local" "set prefix for local rust binary" | |
700 | valopt_nosave host "${CFG_BUILD}" "GNUs ./configure syntax LLVM host triples" | |
701 | valopt_nosave target "${CFG_HOST}" "GNUs ./configure syntax LLVM target triples" | |
702 | valopt_nosave mandir "${CFG_PREFIX}/share/man" "install man pages in PATH" | |
9e0c209e | 703 | valopt_nosave docdir "${CFG_PREFIX}/share/doc/rust" "install documentation in PATH" |
1a4d82fc | 704 | |
92a42be0 SL |
705 | # On Windows this determines root of the subtree for target libraries. |
706 | # Host runtime libs always go to 'bin'. | |
707 | valopt libdir "${CFG_PREFIX}/lib" "install libraries" | |
1a4d82fc JJ |
708 | |
709 | case "$CFG_LIBDIR" in | |
710 | "$CFG_PREFIX"/*) CAT_INC=2;; | |
711 | "$CFG_PREFIX"*) CAT_INC=1;; | |
712 | *) | |
713 | err "libdir must begin with the prefix. Use --prefix to set it accordingly.";; | |
714 | esac | |
715 | ||
716 | CFG_LIBDIR_RELATIVE=`echo ${CFG_LIBDIR} | cut -c$((${#CFG_PREFIX}+${CAT_INC}))-` | |
717 | ||
223e47cc LB |
718 | if [ $HELP -eq 1 ] |
719 | then | |
970d7e83 | 720 | echo |
223e47cc LB |
721 | exit 0 |
722 | fi | |
723 | ||
1a4d82fc | 724 | # Validate Options |
a7813a04 XL |
725 | if [ -z "$CFG_DISABLE_OPTION_CHECKING" ] |
726 | then | |
727 | step_msg "validating $CFG_SELF args" | |
728 | validate_opt | |
729 | fi | |
1a4d82fc | 730 | |
9346a6ac | 731 | # Validate the release channel, and configure options |
1a4d82fc | 732 | case "$CFG_RELEASE_CHANNEL" in |
9346a6ac AL |
733 | nightly ) |
734 | msg "overriding settings for $CFG_RELEASE_CHANNEL" | |
735 | CFG_ENABLE_LLVM_ASSERTIONS=1 | |
476ff2be SL |
736 | # FIXME(stage0) re-enable this on the next stage0 now that #35566 is |
737 | # fixed | |
c30ab7b3 SL |
738 | case "$CFG_BUILD" in |
739 | *-pc-windows-gnu) | |
740 | ;; | |
741 | *) | |
476ff2be SL |
742 | CFG_ENABLE_DEBUGINFO_LINES=1 |
743 | CFG_ENABLE_DEBUGINFO_ONLY_STD=1 | |
c30ab7b3 SL |
744 | ;; |
745 | esac | |
476ff2be | 746 | |
1a4d82fc | 747 | ;; |
c30ab7b3 SL |
748 | beta | stable) |
749 | msg "overriding settings for $CFG_RELEASE_CHANNEL" | |
750 | case "$CFG_BUILD" in | |
751 | *-pc-windows-gnu) | |
752 | ;; | |
753 | *) | |
476ff2be SL |
754 | CFG_ENABLE_DEBUGINFO_LINES=1 |
755 | CFG_ENABLE_DEBUGINFO_ONLY_STD=1 | |
c30ab7b3 SL |
756 | ;; |
757 | esac | |
758 | ;; | |
759 | dev) | |
9346a6ac AL |
760 | ;; |
761 | *) | |
1a4d82fc JJ |
762 | err "release channel must be 'dev', 'nightly', 'beta' or 'stable'" |
763 | ;; | |
764 | esac | |
765 | ||
9346a6ac AL |
766 | # Adjust perf and debug options for debug mode |
767 | if [ -n "$CFG_ENABLE_DEBUG" ]; then | |
768 | msg "debug mode enabled, setting performance options" | |
769 | if [ -z "$CFG_ENABLE_OPTIMIZE_PROVIDED" ]; then | |
770 | msg "optimization not explicitly enabled, disabling optimization" | |
771 | CFG_DISABLE_OPTIMIZE=1 | |
772 | CFG_DISABLE_OPTIMIZE_CXX=1 | |
773 | fi | |
c1a9b12d SL |
774 | |
775 | # Set following variables to 1 unless setting already provided | |
776 | enable_if_not_disabled debug-assertions | |
777 | enable_if_not_disabled debug-jemalloc | |
778 | enable_if_not_disabled debuginfo | |
779 | enable_if_not_disabled llvm-assertions | |
1a4d82fc | 780 | fi |
9346a6ac AL |
781 | |
782 | # OK, now write the debugging options | |
783 | if [ -n "$CFG_DISABLE_OPTIMIZE" ]; then putvar CFG_DISABLE_OPTIMIZE; fi | |
784 | if [ -n "$CFG_DISABLE_OPTIMIZE_CXX" ]; then putvar CFG_DISABLE_OPTIMIZE_CXX; fi | |
785 | if [ -n "$CFG_DISABLE_OPTIMIZE_LLVM" ]; then putvar CFG_DISABLE_OPTIMIZE_LLVM; fi | |
786 | if [ -n "$CFG_ENABLE_LLVM_ASSERTIONS" ]; then putvar CFG_ENABLE_LLVM_ASSERTIONS; fi | |
787 | if [ -n "$CFG_ENABLE_DEBUG_ASSERTIONS" ]; then putvar CFG_ENABLE_DEBUG_ASSERTIONS; fi | |
476ff2be | 788 | if [ -n "$CFG_ENABLE_LLVM_RELEASE_DEBUGINFO" ]; then putvar CFG_ENABLE_LLVM_RELEASE_DEBUGINFO; fi |
9346a6ac | 789 | if [ -n "$CFG_ENABLE_DEBUGINFO" ]; then putvar CFG_ENABLE_DEBUGINFO; fi |
c30ab7b3 | 790 | if [ -n "$CFG_ENABLE_DEBUGINFO_LINES" ]; then putvar CFG_ENABLE_DEBUGINFO_LINES; fi |
476ff2be | 791 | if [ -n "$CFG_ENABLE_DEBUGINFO_ONLY_STD" ]; then putvar CFG_ENABLE_DEBUGINFO_ONLY_STD; fi |
9346a6ac | 792 | if [ -n "$CFG_ENABLE_DEBUG_JEMALLOC" ]; then putvar CFG_ENABLE_DEBUG_JEMALLOC; fi |
1a4d82fc | 793 | |
223e47cc LB |
794 | step_msg "looking for build programs" |
795 | ||
3157f602 | 796 | probe_need CFG_CURL curl |
62682a34 | 797 | if [ -z "$CFG_PYTHON_PROVIDED" ]; then |
7453a54e | 798 | probe_need CFG_PYTHON python2.7 python2 python |
62682a34 | 799 | fi |
223e47cc LB |
800 | |
801 | python_version=$($CFG_PYTHON -V 2>&1) | |
7453a54e SL |
802 | if [ $(echo $python_version | grep -c '^Python 2\.7') -ne 1 ]; then |
803 | err "Found $python_version, but Python 2.7 is required" | |
223e47cc LB |
804 | fi |
805 | ||
806 | # If we have no git directory then we are probably a tarball distribution | |
807 | # and shouldn't attempt to load submodules | |
808 | if [ ! -e ${CFG_SRC_DIR}.git ] | |
809 | then | |
810 | probe CFG_GIT git | |
811 | msg "git: no git directory. disabling submodules" | |
812 | CFG_DISABLE_MANAGE_SUBMODULES=1 | |
813 | else | |
814 | probe_need CFG_GIT git | |
815 | fi | |
816 | ||
d9579d0f AL |
817 | # Use `md5sum` on GNU platforms, or `md5 -q` on BSD |
818 | probe CFG_MD5 md5 | |
819 | probe CFG_MD5SUM md5sum | |
820 | if [ -n "$CFG_MD5" ] | |
821 | then | |
62682a34 | 822 | CFG_HASH_COMMAND="$CFG_MD5 -q | cut -c 1-8" |
d9579d0f AL |
823 | elif [ -n "$CFG_MD5SUM" ] |
824 | then | |
62682a34 | 825 | CFG_HASH_COMMAND="$CFG_MD5SUM | cut -c 1-8" |
d9579d0f AL |
826 | else |
827 | err 'could not find one of: md5 md5sum' | |
828 | fi | |
829 | putvar CFG_HASH_COMMAND | |
830 | ||
223e47cc | 831 | probe CFG_CLANG clang++ |
970d7e83 | 832 | probe CFG_CCACHE ccache |
223e47cc LB |
833 | probe CFG_GCC gcc |
834 | probe CFG_LD ld | |
835 | probe CFG_VALGRIND valgrind | |
836 | probe CFG_PERF perf | |
837 | probe CFG_ISCC iscc | |
1a4d82fc JJ |
838 | probe CFG_ANTLR4 antlr4 |
839 | probe CFG_GRUN grun | |
85aaf69f SL |
840 | probe CFG_FLEX flex |
841 | probe CFG_BISON bison | |
223e47cc | 842 | probe CFG_GDB gdb |
1a4d82fc JJ |
843 | probe CFG_LLDB lldb |
844 | ||
5bcae85e SL |
845 | if [ -n "$CFG_ENABLE_NINJA" ] |
846 | then | |
847 | probe CFG_NINJA ninja | |
848 | if [ -z "$CFG_NINJA" ] | |
849 | then | |
850 | # On Debian and Fedora, the `ninja` binary is an IRC bot, so the build tool was | |
851 | # renamed. Handle this case. | |
852 | probe CFG_NINJA ninja-build | |
853 | fi | |
854 | fi | |
855 | ||
3157f602 | 856 | # For building LLVM |
476ff2be SL |
857 | if [ -z "$CFG_LLVM_ROOT" ] |
858 | then | |
859 | probe_need CFG_CMAKE cmake | |
860 | fi | |
3157f602 | 861 | |
9346a6ac AL |
862 | # On MacOS X, invoking `javac` pops up a dialog if the JDK is not |
863 | # installed. Since `javac` is only used if `antlr4` is available, | |
864 | # probe for it only in this case. | |
c1a9b12d | 865 | if [ -n "$CFG_ANTLR4" ] |
9346a6ac | 866 | then |
476ff2be SL |
867 | CFG_ANTLR4_JAR="\"$(find /usr/ -name antlr-complete.jar 2>/dev/null | head -n 1)\"" |
868 | if [ "x" = "x$CFG_ANTLR4_JAR" ] | |
869 | then | |
870 | CFG_ANTLR4_JAR="\"$(find ~ -name antlr-complete.jar 2>/dev/null | head -n 1)\"" | |
871 | fi | |
872 | putvar CFG_ANTLR4_JAR $CFG_ANTLR4_JAR | |
9346a6ac AL |
873 | probe CFG_JAVAC javac |
874 | fi | |
875 | ||
d9579d0f AL |
876 | # the valgrind rpass tests will fail if you don't have a valgrind, but they're |
877 | # only disabled if you opt out. | |
878 | if [ -z "$CFG_VALGRIND" ] | |
879 | then | |
880 | # If the user has explicitly asked for valgrind tests, then fail | |
881 | if [ -n "$CFG_ENABLE_VALGRIND" ] && [ -n "$CFG_ENABLE_VALGRIND_PROVIDED" ] | |
882 | then | |
883 | err "No valgrind present, but valgrind tests explicitly requested" | |
884 | else | |
885 | CFG_DISABLE_VALGRIND_RPASS=1 | |
886 | putvar CFG_DISABLE_VALGRIND_RPASS | |
887 | fi | |
888 | fi | |
889 | ||
c1a9b12d | 890 | if [ -n "$CFG_LLDB" ] |
1a4d82fc JJ |
891 | then |
892 | # Store LLDB's version | |
893 | CFG_LLDB_VERSION=$($CFG_LLDB --version 2>/dev/null | head -1) | |
894 | putvar CFG_LLDB_VERSION | |
895 | ||
896 | # If CFG_LLDB_PYTHON_DIR is not already set from the outside and valid, try to read it from | |
897 | # LLDB via the -P commandline options. | |
898 | if [ -z "$CFG_LLDB_PYTHON_DIR" ] || [ ! -d "$CFG_LLDB_PYTHON_DIR" ] | |
899 | then | |
900 | CFG_LLDB_PYTHON_DIR=$($CFG_LLDB -P) | |
901 | ||
902 | # If CFG_LLDB_PYTHON_DIR is not a valid directory, set it to something more readable | |
903 | if [ ! -d "$CFG_LLDB_PYTHON_DIR" ] | |
904 | then | |
905 | CFG_LLDB_PYTHON_DIR="LLDB_PYTHON_DIRECTORY_NOT_FOUND" | |
906 | fi | |
907 | ||
908 | putvar CFG_LLDB_PYTHON_DIR | |
909 | fi | |
223e47cc LB |
910 | fi |
911 | ||
a7813a04 XL |
912 | # LLDB tests on OSX require /usr/bin/python, not something like Homebrew's |
913 | # /usr/local/bin/python. We're loading a compiled module for LLDB tests which is | |
914 | # only compatible with the system. | |
915 | case $CFG_BUILD in | |
916 | *-apple-darwin) | |
917 | CFG_LLDB_PYTHON=/usr/bin/python | |
918 | ;; | |
919 | *) | |
920 | CFG_LLDB_PYTHON=$CFG_PYTHON | |
921 | ;; | |
922 | esac | |
923 | putvar CFG_LLDB_PYTHON | |
924 | ||
970d7e83 LB |
925 | step_msg "looking for target specific programs" |
926 | ||
927 | probe CFG_ADB adb | |
928 | ||
1a4d82fc | 929 | BIN_SUF= |
62682a34 | 930 | if [ "$CFG_OSTYPE" = "pc-windows-gnu" ] || [ "$CFG_OSTYPE" = "pc-windows-msvc" ] |
223e47cc | 931 | then |
1a4d82fc | 932 | BIN_SUF=.exe |
223e47cc LB |
933 | fi |
934 | ||
3157f602 XL |
935 | # --enable-local-rebuild implies --enable-local-rust too |
936 | if [ -n "$CFG_ENABLE_LOCAL_REBUILD" ] | |
937 | then | |
938 | if [ -z "$CFG_ENABLE_LOCAL_RUST" ] | |
939 | then | |
940 | CFG_ENABLE_LOCAL_RUST=1 | |
941 | putvar CFG_ENABLE_LOCAL_RUST | |
942 | fi | |
943 | fi | |
944 | ||
c1a9b12d | 945 | if [ -n "$CFG_ENABLE_LOCAL_RUST" ] |
223e47cc | 946 | then |
1a4d82fc JJ |
947 | system_rustc=$(which rustc) |
948 | if [ -f ${CFG_LOCAL_RUST_ROOT}/bin/rustc${BIN_SUF} ] | |
223e47cc | 949 | then |
1a4d82fc JJ |
950 | : # everything already configured |
951 | elif [ -n "$system_rustc" ] | |
952 | then | |
953 | # we assume that rustc is in a /bin directory | |
954 | CFG_LOCAL_RUST_ROOT=${system_rustc%/bin/rustc} | |
223e47cc | 955 | else |
1a4d82fc | 956 | err "no local rust to use" |
223e47cc | 957 | fi |
1a4d82fc JJ |
958 | |
959 | CMD="${CFG_LOCAL_RUST_ROOT}/bin/rustc${BIN_SUF}" | |
9e0c209e | 960 | LRV=`LD_LIBRARY_PATH=${CFG_LOCAL_RUST_ROOT}/lib $CMD --version` |
1a4d82fc JJ |
961 | if [ $? -ne 0 ] |
962 | then | |
963 | step_msg "failure while running $CMD --version" | |
964 | exit 1 | |
965 | fi | |
966 | step_msg "using rustc at: ${CFG_LOCAL_RUST_ROOT} with version: $LRV" | |
967 | putvar CFG_LOCAL_RUST_ROOT | |
223e47cc LB |
968 | fi |
969 | ||
c34b1796 AL |
970 | # Force bitrig to build with clang; gcc doesn't like us there |
971 | if [ $CFG_OSTYPE = unknown-bitrig ] | |
972 | then | |
7453a54e | 973 | step_msg "on Bitrig, forcing use of clang" |
c34b1796 | 974 | CFG_ENABLE_CLANG=1 |
c34b1796 AL |
975 | fi |
976 | ||
e9174d1e SL |
977 | # default gcc version under OpenBSD maybe too old, try using egcc, which is a |
978 | # gcc version from ports | |
979 | if [ $CFG_OSTYPE = unknown-openbsd ] | |
980 | then | |
981 | if [ $("$CFG_GCC" --version 2>&1 | grep -c ' 4\.[0-6]') -ne 0 ]; then | |
982 | step_msg "older GCC found, try with egcc instead" | |
983 | ||
984 | # probe again but using egcc | |
985 | probe CFG_GCC egcc | |
986 | ||
987 | # and use egcc/eg++ for CC/CXX too if it was found | |
988 | # (but user setting has priority) | |
989 | if [ -n "$CFG_GCC" ]; then | |
990 | CC="${CC:-egcc}" | |
991 | CXX="${CXX:-eg++}" | |
992 | fi | |
993 | fi | |
e9174d1e SL |
994 | fi |
995 | ||
1a4d82fc JJ |
996 | # OS X 10.9, gcc is actually clang. This can cause some confusion in the build |
997 | # system, so if we find that gcc is clang, we should just use clang directly. | |
998 | if [ $CFG_OSTYPE = apple-darwin -a -z "$CFG_ENABLE_CLANG" ] | |
999 | then | |
1000 | CFG_OSX_GCC_VERSION=$("$CFG_GCC" --version 2>&1 | grep "Apple LLVM version") | |
1001 | if [ $? -eq 0 ] | |
1002 | then | |
d9579d0f | 1003 | step_msg "on OS X >=10.9, forcing use of clang" |
1a4d82fc JJ |
1004 | CFG_ENABLE_CLANG=1 |
1005 | else | |
1006 | if [ $("$CFG_GCC" --version 2>&1 | grep -c ' 4\.[0-6]') -ne 0 ]; then | |
1007 | step_msg "older GCC found, using clang instead" | |
1008 | CFG_ENABLE_CLANG=1 | |
1009 | else | |
1010 | # on OS X, with xcode 5 and newer, certain developers may have | |
1011 | # cc, gcc and g++ point to a mixture of clang and gcc | |
1012 | # if so, this will create very strange build errors | |
1013 | # this last stanza is to detect some such problems and save the future rust | |
1014 | # contributor some time solving that issue. | |
1015 | # this detection could be generalized to other OSes aside from OS X | |
1016 | # but the issue seems most likely to happen on OS X | |
1017 | ||
1018 | chk_cc () { | |
1019 | $1 --version 2> /dev/null | grep -q $2 | |
1020 | } | |
1021 | # check that gcc, cc and g++ all point to the same compiler. | |
1022 | # note that for xcode 5, g++ points to clang, not clang++ | |
1023 | if !((chk_cc gcc clang && chk_cc g++ clang) || | |
1024 | (chk_cc gcc gcc &&( chk_cc g++ g++ || chk g++ gcc))); then | |
1025 | err "the gcc and g++ in your path point to different compilers. | |
1026 | Check which versions are in your path with gcc --version and g++ --version. | |
1027 | To resolve this problem, either fix your PATH or run configure with --enable-clang" | |
1028 | fi | |
1029 | ||
1030 | fi | |
1031 | fi | |
1032 | fi | |
1033 | ||
c1a9b12d SL |
1034 | # If the clang isn't already enabled, check for GCC, and if it is missing, turn |
1035 | # on clang as a backup. | |
1036 | if [ -z "$CFG_ENABLE_CLANG" ] | |
1037 | then | |
1038 | CFG_GCC_VERSION=$("$CFG_GCC" --version 2>&1) | |
1039 | if [ $? -ne 0 ] | |
1040 | then | |
1041 | step_msg "GCC not installed, will try using Clang" | |
1042 | CFG_ENABLE_CLANG=1 | |
1043 | fi | |
1044 | fi | |
1045 | ||
1a4d82fc JJ |
1046 | # Okay, at this point, we have made up our minds about whether we are |
1047 | # going to force CFG_ENABLE_CLANG or not; save the setting if so. | |
c1a9b12d | 1048 | if [ -n "$CFG_ENABLE_CLANG" ] |
1a4d82fc JJ |
1049 | then |
1050 | putvar CFG_ENABLE_CLANG | |
1051 | fi | |
1052 | ||
9cc50fc6 SL |
1053 | if [ -z "$CFG_DISABLE_LIBCPP" -a -n "$CFG_ENABLE_CLANG" ] |
1054 | then | |
1055 | CFG_USING_LIBCPP="1" | |
1056 | else | |
1057 | CFG_USING_LIBCPP="0" | |
1058 | fi | |
1059 | ||
9346a6ac | 1060 | # Same with jemalloc. save the setting here. |
c1a9b12d | 1061 | if [ -n "$CFG_DISABLE_JEMALLOC" ] |
9346a6ac AL |
1062 | then |
1063 | putvar CFG_DISABLE_JEMALLOC | |
1064 | fi | |
1065 | ||
c1a9b12d | 1066 | if [ -n "$CFG_LLVM_ROOT" -a -z "$CFG_DISABLE_LLVM_VERSION_CHECK" -a -e "$CFG_LLVM_ROOT/bin/llvm-config" ] |
223e47cc LB |
1067 | then |
1068 | step_msg "using custom LLVM at $CFG_LLVM_ROOT" | |
1069 | ||
1070 | LLVM_CONFIG="$CFG_LLVM_ROOT/bin/llvm-config" | |
1071 | LLVM_VERSION=$($LLVM_CONFIG --version) | |
1072 | ||
1073 | case $LLVM_VERSION in | |
5bcae85e | 1074 | (3.[7-9]*) |
1a4d82fc JJ |
1075 | msg "found ok version of LLVM: $LLVM_VERSION" |
1076 | ;; | |
1077 | (*) | |
3157f602 | 1078 | err "bad LLVM version: $LLVM_VERSION, need >=3.7" |
1a4d82fc | 1079 | ;; |
223e47cc | 1080 | esac |
5bcae85e SL |
1081 | |
1082 | if "$CFG_LLVM_ROOT/bin/llvm-mc" -help | grep -- "-relocation-model"; then | |
1083 | msg "found older llvm-mc" | |
1084 | CFG_LLVM_MC_HAS_RELOCATION_MODEL=1 | |
1085 | putvar CFG_LLVM_MC_HAS_RELOCATION_MODEL | |
1086 | fi | |
223e47cc LB |
1087 | fi |
1088 | ||
1a4d82fc JJ |
1089 | # Even when the user overrides the choice of CC, still try to detect |
1090 | # clang to disable some clang-specific warnings. We here draw a | |
1091 | # distinction between: | |
1092 | # | |
1093 | # CFG_ENABLE_CLANG : passed --enable-clang, or host "requires" clang, | |
1094 | # CFG_USING_CLANG : compiler (clang / gcc / $CC) looks like clang. | |
1095 | # | |
1096 | # This distinction is important because there are some safeguards we | |
1097 | # would prefer to skip when merely CFG_USING_CLANG is set; but when | |
1098 | # CFG_ENABLE_CLANG is set, that indicates that we are opting into | |
1099 | # running such safeguards. | |
1100 | ||
c1a9b12d | 1101 | if [ -n "$CC" ] |
223e47cc | 1102 | then |
1a4d82fc JJ |
1103 | msg "skipping compiler inference steps; using provided CC=$CC" |
1104 | CFG_CC="$CC" | |
1105 | ||
1106 | CFG_OSX_CC_VERSION=$("$CFG_CC" --version 2>&1 | grep "clang") | |
1107 | if [ $? -eq 0 ] | |
223e47cc | 1108 | then |
1a4d82fc JJ |
1109 | step_msg "note, user-provided CC looks like clang; CC=$CC." |
1110 | CFG_USING_CLANG=1 | |
1111 | putvar CFG_USING_CLANG | |
223e47cc | 1112 | fi |
223e47cc | 1113 | else |
c1a9b12d | 1114 | if [ -n "$CFG_ENABLE_CLANG" ] |
1a4d82fc JJ |
1115 | then |
1116 | if [ -z "$CFG_CLANG" ] | |
1117 | then | |
1118 | err "clang requested but not found" | |
1119 | fi | |
1120 | CFG_CC="$CFG_CLANG" | |
1121 | CFG_USING_CLANG=1 | |
1122 | putvar CFG_USING_CLANG | |
1123 | else | |
1124 | CFG_CC="gcc" | |
1125 | fi | |
1126 | fi | |
1127 | ||
c1a9b12d | 1128 | if [ -n "$CFG_ENABLE_CLANG" ] |
1a4d82fc | 1129 | then |
62682a34 SL |
1130 | case "$CC" in |
1131 | (''|*clang) | |
62682a34 SL |
1132 | if [ -z "$CC" ] |
1133 | then | |
1134 | CFG_CC="clang" | |
1135 | CFG_CXX="clang++" | |
1136 | fi | |
1137 | esac | |
223e47cc LB |
1138 | fi |
1139 | ||
c1a9b12d | 1140 | if [ -n "$CFG_ENABLE_CCACHE" ] |
970d7e83 | 1141 | then |
c1a9b12d | 1142 | if [ -z "$CFG_CCACHE" ] |
970d7e83 | 1143 | then |
c1a9b12d | 1144 | err "ccache requested but not found" |
970d7e83 | 1145 | fi |
c1a9b12d SL |
1146 | |
1147 | CFG_CC="ccache $CFG_CC" | |
1a4d82fc | 1148 | fi |
970d7e83 | 1149 | |
1a4d82fc JJ |
1150 | if [ -z "$CC" -a -z "$CFG_ENABLE_CLANG" -a -z "$CFG_GCC" ] |
1151 | then | |
1152 | err "either clang or gcc is required" | |
970d7e83 LB |
1153 | fi |
1154 | ||
1a4d82fc JJ |
1155 | # All safeguards based on $CFG_ENABLE_CLANG should occur before this |
1156 | # point in the script; after this point, script logic should inspect | |
1157 | # $CFG_USING_CLANG rather than $CFG_ENABLE_CLANG. | |
1158 | ||
92a42be0 | 1159 | # Set CFG_{CC,CXX,CPP,CFLAGS,CXXFLAGS,LDFLAGS} |
1a4d82fc JJ |
1160 | envopt CC |
1161 | envopt CXX | |
1162 | envopt CPP | |
1163 | envopt CFLAGS | |
1164 | envopt CXXFLAGS | |
92a42be0 | 1165 | envopt LDFLAGS |
223e47cc | 1166 | |
b039eaaf SL |
1167 | # stdc++ name in use |
1168 | # used to manage non-standard name (on OpenBSD for example) | |
1169 | program_transform_name=$($CFG_CC -v 2>&1 | sed -n "s/.*--program-transform-name='\([^']*\)'.*/\1/p") | |
1170 | CFG_STDCPP_NAME=$(echo "stdc++" | sed "${program_transform_name}") | |
1171 | putvar CFG_STDCPP_NAME | |
1172 | ||
1a4d82fc | 1173 | # a little post-processing of various config values |
223e47cc | 1174 | CFG_PREFIX=${CFG_PREFIX%/} |
1a4d82fc | 1175 | CFG_MANDIR=${CFG_MANDIR%/} |
9e0c209e | 1176 | CFG_DOCDIR=${CFG_DOCDIR%/} |
1a4d82fc JJ |
1177 | CFG_HOST="$(echo $CFG_HOST | tr ',' ' ')" |
1178 | CFG_TARGET="$(echo $CFG_TARGET | tr ',' ' ')" | |
1179 | CFG_SUPPORTED_TARGET="" | |
1180 | for target_file in ${CFG_SRC_DIR}mk/cfg/*.mk; do | |
1181 | CFG_SUPPORTED_TARGET="${CFG_SUPPORTED_TARGET} $(basename "$target_file" .mk)" | |
1182 | done | |
223e47cc | 1183 | |
c1a9b12d SL |
1184 | # copy build-triples to host-triples so that builds are a subset of hosts |
1185 | V_TEMP="" | |
1186 | for i in $CFG_BUILD $CFG_HOST; | |
1187 | do | |
1188 | echo "$V_TEMP" | grep -qF $i || V_TEMP="$V_TEMP${V_TEMP:+ }$i" | |
1189 | done | |
1190 | CFG_HOST=$V_TEMP | |
1191 | ||
223e47cc LB |
1192 | # copy host-triples to target-triples so that hosts are a subset of targets |
1193 | V_TEMP="" | |
1a4d82fc | 1194 | for i in $CFG_HOST $CFG_TARGET; |
223e47cc LB |
1195 | do |
1196 | echo "$V_TEMP" | grep -qF $i || V_TEMP="$V_TEMP${V_TEMP:+ }$i" | |
1197 | done | |
1a4d82fc | 1198 | CFG_TARGET=$V_TEMP |
223e47cc LB |
1199 | |
1200 | # check target-specific tool-chains | |
1a4d82fc | 1201 | for i in $CFG_TARGET |
223e47cc LB |
1202 | do |
1203 | L_CHECK=false | |
1a4d82fc | 1204 | for j in $CFG_SUPPORTED_TARGET |
223e47cc LB |
1205 | do |
1206 | if [ $i = $j ] | |
1207 | then | |
1208 | L_CHECK=true | |
1209 | fi | |
1210 | done | |
1211 | ||
1212 | if [ $L_CHECK = false ] | |
1213 | then | |
1214 | err "unsupported target triples \"$i\" found" | |
1215 | fi | |
1216 | ||
1217 | case $i in | |
c1a9b12d | 1218 | *android*) |
a7813a04 XL |
1219 | case $i in |
1220 | armv7-linux-androideabi) | |
1221 | cmd_prefix="arm-linux-androideabi" | |
1222 | ;; | |
1223 | *) | |
1224 | cmd_prefix=$i | |
1225 | ;; | |
1226 | esac | |
1227 | ||
c1a9b12d SL |
1228 | upper_snake_target=$(echo "$i" | tr '[:lower:]' '[:upper:]' | tr '\-' '\_') |
1229 | eval ndk=\$"CFG_${upper_snake_target}_NDK" | |
1230 | if [ -z "$ndk" ] | |
223e47cc | 1231 | then |
c1a9b12d SL |
1232 | ndk=$CFG_ANDROID_CROSS_PATH |
1233 | eval "CFG_${upper_snake_target}_NDK"=$CFG_ANDROID_CROSS_PATH | |
1234 | warn "generic/default Android NDK option is deprecated (use --$i-ndk option instead)" | |
223e47cc | 1235 | fi |
c1a9b12d SL |
1236 | |
1237 | # Perform a basic sanity check of the NDK | |
a7813a04 | 1238 | for android_ndk_tool in "$ndk/bin/$cmd_prefix-gcc" "$ndk/bin/$cmd_prefix-g++" "$ndk/bin/$cmd_prefix-ar" |
c1a9b12d SL |
1239 | do |
1240 | if [ ! -f $android_ndk_tool ] | |
1241 | then | |
1242 | err "NDK tool $android_ndk_tool not found (bad or missing --$i-ndk option?)" | |
1243 | fi | |
1244 | done | |
223e47cc | 1245 | ;; |
9cc50fc6 SL |
1246 | *-unknown-nacl) |
1247 | if [ -z "$CFG_NACL_CROSS_PATH" ] | |
1248 | then | |
1249 | err "I need the NaCl SDK path! (use --nacl-cross-path)" | |
1250 | fi | |
1251 | ;; | |
1a4d82fc JJ |
1252 | arm-apple-darwin) |
1253 | if [ $CFG_OSTYPE != apple-darwin ] | |
1254 | then | |
1255 | err "The iOS target is only supported on Mac OS X" | |
1256 | fi | |
1257 | ;; | |
1258 | ||
c1a9b12d | 1259 | *-msvc) |
e9174d1e SL |
1260 | # There are three builds of cmake on windows: MSVC, MinGW and Cygwin |
1261 | # The Cygwin build does not have generators for Visual Studio, so | |
1262 | # detect that here and error. | |
1263 | if ! "$CFG_CMAKE" --help | sed -n '/^Generators/,$p' | grep 'Visual Studio' > /dev/null | |
1264 | then | |
1265 | err " | |
1266 | ||
1267 | cmake does not support Visual Studio generators. | |
1268 | ||
1269 | This is likely due to it being an msys/cygwin build of cmake, \ | |
1270 | rather than the required windows version, built using MinGW \ | |
1271 | or Visual Studio. | |
1272 | ||
1273 | If you are building under msys2 try installing the mingw-w64-x86_64-cmake \ | |
1274 | package instead of cmake: | |
1275 | ||
1276 | $ pacman -R cmake && pacman -S mingw-w64-x86_64-cmake | |
1277 | " | |
1278 | fi | |
1279 | ||
62682a34 SL |
1280 | # Use the REG program to figure out where VS is installed |
1281 | # We need to figure out where cl.exe and link.exe are, so we do some | |
1282 | # munging and some probing here. We also look for the default | |
1283 | # INCLUDE and LIB variables for MSVC so we can set those in the | |
1284 | # build system as well. | |
e9174d1e | 1285 | install=$(cmd //c reg QUERY \ |
c1a9b12d | 1286 | 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0' \ |
62682a34 | 1287 | -v InstallDir) |
c1a9b12d | 1288 | if [ -z "$install" ]; then |
e9174d1e | 1289 | install=$(cmd //c reg QUERY \ |
c1a9b12d SL |
1290 | 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0' \ |
1291 | -v InstallDir) | |
1292 | fi | |
62682a34 SL |
1293 | need_ok "couldn't find visual studio install root" |
1294 | CFG_MSVC_ROOT=$(echo "$install" | grep InstallDir | sed 's/.*REG_SZ[ ]*//') | |
1295 | CFG_MSVC_ROOT=$(dirname "$CFG_MSVC_ROOT") | |
1296 | CFG_MSVC_ROOT=$(dirname "$CFG_MSVC_ROOT") | |
c1a9b12d SL |
1297 | putvar CFG_MSVC_ROOT |
1298 | ||
1299 | case $i in | |
1300 | x86_64-*) | |
1301 | bits=x86_64 | |
1302 | msvc_part=amd64 | |
1303 | ;; | |
54a0048b | 1304 | i*86-*) |
c1a9b12d SL |
1305 | bits=i386 |
1306 | msvc_part= | |
1307 | ;; | |
1308 | *) | |
1309 | err "can only target x86 targets for MSVC" | |
1310 | ;; | |
1311 | esac | |
1312 | bindir="${CFG_MSVC_ROOT}/VC/bin" | |
1313 | if [ -n "$msvc_part" ]; then | |
1314 | bindir="$bindir/$msvc_part" | |
1315 | fi | |
1316 | eval CFG_MSVC_BINDIR_$bits="\"$bindir\"" | |
1317 | eval CFG_MSVC_CL_$bits="\"$bindir/cl.exe\"" | |
1318 | eval CFG_MSVC_LIB_$bits="\"$bindir/lib.exe\"" | |
1319 | eval CFG_MSVC_LINK_$bits="\"$bindir/link.exe\"" | |
62682a34 SL |
1320 | |
1321 | vcvarsall="${CFG_MSVC_ROOT}/VC/vcvarsall.bat" | |
e9174d1e | 1322 | include_path=$(cmd //V:ON //c "$vcvarsall" $msvc_part \& echo !INCLUDE!) |
62682a34 | 1323 | need_ok "failed to learn about MSVC's INCLUDE" |
e9174d1e | 1324 | lib_path=$(cmd //V:ON //c "$vcvarsall" $msvc_part \& echo !LIB!) |
62682a34 SL |
1325 | need_ok "failed to learn about MSVC's LIB" |
1326 | ||
c1a9b12d SL |
1327 | eval CFG_MSVC_INCLUDE_PATH_${bits}="\"$include_path\"" |
1328 | eval CFG_MSVC_LIB_PATH_${bits}="\"$lib_path\"" | |
1329 | ||
1330 | putvar CFG_MSVC_BINDIR_${bits} | |
1331 | putvar CFG_MSVC_CL_${bits} | |
1332 | putvar CFG_MSVC_LIB_${bits} | |
1333 | putvar CFG_MSVC_LINK_${bits} | |
1334 | putvar CFG_MSVC_INCLUDE_PATH_${bits} | |
1335 | putvar CFG_MSVC_LIB_PATH_${bits} | |
62682a34 SL |
1336 | ;; |
1337 | ||
223e47cc LB |
1338 | *) |
1339 | ;; | |
1340 | esac | |
1341 | done | |
1342 | ||
3157f602 XL |
1343 | if [ "$CFG_OSTYPE" = "pc-windows-gnu" ] || [ "$CFG_OSTYPE" = "pc-windows-msvc" ] |
1344 | then | |
1345 | # There are some MSYS python builds which will auto-translate | |
1346 | # windows-style paths to MSYS-style paths in Python itself. | |
1347 | # Unfortunately this breaks LLVM's build system as somewhere along | |
1348 | # the line LLVM prints a path into a file from Python and then CMake | |
1349 | # later tries to interpret that path. If Python prints a MSYS path | |
1350 | # and CMake tries to use it as a Windows path, you're gonna have a | |
1351 | # Bad Time. | |
1352 | # | |
1353 | # Consequently here we try to detect when that happens and print an | |
1354 | # error if it does. | |
1355 | if $CFG_PYTHON -c 'import sys; print sys.argv[1]' `pwd` | grep '^/' > /dev/null | |
1356 | then | |
1357 | err " | |
1358 | ||
1359 | python is silently translating windows paths to MSYS paths \ | |
1360 | and the build will fail if this python is used. | |
1361 | ||
1362 | Either an official python install must be used or an \ | |
1363 | alternative python package in MinGW must be used. | |
1364 | ||
1365 | If you are building under msys2 try installing the mingw-w64-x86_64-python2 \ | |
1366 | package instead of python2: | |
1367 | ||
1368 | $ pacman -S mingw-w64-x86_64-python2 | |
1369 | " | |
1370 | fi | |
1371 | fi | |
1372 | ||
c1a9b12d | 1373 | if [ -n "$CFG_PERF" ] |
223e47cc LB |
1374 | then |
1375 | HAVE_PERF_LOGFD=`$CFG_PERF stat --log-fd 2>&1 | grep 'unknown option'` | |
1376 | if [ -z "$HAVE_PERF_LOGFD" ]; | |
1377 | then | |
1378 | CFG_PERF_WITH_LOGFD=1 | |
1379 | putvar CFG_PERF_WITH_LOGFD | |
1380 | fi | |
1381 | fi | |
1382 | ||
476ff2be | 1383 | if [ -n "$CFG_DISABLE_RUSTBUILD" ]; then |
223e47cc | 1384 | |
7453a54e | 1385 | step_msg "making directories" |
223e47cc | 1386 | |
7453a54e SL |
1387 | for i in \ |
1388 | doc doc/std doc/extra \ | |
1389 | dl tmp dist | |
1390 | do | |
1391 | make_dir $i | |
1392 | done | |
223e47cc | 1393 | |
7453a54e SL |
1394 | for t in $CFG_HOST |
1395 | do | |
1396 | make_dir $t/llvm | |
1397 | done | |
223e47cc | 1398 | |
7453a54e | 1399 | for t in $CFG_HOST |
223e47cc | 1400 | do |
7453a54e | 1401 | make_dir $t/rustllvm |
223e47cc | 1402 | done |
223e47cc | 1403 | |
7453a54e SL |
1404 | for t in $CFG_TARGET |
1405 | do | |
1406 | make_dir $t/rt | |
1407 | for s in 0 1 2 3 | |
223e47cc | 1408 | do |
7453a54e SL |
1409 | make_dir $t/rt/stage$s |
1410 | make_dir $t/rt/jemalloc | |
1411 | make_dir $t/rt/compiler-rt | |
1412 | for i in \ | |
1413 | isaac sync test \ | |
1414 | arch/i386 arch/x86_64 arch/arm arch/aarch64 arch/mips arch/powerpc | |
1415 | do | |
1416 | make_dir $t/rt/stage$s/$i | |
1417 | done | |
223e47cc | 1418 | done |
7453a54e | 1419 | done |
223e47cc | 1420 | |
7453a54e SL |
1421 | for h in $CFG_HOST |
1422 | do | |
1423 | for t in $CFG_TARGET | |
1424 | do | |
1425 | # host bin dir stage0 | |
1426 | make_dir $h/stage0/bin | |
1427 | ||
1428 | # host lib dir stage0 | |
1429 | make_dir $h/stage0/lib | |
1430 | ||
1431 | # host test dir stage0 | |
1432 | make_dir $h/stage0/test | |
1433 | ||
1434 | # target bin dir stage0 | |
1435 | make_dir $h/stage0/lib/rustlib/$t/bin | |
1436 | ||
1437 | # target lib dir stage0 | |
1438 | make_dir $h/stage0/lib/rustlib/$t/lib | |
1439 | ||
1440 | for i in 1 2 3 | |
1441 | do | |
1442 | # host bin dir | |
1443 | make_dir $h/stage$i/bin | |
1444 | ||
1445 | # host lib dir | |
1446 | make_dir $h/stage$i/$CFG_LIBDIR_RELATIVE | |
1447 | ||
1448 | # host test dir | |
1449 | make_dir $h/stage$i/test | |
1450 | ||
1451 | # target bin dir | |
1452 | make_dir $h/stage$i/$CFG_LIBDIR_RELATIVE/rustlib/$t/bin | |
1453 | ||
1454 | # target lib dir | |
1455 | make_dir $h/stage$i/$CFG_LIBDIR_RELATIVE/rustlib/$t/lib | |
1456 | done | |
1457 | done | |
1458 | ||
1459 | make_dir $h/test/run-pass | |
1460 | make_dir $h/test/run-pass-valgrind | |
1461 | make_dir $h/test/run-pass-fulldeps | |
1462 | make_dir $h/test/run-fail | |
1463 | make_dir $h/test/run-fail-fulldeps | |
1464 | make_dir $h/test/compile-fail | |
1465 | make_dir $h/test/parse-fail | |
1466 | make_dir $h/test/compile-fail-fulldeps | |
1467 | make_dir $h/test/bench | |
1468 | make_dir $h/test/perf | |
1469 | make_dir $h/test/pretty | |
1470 | make_dir $h/test/debuginfo-gdb | |
1471 | make_dir $h/test/debuginfo-lldb | |
1472 | make_dir $h/test/codegen | |
1473 | make_dir $h/test/codegen-units | |
1474 | make_dir $h/test/rustdoc | |
1475 | done | |
1476 | ||
1477 | fi | |
223e47cc LB |
1478 | |
1479 | # Configure submodules | |
1480 | step_msg "configuring submodules" | |
1481 | ||
1482 | # Have to be in the top of src directory for this | |
476ff2be | 1483 | if [ -z "$CFG_DISABLE_MANAGE_SUBMODULES" ] && [ -n "$CFG_DISABLE_RUSTBUILD" ] |
223e47cc LB |
1484 | then |
1485 | cd ${CFG_SRC_DIR} | |
1486 | ||
1487 | msg "git: submodule sync" | |
1a4d82fc JJ |
1488 | "${CFG_GIT}" submodule sync |
1489 | ||
1490 | msg "git: submodule init" | |
1491 | "${CFG_GIT}" submodule init | |
1492 | ||
1493 | # Disable submodules that we're not using | |
c1a9b12d | 1494 | if [ -n "${CFG_LLVM_ROOT}" ]; then |
1a4d82fc JJ |
1495 | msg "git: submodule deinit src/llvm" |
1496 | "${CFG_GIT}" submodule deinit src/llvm | |
1497 | fi | |
c1a9b12d | 1498 | if [ -n "${CFG_JEMALLOC_ROOT}" ]; then |
1a4d82fc JJ |
1499 | msg "git: submodule deinit src/jemalloc" |
1500 | "${CFG_GIT}" submodule deinit src/jemalloc | |
1501 | fi | |
223e47cc LB |
1502 | |
1503 | msg "git: submodule update" | |
1a4d82fc | 1504 | "${CFG_GIT}" submodule update |
223e47cc LB |
1505 | need_ok "git failed" |
1506 | ||
1507 | msg "git: submodule foreach sync" | |
1a4d82fc | 1508 | "${CFG_GIT}" submodule foreach --recursive 'if test -e .gitmodules; then git submodule sync; fi' |
223e47cc LB |
1509 | need_ok "git failed" |
1510 | ||
1511 | msg "git: submodule foreach update" | |
1a4d82fc | 1512 | "${CFG_GIT}" submodule update --recursive |
223e47cc LB |
1513 | need_ok "git failed" |
1514 | ||
1515 | # NB: this is just for the sake of getting the submodule SHA1 values | |
1516 | # and status written into the build log. | |
1517 | msg "git: submodule status" | |
1518 | "${CFG_GIT}" submodule status --recursive | |
1519 | ||
1520 | msg "git: submodule clobber" | |
1a4d82fc | 1521 | "${CFG_GIT}" submodule foreach --recursive git clean -dxf |
223e47cc | 1522 | need_ok "git failed" |
1a4d82fc | 1523 | "${CFG_GIT}" submodule foreach --recursive git checkout . |
223e47cc LB |
1524 | need_ok "git failed" |
1525 | ||
1526 | cd ${CFG_BUILD_DIR} | |
1527 | fi | |
1528 | ||
a7813a04 XL |
1529 | # Do a sanity check that the submodule source exists. Because GitHub |
1530 | # automatically publishes broken tarballs that can't be disabled, and | |
1531 | # people download them and try to use them. | |
1532 | if [ ! -e "${CFG_SRC_DIR}/src/liblibc" ]; then | |
1533 | err "some submodules are missing. Is this a broken tarball? | |
1534 | ||
1535 | If you downloaded this tarball from the GitHub release pages at | |
1536 | https://github.com/rust-lang/rust/releases, | |
1537 | then please delete it and instead download the source from | |
1538 | https://www.rust-lang.org/downloads.html" | |
1539 | ||
1540 | fi | |
1541 | ||
223e47cc LB |
1542 | # Configure llvm, only if necessary |
1543 | step_msg "looking at LLVM" | |
1544 | CFG_LLVM_SRC_DIR=${CFG_SRC_DIR}src/llvm/ | |
1a4d82fc | 1545 | for t in $CFG_HOST |
223e47cc LB |
1546 | do |
1547 | do_reconfigure=1 | |
62682a34 SL |
1548 | is_msvc=0 |
1549 | case "$t" in | |
1550 | (*-msvc) | |
1551 | is_msvc=1 | |
1552 | ;; | |
1553 | esac | |
223e47cc | 1554 | |
476ff2be | 1555 | if [ -z "$CFG_DISABLE_RUSTBUILD" ] |
7453a54e SL |
1556 | then |
1557 | msg "not configuring LLVM, rustbuild in use" | |
1558 | do_reconfigure=0 | |
476ff2be | 1559 | elif [ -z "$CFG_LLVM_ROOT" ] |
223e47cc | 1560 | then |
1a4d82fc | 1561 | LLVM_BUILD_DIR=${CFG_BUILD_DIR}$t/llvm |
3157f602 XL |
1562 | LLVM_INST_DIR=$LLVM_BUILD_DIR |
1563 | # For some crazy reason the MSVC output dir is different than Unix | |
1564 | if [ ${is_msvc} -ne 0 ]; then | |
1565 | if [ -n "$CFG_DISABLE_OPTIMIZE_LLVM" ] | |
1566 | then | |
1567 | # Just use LLVM straight from its build directory to | |
1568 | # avoid 'make install' time | |
1569 | LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug | |
1570 | else | |
1571 | LLVM_INST_DIR=$LLVM_BUILD_DIR/Release | |
62682a34 | 1572 | fi |
223e47cc LB |
1573 | fi |
1574 | else | |
1575 | msg "not reconfiguring LLVM, external LLVM root" | |
1576 | # The user is using their own LLVM | |
1577 | LLVM_BUILD_DIR= | |
1578 | LLVM_INST_DIR=$CFG_LLVM_ROOT | |
1579 | do_reconfigure=0 | |
e9174d1e | 1580 | # Check that LLVm FileCheck is available. Needed for the tests |
54a0048b SL |
1581 | if [ -z "$CFG_DISABLE_CODEGEN_TESTS" ]; then |
1582 | need_cmd $LLVM_INST_DIR/bin/FileCheck | |
1583 | fi | |
223e47cc LB |
1584 | fi |
1585 | ||
223e47cc LB |
1586 | if [ ${do_reconfigure} -ne 0 ] |
1587 | then | |
1588 | # because git is hilarious, it might have put the module index | |
1589 | # in a couple places. | |
1590 | index1="${CFG_SRC_DIR}.git/modules/src/llvm/index" | |
1591 | index2="${CFG_SRC_DIR}src/llvm/.git/index" | |
1592 | for index in ${index1} ${index2} | |
1593 | do | |
1a4d82fc | 1594 | config_status="${LLVM_BUILD_DIR}/config.status" |
223e47cc LB |
1595 | if test -e ${index} -a \ |
1596 | -e ${config_status} -a \ | |
1597 | ${config_status} -nt ${index} | |
1598 | then | |
1599 | msg "not reconfiguring LLVM, config.status is fresh" | |
1600 | do_reconfigure=0 | |
1601 | fi | |
1602 | done | |
1603 | fi | |
1604 | ||
92a42be0 | 1605 | # We need the generator later on for compiler-rt even if LLVM's not built |
5bcae85e SL |
1606 | if [ -n "$CFG_NINJA" ] |
1607 | then | |
1608 | generator="Ninja" | |
1609 | elif [ ${is_msvc} -ne 0 ] | |
62682a34 | 1610 | then |
c1a9b12d SL |
1611 | case "$CFG_MSVC_ROOT" in |
1612 | *14.0*) | |
1613 | generator="Visual Studio 14 2015" | |
1614 | ;; | |
1615 | *12.0*) | |
1616 | generator="Visual Studio 12 2013" | |
1617 | ;; | |
1618 | *) | |
1619 | err "can't determine generator for LLVM cmake" | |
1620 | ;; | |
1621 | esac | |
1622 | case "$t" in | |
1623 | x86_64-*) | |
1624 | generator="$generator Win64" | |
1625 | ;; | |
1626 | i686-*) | |
1627 | ;; | |
1628 | *) | |
1629 | err "can only build LLVM for x86 platforms" | |
1630 | ;; | |
1631 | esac | |
3157f602 XL |
1632 | else |
1633 | generator="Unix Makefiles" | |
62682a34 | 1634 | fi |
3157f602 XL |
1635 | CFG_CMAKE_GENERATOR=$generator |
1636 | putvar CFG_CMAKE_GENERATOR | |
1637 | ||
1638 | msg "configuring LLVM for $t" | |
1639 | ||
1640 | LLVM_CFLAGS_32="" | |
1641 | LLVM_CXXFLAGS_32="" | |
1642 | LLVM_LDFLAGS_32="" | |
1643 | LLVM_CFLAGS_64="" | |
1644 | LLVM_CXXFLAGS_64="" | |
1645 | LLVM_LDFLAGS_64="" | |
1646 | ||
1647 | case "$CFG_CC" in | |
1648 | ("ccache clang") | |
1649 | LLVM_CXX_32="ccache" | |
1650 | LLVM_CC_32="ccache" | |
1651 | LLVM_CXX_32_ARG1="clang++" | |
1652 | LLVM_CC_32_ARG1="clang" | |
1653 | LLVM_CFLAGS_32="-Qunused-arguments" | |
1654 | LLVM_CXXFLAGS_32="-Qunused-arguments" | |
1655 | ||
1656 | LLVM_CXX_64="ccache" | |
1657 | LLVM_CC_64="ccache" | |
1658 | LLVM_CXX_64_ARG1="clang++" | |
1659 | LLVM_CC_64_ARG1="clang" | |
1660 | LLVM_CFLAGS_64="-Qunused-arguments" | |
1661 | LLVM_CXXFLAGS_64="-Qunused-arguments" | |
1a4d82fc | 1662 | ;; |
3157f602 XL |
1663 | ("clang") |
1664 | LLVM_CXX_32="clang++" | |
1665 | LLVM_CC_32="clang" | |
1666 | LLVM_CFLAGS_32="-Qunused-arguments" | |
1667 | LLVM_CXXFLAGS_32="-Qunused-arguments" | |
1668 | ||
1669 | LLVM_CXX_64="clang++" | |
1670 | LLVM_CC_64="clang" | |
1671 | LLVM_CFLAGS_64="-Qunused-arguments" | |
1672 | LLVM_CXXFLAGS_64="-Qunused-arguments" | |
970d7e83 | 1673 | ;; |
3157f602 XL |
1674 | ("ccache gcc") |
1675 | LLVM_CXX_32="ccache" | |
1676 | LLVM_CC_32="ccache" | |
c30ab7b3 SL |
1677 | LLVM_CXX_32_ARG1="g++" |
1678 | LLVM_CC_32_ARG1="gcc" | |
3157f602 XL |
1679 | |
1680 | LLVM_CXX_64="ccache" | |
1681 | LLVM_CC_64="ccache" | |
1682 | LLVM_CXX_64_ARG1="g++" | |
1683 | LLVM_CC_64_ARG1="gcc" | |
970d7e83 | 1684 | ;; |
3157f602 | 1685 | ("gcc") |
476ff2be SL |
1686 | if [ -z "$CFG_ENABLE_SCCACHE" ]; then |
1687 | LLVM_CXX_32="g++" | |
1688 | LLVM_CC_32="gcc" | |
223e47cc | 1689 | |
476ff2be SL |
1690 | LLVM_CXX_64="g++" |
1691 | LLVM_CC_64="gcc" | |
1692 | else | |
1693 | LLVM_CXX_32="sccache" | |
1694 | LLVM_CC_32="sccache" | |
1695 | LLVM_CXX_32_ARG1="g++" | |
1696 | LLVM_CC_32_ARG1="gcc" | |
1697 | ||
1698 | LLVM_CXX_64="sccache" | |
1699 | LLVM_CC_64="sccache" | |
1700 | LLVM_CXX_64_ARG1="g++" | |
1701 | LLVM_CC_64_ARG1="gcc" | |
1702 | fi | |
1a4d82fc JJ |
1703 | ;; |
1704 | ||
3157f602 | 1705 | (*) |
1a4d82fc | 1706 | msg "inferring LLVM_CXX/CC from CXX/CC = $CXX/$CC" |
c1a9b12d SL |
1707 | if [ -n "$CFG_ENABLE_CCACHE" ] |
1708 | then | |
1709 | if [ -z "$CFG_CCACHE" ] | |
1710 | then | |
1711 | err "ccache requested but not found" | |
1712 | fi | |
1713 | ||
3157f602 XL |
1714 | LLVM_CXX_32="ccache" |
1715 | LLVM_CC_32="ccache" | |
1716 | LLVM_CXX_32_ARG1="$CXX" | |
1717 | LLVM_CC_32_ARG1="$CC" | |
c1a9b12d | 1718 | |
3157f602 XL |
1719 | LLVM_CXX_64="ccache" |
1720 | LLVM_CC_64="ccache" | |
1721 | LLVM_CXX_64_ARG1="$CXX" | |
1722 | LLVM_CC_64_ARG1="$CC" | |
c1a9b12d SL |
1723 | else |
1724 | LLVM_CXX_32="$CXX" | |
1725 | LLVM_CC_32="$CC" | |
1726 | ||
1727 | LLVM_CXX_64="$CXX" | |
1728 | LLVM_CC_64="$CC" | |
1729 | fi | |
1a4d82fc | 1730 | |
1a4d82fc | 1731 | ;; |
3157f602 XL |
1732 | esac |
1733 | ||
1734 | case "$CFG_CPUTYPE" in | |
1735 | (x86*) | |
1736 | LLVM_CFLAGS_32="$LLVM_CFLAGS_32 -m32" | |
1737 | LLVM_CXXFLAGS_32="$LLVM_CXXFLAGS_32 -m32" | |
1738 | LLVM_LDFLAGS_32="$LLVM_LDFLAGS_32 -m32" | |
1739 | ;; | |
1740 | esac | |
223e47cc | 1741 | |
3157f602 XL |
1742 | if echo $t | grep -q x86_64 |
1743 | then | |
1744 | LLVM_CXX=$LLVM_CXX_64 | |
1745 | LLVM_CC=$LLVM_CC_64 | |
1746 | LLVM_CXX_ARG1=$LLVM_CXX_64_ARG1 | |
1747 | LLVM_CC_ARG1=$LLVM_CC_64_ARG1 | |
1748 | LLVM_CFLAGS=$LLVM_CFLAGS_64 | |
1749 | LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64 | |
1750 | LLVM_LDFLAGS=$LLVM_LDFLAGS_64 | |
1751 | else | |
1752 | LLVM_CXX=$LLVM_CXX_32 | |
1753 | LLVM_CC=$LLVM_CC_32 | |
1754 | LLVM_CXX_ARG1=$LLVM_CXX_32_ARG1 | |
1755 | LLVM_CC_ARG1=$LLVM_CC_32_ARG1 | |
1756 | LLVM_CFLAGS=$LLVM_CFLAGS_32 | |
1757 | LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32 | |
1758 | LLVM_LDFLAGS=$LLVM_LDFLAGS_32 | |
1759 | fi | |
1a4d82fc | 1760 | |
3157f602 XL |
1761 | if [ "$CFG_USING_LIBCPP" != "0" ]; then |
1762 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_LIBCXX=ON" | |
1763 | fi | |
223e47cc | 1764 | |
3157f602 XL |
1765 | # Turn off things we don't need |
1766 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_INCLUDE_TESTS=OFF" | |
1767 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_INCLUDE_EXAMPLES=OFF" | |
1768 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_INCLUDE_DOCS=OFF" | |
1769 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_ZLIB=OFF" | |
1770 | CMAKE_ARGS="$CMAKE_ARGS -DWITH_POLY=OFF" | |
1771 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_TERMINFO=OFF" | |
1772 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_LIBEDIT=OFF" | |
1a4d82fc | 1773 | |
3157f602 | 1774 | arch="$(echo "$t" | cut -d - -f 1)" |
1a4d82fc | 1775 | |
3157f602 XL |
1776 | if [ "$arch" = i686 ]; then |
1777 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_BUILD_32_BITS=ON" | |
1778 | fi | |
1a4d82fc | 1779 | |
3157f602 XL |
1780 | if [ "$t" != "$CFG_BUILD" ]; then |
1781 | # see http://llvm.org/docs/HowToCrossCompileLLVM.html | |
1782 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_CROSSCOMPILING=True" | |
1783 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_TARGET_ARCH=$arch" | |
1784 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_TABLEGEN=$CFG_BUILD_DIR/$CFG_BUILD/llvm/bin/llvm-tblgen" | |
1785 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=$t" | |
1786 | fi | |
223e47cc | 1787 | |
3157f602 XL |
1788 | # MSVC handles compiler business itself |
1789 | if [ ${is_msvc} -eq 0 ]; then | |
1790 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_C_COMPILER=$LLVM_CC" | |
1791 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_CXX_COMPILER=$LLVM_CXX" | |
1792 | CMAKE_ARGS="$CMAKE_ARGS '-DCMAKE_C_FLAGS=$LLVM_CFLAGS'" | |
1793 | CMAKE_ARGS="$CMAKE_ARGS '-DCMAKE_CXX_FLAGS=$LLVM_CXXFLAGS'" | |
1794 | if [ -n "$LLVM_CC_ARG1" ]; then | |
1795 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_C_COMPILER_ARG1=$LLVM_CC_ARG1" | |
1796 | fi | |
1797 | if [ -n "$LLVM_CXX_ARG1" ]; then | |
1798 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_CXX_COMPILER_ARG1=$LLVM_CXX_ARG1" | |
223e47cc | 1799 | fi |
3157f602 XL |
1800 | # FIXME: What about LDFLAGS? |
1801 | fi | |
223e47cc | 1802 | |
3157f602 XL |
1803 | if [ -n "$CFG_DISABLE_OPTIMIZE_LLVM" ]; then |
1804 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_BUILD_TYPE=Debug" | |
476ff2be SL |
1805 | elif [ -n "$CFG_ENABLE_LLVM_RELEASE_DEBUGINFO" ]; then |
1806 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_BUILD_TYPE=RelWithDebInfo" | |
3157f602 XL |
1807 | else |
1808 | CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release" | |
1809 | fi | |
1810 | if [ -z "$CFG_ENABLE_LLVM_ASSERTIONS" ] | |
1811 | then | |
1812 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=OFF" | |
1813 | else | |
1814 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=ON" | |
1815 | fi | |
223e47cc | 1816 | |
476ff2be | 1817 | CMAKE_ARGS="$CMAKE_ARGS -DLLVM_TARGETS_TO_BUILD='X86;ARM;AArch64;Mips;PowerPC;SystemZ;JSBackend;MSP430'" |
3157f602 XL |
1818 | CMAKE_ARGS="$CMAKE_ARGS -G '$CFG_CMAKE_GENERATOR'" |
1819 | CMAKE_ARGS="$CMAKE_ARGS $CFG_LLVM_SRC_DIR" | |
1a4d82fc | 1820 | |
3157f602 XL |
1821 | if [ ${do_reconfigure} -ne 0 ] |
1822 | then | |
1823 | msg "configuring LLVM for $t with cmake" | |
223e47cc LB |
1824 | |
1825 | msg "configuring LLVM with:" | |
3157f602 | 1826 | msg "$CMAKE_ARGS" |
223e47cc | 1827 | |
3157f602 XL |
1828 | (cd $LLVM_BUILD_DIR && eval "\"$CFG_CMAKE\"" $CMAKE_ARGS) |
1829 | need_ok "LLVM cmake configure failed" | |
223e47cc LB |
1830 | fi |
1831 | ||
1832 | # Construct variables for LLVM build and install directories for | |
1833 | # each target. These will be named | |
1834 | # CFG_LLVM_BUILD_DIR_${target_triple} but all the hyphens in | |
1835 | # target_triple will be converted to underscore, because bash | |
1836 | # variables can't contain hyphens. The makefile will then have to | |
1837 | # convert back. | |
1838 | CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _) | |
1839 | CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _) | |
1840 | eval ${CFG_LLVM_BUILD_DIR}="'$LLVM_BUILD_DIR'" | |
1841 | eval ${CFG_LLVM_INST_DIR}="'$LLVM_INST_DIR'" | |
1842 | done | |
1843 | ||
1844 | ||
1845 | step_msg "writing configuration" | |
1846 | ||
1847 | putvar CFG_SRC_DIR | |
62682a34 | 1848 | putvar CFG_SRC_DIR_RELATIVE |
223e47cc LB |
1849 | putvar CFG_BUILD_DIR |
1850 | putvar CFG_OSTYPE | |
1851 | putvar CFG_CPUTYPE | |
1852 | putvar CFG_CONFIGURE_ARGS | |
1853 | putvar CFG_PREFIX | |
1a4d82fc JJ |
1854 | putvar CFG_HOST |
1855 | putvar CFG_TARGET | |
1856 | putvar CFG_LIBDIR_RELATIVE | |
223e47cc | 1857 | putvar CFG_DISABLE_MANAGE_SUBMODULES |
c1a9b12d SL |
1858 | putvar CFG_AARCH64_LINUX_ANDROID_NDK |
1859 | putvar CFG_ARM_LINUX_ANDROIDEABI_NDK | |
a7813a04 | 1860 | putvar CFG_ARMV7_LINUX_ANDROIDEABI_NDK |
e9174d1e | 1861 | putvar CFG_I686_LINUX_ANDROID_NDK |
9cc50fc6 | 1862 | putvar CFG_NACL_CROSS_PATH |
1a4d82fc | 1863 | putvar CFG_MANDIR |
9e0c209e | 1864 | putvar CFG_DOCDIR |
9cc50fc6 | 1865 | putvar CFG_USING_LIBCPP |
223e47cc | 1866 | |
970d7e83 LB |
1867 | # Avoid spurious warnings from clang by feeding it original source on |
1868 | # ccache-miss rather than preprocessed input. | |
c1a9b12d | 1869 | if [ -n "$CFG_ENABLE_CCACHE" ] && [ -n "$CFG_USING_CLANG" ] |
970d7e83 LB |
1870 | then |
1871 | CFG_CCACHE_CPP2=1 | |
1872 | putvar CFG_CCACHE_CPP2 | |
1873 | fi | |
1874 | ||
c1a9b12d | 1875 | if [ -n "$CFG_ENABLE_CCACHE" ] |
970d7e83 LB |
1876 | then |
1877 | CFG_CCACHE_BASEDIR=${CFG_SRC_DIR} | |
1878 | putvar CFG_CCACHE_BASEDIR | |
1879 | fi | |
1880 | ||
1881 | ||
223e47cc LB |
1882 | putvar CFG_LLVM_SRC_DIR |
1883 | ||
1a4d82fc | 1884 | for t in $CFG_HOST |
223e47cc LB |
1885 | do |
1886 | CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _) | |
1887 | CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _) | |
1888 | putvar $CFG_LLVM_BUILD_DIR | |
1889 | putvar $CFG_LLVM_INST_DIR | |
1890 | done | |
1891 | ||
476ff2be | 1892 | if [ -z "$CFG_DISABLE_RUSTBUILD" ] |
7453a54e SL |
1893 | then |
1894 | INPUT_MAKEFILE=src/bootstrap/mk/Makefile.in | |
1895 | else | |
1896 | INPUT_MAKEFILE=Makefile.in | |
1897 | fi | |
1898 | ||
223e47cc | 1899 | msg |
7453a54e | 1900 | copy_if_changed ${CFG_SRC_DIR}${INPUT_MAKEFILE} ./Makefile |
223e47cc LB |
1901 | move_if_changed config.tmp config.mk |
1902 | rm -f config.tmp | |
1903 | touch config.stamp | |
1904 | ||
9346a6ac AL |
1905 | if [ -z "$CFG_ENABLE_DEBUG" ]; then |
1906 | step_msg "configured in release mode. for development consider --enable-debug" | |
1907 | else | |
1908 | step_msg "complete" | |
1909 | fi | |
1910 | ||
476ff2be SL |
1911 | if [ "$CFG_SRC_DIR" = `pwd` ]; then |
1912 | X_PY=x.py | |
1913 | else | |
1914 | X_PY=${CFG_SRC_DIR_RELATIVE}x.py | |
1915 | fi | |
1916 | ||
1917 | if [ -z "$CFG_DISABLE_RUSTBUILD" ]; then | |
1918 | msg "NOTE you have now configured rust to use a rewritten build system" | |
1919 | msg " called rustbuild, and as a result this may have bugs that " | |
1920 | msg " you did not see before. If you experience any issues you can" | |
1921 | msg " go back to the old build system with --disable-rustbuild and" | |
1922 | msg " please feel free to report any bugs!" | |
1923 | msg "" | |
1924 | msg "run \`python ${X_PY} --help\`" | |
1925 | else | |
1926 | warn "the makefile-based build system is deprecated in favor of rustbuild" | |
1927 | msg "" | |
1928 | msg "It is recommended you avoid passing --disable-rustbuild to get your" | |
1929 | msg "build working as the makefiles will be deleted on 2017-02-02. If you" | |
1930 | msg "encounter bugs with rustbuild please file issues against rust-lang/rust" | |
1931 | msg "" | |
1932 | msg "run \`make help\`" | |
1933 | fi | |
1934 | ||
1a4d82fc | 1935 | msg |