]> git.proxmox.com Git - rustc.git/blob - src/ci/docker/dist-x86_64-freebsd/build-toolchain.sh
New upstream version 1.23.0+dfsg1
[rustc.git] / src / ci / docker / dist-x86_64-freebsd / build-toolchain.sh
1 #!/usr/bin/env bash
2 # Copyright 2016 The Rust Project Developers. See the COPYRIGHT
3 # file at the top-level directory of this distribution and at
4 # http://rust-lang.org/COPYRIGHT.
5 #
6 # Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7 # http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8 # <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
9 # option. This file may not be copied, modified, or distributed
10 # except according to those terms.
11
12 set -ex
13
14 ARCH=$1
15 BINUTILS=2.25.1
16 GCC=6.4.0
17
18 hide_output() {
19 set +x
20 on_err="
21 echo ERROR: An error was encountered with the build.
22 cat /tmp/build.log
23 exit 1
24 "
25 trap "$on_err" ERR
26 bash -c "while true; do sleep 30; echo \$(date) - building ...; done" &
27 PING_LOOP_PID=$!
28 $@ &> /tmp/build.log
29 trap - ERR
30 kill $PING_LOOP_PID
31 set -x
32 }
33
34 mkdir binutils
35 cd binutils
36
37 # First up, build binutils
38 curl https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS.tar.bz2 | tar xjf -
39 mkdir binutils-build
40 cd binutils-build
41 hide_output ../binutils-$BINUTILS/configure \
42 --target=$ARCH-unknown-freebsd10
43 hide_output make -j10
44 hide_output make install
45 cd ../..
46 rm -rf binutils
47
48 # Next, download the FreeBSD libc and relevant header files
49
50 mkdir freebsd
51 case "$ARCH" in
52 x86_64)
53 URL=ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.2-RELEASE/base.txz
54 ;;
55 i686)
56 URL=ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/10.2-RELEASE/base.txz
57 ;;
58 esac
59 curl $URL | tar xJf - -C freebsd ./usr/include ./usr/lib ./lib
60
61 dst=/usr/local/$ARCH-unknown-freebsd10
62
63 cp -r freebsd/usr/include $dst/
64 cp freebsd/usr/lib/crt1.o $dst/lib
65 cp freebsd/usr/lib/Scrt1.o $dst/lib
66 cp freebsd/usr/lib/crti.o $dst/lib
67 cp freebsd/usr/lib/crtn.o $dst/lib
68 cp freebsd/usr/lib/libc.a $dst/lib
69 cp freebsd/usr/lib/libutil.a $dst/lib
70 cp freebsd/usr/lib/libutil_p.a $dst/lib
71 cp freebsd/usr/lib/libm.a $dst/lib
72 cp freebsd/usr/lib/librt.so.1 $dst/lib
73 cp freebsd/usr/lib/libexecinfo.so.1 $dst/lib
74 cp freebsd/lib/libc.so.7 $dst/lib
75 cp freebsd/lib/libm.so.5 $dst/lib
76 cp freebsd/lib/libutil.so.9 $dst/lib
77 cp freebsd/lib/libthr.so.3 $dst/lib/libpthread.so
78
79 ln -s libc.so.7 $dst/lib/libc.so
80 ln -s libm.so.5 $dst/lib/libm.so
81 ln -s librt.so.1 $dst/lib/librt.so
82 ln -s libutil.so.9 $dst/lib/libutil.so
83 ln -s libexecinfo.so.1 $dst/lib/libexecinfo.so
84 rm -rf freebsd
85
86 # Finally, download and build gcc to target FreeBSD
87 mkdir gcc
88 cd gcc
89 curl https://ftp.gnu.org/gnu/gcc/gcc-$GCC/gcc-$GCC.tar.gz | tar xzf -
90 cd gcc-$GCC
91 ./contrib/download_prerequisites
92
93 mkdir ../gcc-build
94 cd ../gcc-build
95 hide_output ../gcc-$GCC/configure \
96 --enable-languages=c,c++ \
97 --target=$ARCH-unknown-freebsd10 \
98 --disable-multilib \
99 --disable-nls \
100 --disable-libgomp \
101 --disable-libquadmath \
102 --disable-libssp \
103 --disable-libvtv \
104 --disable-libcilkrts \
105 --disable-libada \
106 --disable-libsanitizer \
107 --disable-libquadmath-support \
108 --disable-lto
109 hide_output make -j10
110 hide_output make install
111 cd ../..
112 rm -rf gcc