From 80fe86f8c78b52f19aa36e8d9845ecdc77277e55 Mon Sep 17 00:00:00 2001 From: bgermann Date: Tue, 3 Oct 2017 14:48:39 +0200 Subject: [PATCH 1/7] Add build environment for Solaris This can be used to build rust-std. The dilos illumos distribution was chosen, because illumos is free software as opposed to Oracle Solaris and dilos is the only illumos distribution that supports x86_64 and sparcv9 at the same level. --- src/ci/docker/dist-solaris/Dockerfile | 29 +++++ src/ci/docker/dist-solaris/build-toolchain.sh | 114 ++++++++++++++++++ src/tools/build-manifest/src/main.rs | 2 + 3 files changed, 145 insertions(+) create mode 100644 src/ci/docker/dist-solaris/Dockerfile create mode 100755 src/ci/docker/dist-solaris/build-toolchain.sh diff --git a/src/ci/docker/dist-solaris/Dockerfile b/src/ci/docker/dist-solaris/Dockerfile new file mode 100644 index 00000000000..a60c9956b75 --- /dev/null +++ b/src/ci/docker/dist-solaris/Dockerfile @@ -0,0 +1,29 @@ +FROM ubuntu:16.04 + +COPY scripts/cross-apt-packages.sh /scripts/ +RUN sh /scripts/cross-apt-packages.sh + +RUN apt-get install -y --no-install-recommends \ + software-properties-common libgmp-dev libmpfr-dev libmpc-dev libisl-dev +RUN apt-key adv --batch --yes --keyserver keyserver.ubuntu.com --recv-keys 74DA7924C5513486 +RUN add-apt-repository -y 'deb http://apt.dilos.org/dilos dilos2-testing main' + +COPY dist-solaris/build-toolchain.sh /tmp/ +RUN /tmp/build-toolchain.sh x86_64 amd64 solaris-i386 +RUN /tmp/build-toolchain.sh sparcv9 sparcv9 solaris-sparc + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +ENV \ + AR_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-ar \ + CC_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-sysroot \ + CXX_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-g++ \ + AR_x86_64_sun_solaris=x86_64-sun-solaris2.11-ar \ + CC_x86_64_sun_solaris=x86_64-sun-solaris2.11-sysroot \ + CXX_x86_64_sun_solaris=x86_64-sun-solaris2.11-g++ + +ENV TARGETS=sparcv9-sun-solaris,x86_64-sun-solaris + +ENV RUST_CONFIGURE_ARGS --target=$TARGETS --enable-extended +ENV SCRIPT python2.7 ../x.py dist --target $TARGETS diff --git a/src/ci/docker/dist-solaris/build-toolchain.sh b/src/ci/docker/dist-solaris/build-toolchain.sh new file mode 100755 index 00000000000..c0d839a5fb7 --- /dev/null +++ b/src/ci/docker/dist-solaris/build-toolchain.sh @@ -0,0 +1,114 @@ +#!/bin/bash +# Copyright 2016 The Rust Project Developers. See the COPYRIGHT +# file at the top-level directory of this distribution and at +# http://rust-lang.org/COPYRIGHT. +# +# Licensed under the Apache License, Version 2.0 or the MIT license +# , at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +set -ex + +ARCH=$1 +LIB_ARCH=$2 +APT_ARCH=$3 +BINUTILS=2.28.1 +GCC=6.4.0 + +hide_output() { + set +x + on_err=" +echo ERROR: An error was encountered with the build. +cat /tmp/build.log +exit 1 +" + trap "$on_err" ERR + bash -c "while true; do sleep 30; echo \$(date) - building ...; done" & + PING_LOOP_PID=$! + $@ &> /tmp/build.log + trap - ERR + kill $PING_LOOP_PID + set -x +} + +# First up, build binutils +mkdir binutils +cd binutils + +curl https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS.tar.xz | tar xJf - +mkdir binutils-build +cd binutils-build +hide_output ../binutils-$BINUTILS/configure --target=$ARCH-sun-solaris2.11 +hide_output make -j10 +hide_output make install + +cd ../.. +rm -rf binutils + +# Next, download and install the relevant solaris packages +mkdir solaris +cd solaris + +dpkg --add-architecture $APT_ARCH +apt-get update +apt-get download \ + libc:$APT_ARCH \ + libc-dev:$APT_ARCH \ + libm:$APT_ARCH \ + libm-dev:$APT_ARCH \ + libpthread:$APT_ARCH \ + libpthread-dev:$APT_ARCH \ + librt:$APT_ARCH \ + librt-dev:$APT_ARCH \ + system-crt:$APT_ARCH \ + system-header:$APT_ARCH + +for deb in *$APT_ARCH.deb; do + dpkg -x $deb . +done + +mkdir /usr/local/$ARCH-sun-solaris2.11/usr +mv usr/include /usr/local/$ARCH-sun-solaris2.11/usr/include +mv usr/lib/$LIB_ARCH/* /usr/local/$ARCH-sun-solaris2.11/lib +mv lib/$LIB_ARCH/* /usr/local/$ARCH-sun-solaris2.11/lib + +ln -s /usr/local/$ARCH-sun-solaris2.11/usr/include /usr/local/$ARCH-sun-solaris2.11/sys-include +ln -s /usr/local/$ARCH-sun-solaris2.11/usr/include /usr/local/$ARCH-sun-solaris2.11/include + +cd .. +rm -rf solaris + +# Finally, download and build gcc to target solaris +mkdir gcc +cd gcc + +curl https://ftp.gnu.org/gnu/gcc/gcc-$GCC/gcc-$GCC.tar.xz | tar xJf - +cd gcc-$GCC + +mkdir ../gcc-build +cd ../gcc-build +hide_output ../gcc-$GCC/configure \ + --enable-languages=c,c++ \ + --target=$ARCH-sun-solaris2.11 \ + --with-gnu-as \ + --with-gnu-ld \ + --disable-multilib \ + --disable-nls \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libcilkrts \ + --disable-libada \ + --disable-libsanitizer \ + --disable-libquadmath-support \ + --disable-lto \ + --with-sysroot=/usr/local/$ARCH-sun-solaris2.11 + +hide_output make -j10 +hide_output make install + +cd ../.. +rm -rf gcc diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs index db957a7a0fc..daeac35a017 100644 --- a/src/tools/build-manifest/src/main.rs +++ b/src/tools/build-manifest/src/main.rs @@ -83,6 +83,7 @@ static TARGETS: &'static [&'static str] = &[ "powerpc64le-unknown-linux-gnu", "s390x-unknown-linux-gnu", "sparc64-unknown-linux-gnu", + "sparcv9-sun-solaris", "wasm32-unknown-emscripten", "x86_64-linux-android", "x86_64-apple-darwin", @@ -90,6 +91,7 @@ static TARGETS: &'static [&'static str] = &[ "x86_64-pc-windows-gnu", "x86_64-pc-windows-msvc", "x86_64-rumprun-netbsd", + "x86_64-sun-solaris", "x86_64-unknown-freebsd", "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", From a82891ab5cca30515807fb799f9d9f08fa998d08 Mon Sep 17 00:00:00 2001 From: bgermann Date: Thu, 5 Oct 2017 00:40:36 +0200 Subject: [PATCH 2/7] Rename dist-fuchsia builder to cross2 --- src/ci/docker/{dist-fuchsia => cross2}/Dockerfile | 0 .../build-toolchain.sh => cross2/build-fuchsia-toolchain.sh} | 0 src/ci/docker/{dist-fuchsia => cross2}/shared.sh | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename src/ci/docker/{dist-fuchsia => cross2}/Dockerfile (100%) rename src/ci/docker/{dist-fuchsia/build-toolchain.sh => cross2/build-fuchsia-toolchain.sh} (100%) rename src/ci/docker/{dist-fuchsia => cross2}/shared.sh (100%) diff --git a/src/ci/docker/dist-fuchsia/Dockerfile b/src/ci/docker/cross2/Dockerfile similarity index 100% rename from src/ci/docker/dist-fuchsia/Dockerfile rename to src/ci/docker/cross2/Dockerfile diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/cross2/build-fuchsia-toolchain.sh similarity index 100% rename from src/ci/docker/dist-fuchsia/build-toolchain.sh rename to src/ci/docker/cross2/build-fuchsia-toolchain.sh diff --git a/src/ci/docker/dist-fuchsia/shared.sh b/src/ci/docker/cross2/shared.sh similarity index 100% rename from src/ci/docker/dist-fuchsia/shared.sh rename to src/ci/docker/cross2/shared.sh From 4e69d2e3eb66ed3c5c68c22561015052df1293cb Mon Sep 17 00:00:00 2001 From: bgermann Date: Thu, 5 Oct 2017 01:22:30 +0200 Subject: [PATCH 3/7] Merge dist-solaris with cross2 builder --- .travis.yml | 4 +- src/ci/docker/cross2/Dockerfile | 43 ++++++++++++------- .../build-solaris-toolchain.sh} | 17 +------- src/ci/docker/dist-solaris/Dockerfile | 29 ------------- 4 files changed, 30 insertions(+), 63 deletions(-) rename src/ci/docker/{dist-solaris/build-toolchain.sh => cross2/build-solaris-toolchain.sh} (89%) delete mode 100644 src/ci/docker/dist-solaris/Dockerfile diff --git a/.travis.yml b/.travis.yml index 9e3225a103a..139f06ec570 100644 --- a/.travis.yml +++ b/.travis.yml @@ -115,6 +115,8 @@ matrix: if: branch = auto - env: IMAGE=cross DEPLOY=1 if: branch = auto + - env: IMAGE=cross2 DEPLOY=1 + if: branch = auto - env: IMAGE=dist-aarch64-linux DEPLOY=1 if: branch = auto - env: IMAGE=dist-android DEPLOY=1 @@ -125,8 +127,6 @@ matrix: if: branch = auto - env: IMAGE=dist-armv7-linux DEPLOY=1 if: branch = auto - - env: IMAGE=dist-fuchsia DEPLOY=1 - if: branch = auto - env: IMAGE=dist-i586-gnu-i686-musl DEPLOY=1 if: branch = auto - env: IMAGE=dist-i686-freebsd DEPLOY=1 diff --git a/src/ci/docker/cross2/Dockerfile b/src/ci/docker/cross2/Dockerfile index bcd95924b42..6f854197191 100644 --- a/src/ci/docker/cross2/Dockerfile +++ b/src/ci/docker/cross2/Dockerfile @@ -1,27 +1,30 @@ FROM ubuntu:16.04 -RUN apt-get update && apt-get build-dep -y clang llvm && apt-get install -y \ +COPY scripts/cross-apt-packages.sh /scripts/ +RUN sh /scripts/cross-apt-packages.sh + +RUN apt-get build-dep -y clang llvm && apt-get install -y --no-install-recommends \ build-essential \ - bzip2 \ - ca-certificates \ - cmake \ - curl \ - file \ - g++ \ - gdb \ - git \ libedit-dev \ - make \ + libgmp-dev \ + libisl-dev \ + libmpc-dev \ + libmpfr-dev \ ninja-build \ nodejs \ python2.7-dev \ - sudo \ - xz-utils \ + software-properties-common \ unzip +RUN apt-key adv --batch --yes --keyserver keyserver.ubuntu.com --recv-keys 74DA7924C5513486 +RUN add-apt-repository -y 'deb http://apt.dilos.org/dilos dilos2-testing main' + WORKDIR /tmp -COPY dist-fuchsia/shared.sh dist-fuchsia/build-toolchain.sh /tmp/ -RUN /tmp/build-toolchain.sh +COPY cross2/shared.sh cross2/build-fuchsia-toolchain.sh /tmp/ +COPY cross2/build-solaris-toolchain.sh /tmp/ +RUN /tmp/build-fuchsia-toolchain.sh +RUN /tmp/build-solaris-toolchain.sh x86_64 amd64 solaris-i386 +RUN /tmp/build-solaris-toolchain.sh sparcv9 sparcv9 solaris-sparc COPY scripts/sccache.sh /scripts/ RUN sh /scripts/sccache.sh @@ -32,10 +35,18 @@ ENV \ CXX_x86_64_unknown_fuchsia=x86_64-unknown-fuchsia-clang++ \ AR_aarch64_unknown_fuchsia=aarch64-unknown-fuchsia-ar \ CC_aarch64_unknown_fuchsia=aarch64-unknown-fuchsia-clang \ - CXX_aarch64_unknown_fuchsia=aarch64-unknown-fuchsia-clang++ + CXX_aarch64_unknown_fuchsia=aarch64-unknown-fuchsia-clang++ \ + AR_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-ar \ + CC_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-sysroot \ + CXX_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-g++ \ + AR_x86_64_sun_solaris=x86_64-sun-solaris2.11-ar \ + CC_x86_64_sun_solaris=x86_64-sun-solaris2.11-sysroot \ + CXX_x86_64_sun_solaris=x86_64-sun-solaris2.11-g++ ENV TARGETS=x86_64-unknown-fuchsia ENV TARGETS=$TARGETS,aarch64-unknown-fuchsia +ENV TARGETS=$TARGETS,sparcv9-sun-solaris +ENV TARGETS=$TARGETS,x86_64-sun-solaris ENV RUST_CONFIGURE_ARGS --target=$TARGETS --enable-extended -ENV SCRIPT python2.7 ../x.py dist --target $TARGETS \ No newline at end of file +ENV SCRIPT python2.7 ../x.py dist --target $TARGETS diff --git a/src/ci/docker/dist-solaris/build-toolchain.sh b/src/ci/docker/cross2/build-solaris-toolchain.sh similarity index 89% rename from src/ci/docker/dist-solaris/build-toolchain.sh rename to src/ci/docker/cross2/build-solaris-toolchain.sh index c0d839a5fb7..4ff26b5dfab 100755 --- a/src/ci/docker/dist-solaris/build-toolchain.sh +++ b/src/ci/docker/cross2/build-solaris-toolchain.sh @@ -10,6 +10,7 @@ # except according to those terms. set -ex +source shared.sh ARCH=$1 LIB_ARCH=$2 @@ -17,22 +18,6 @@ APT_ARCH=$3 BINUTILS=2.28.1 GCC=6.4.0 -hide_output() { - set +x - on_err=" -echo ERROR: An error was encountered with the build. -cat /tmp/build.log -exit 1 -" - trap "$on_err" ERR - bash -c "while true; do sleep 30; echo \$(date) - building ...; done" & - PING_LOOP_PID=$! - $@ &> /tmp/build.log - trap - ERR - kill $PING_LOOP_PID - set -x -} - # First up, build binutils mkdir binutils cd binutils diff --git a/src/ci/docker/dist-solaris/Dockerfile b/src/ci/docker/dist-solaris/Dockerfile deleted file mode 100644 index a60c9956b75..00000000000 --- a/src/ci/docker/dist-solaris/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM ubuntu:16.04 - -COPY scripts/cross-apt-packages.sh /scripts/ -RUN sh /scripts/cross-apt-packages.sh - -RUN apt-get install -y --no-install-recommends \ - software-properties-common libgmp-dev libmpfr-dev libmpc-dev libisl-dev -RUN apt-key adv --batch --yes --keyserver keyserver.ubuntu.com --recv-keys 74DA7924C5513486 -RUN add-apt-repository -y 'deb http://apt.dilos.org/dilos dilos2-testing main' - -COPY dist-solaris/build-toolchain.sh /tmp/ -RUN /tmp/build-toolchain.sh x86_64 amd64 solaris-i386 -RUN /tmp/build-toolchain.sh sparcv9 sparcv9 solaris-sparc - -COPY scripts/sccache.sh /scripts/ -RUN sh /scripts/sccache.sh - -ENV \ - AR_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-ar \ - CC_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-sysroot \ - CXX_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-g++ \ - AR_x86_64_sun_solaris=x86_64-sun-solaris2.11-ar \ - CC_x86_64_sun_solaris=x86_64-sun-solaris2.11-sysroot \ - CXX_x86_64_sun_solaris=x86_64-sun-solaris2.11-g++ - -ENV TARGETS=sparcv9-sun-solaris,x86_64-sun-solaris - -ENV RUST_CONFIGURE_ARGS --target=$TARGETS --enable-extended -ENV SCRIPT python2.7 ../x.py dist --target $TARGETS From a78ce0738147932a2bf0e7bcf0346ac1214d7154 Mon Sep 17 00:00:00 2001 From: bgermann Date: Thu, 5 Oct 2017 13:48:34 +0200 Subject: [PATCH 4/7] Fix CC for solaris environments --- src/ci/docker/cross2/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ci/docker/cross2/Dockerfile b/src/ci/docker/cross2/Dockerfile index 6f854197191..f5fc06767ce 100644 --- a/src/ci/docker/cross2/Dockerfile +++ b/src/ci/docker/cross2/Dockerfile @@ -37,10 +37,10 @@ ENV \ CC_aarch64_unknown_fuchsia=aarch64-unknown-fuchsia-clang \ CXX_aarch64_unknown_fuchsia=aarch64-unknown-fuchsia-clang++ \ AR_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-ar \ - CC_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-sysroot \ + CC_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-gcc \ CXX_sparcv9_sun_solaris=sparcv9-sun-solaris2.11-g++ \ AR_x86_64_sun_solaris=x86_64-sun-solaris2.11-ar \ - CC_x86_64_sun_solaris=x86_64-sun-solaris2.11-sysroot \ + CC_x86_64_sun_solaris=x86_64-sun-solaris2.11-gcc \ CXX_x86_64_sun_solaris=x86_64-sun-solaris2.11-g++ ENV TARGETS=x86_64-unknown-fuchsia From 9bff9e0ce908bef7167d5eb5e0a12b85ee76cd5e Mon Sep 17 00:00:00 2001 From: bgermann Date: Thu, 5 Oct 2017 17:21:28 +0200 Subject: [PATCH 5/7] delete 'if: branch = auto' for cross2 builder --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 139f06ec570..57ad3acde4d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -116,7 +116,6 @@ matrix: - env: IMAGE=cross DEPLOY=1 if: branch = auto - env: IMAGE=cross2 DEPLOY=1 - if: branch = auto - env: IMAGE=dist-aarch64-linux DEPLOY=1 if: branch = auto - env: IMAGE=dist-android DEPLOY=1 From 724dd4653624a881f1399172f999347432be948c Mon Sep 17 00:00:00 2001 From: bgermann Date: Thu, 5 Oct 2017 19:05:19 +0200 Subject: [PATCH 6/7] Add libsocket and libresolv to Solaris builder --- src/ci/docker/cross2/build-solaris-toolchain.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ci/docker/cross2/build-solaris-toolchain.sh b/src/ci/docker/cross2/build-solaris-toolchain.sh index 4ff26b5dfab..ae84cc62b60 100755 --- a/src/ci/docker/cross2/build-solaris-toolchain.sh +++ b/src/ci/docker/cross2/build-solaris-toolchain.sh @@ -45,8 +45,12 @@ apt-get download \ libm-dev:$APT_ARCH \ libpthread:$APT_ARCH \ libpthread-dev:$APT_ARCH \ + libresolv:$APT_ARCH \ + libresolv-dev:$APT_ARCH \ librt:$APT_ARCH \ librt-dev:$APT_ARCH \ + libsocket:$APT_ARCH \ + libsocket-dev:$APT_ARCH \ system-crt:$APT_ARCH \ system-header:$APT_ARCH From dba52ff9cd8fa77545221d84dcef6d7ca624dd00 Mon Sep 17 00:00:00 2001 From: bgermann Date: Thu, 5 Oct 2017 20:42:27 +0200 Subject: [PATCH 7/7] restore 'if: branch = auto' for cross2 builder --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 57ad3acde4d..139f06ec570 100644 --- a/.travis.yml +++ b/.travis.yml @@ -116,6 +116,7 @@ matrix: - env: IMAGE=cross DEPLOY=1 if: branch = auto - env: IMAGE=cross2 DEPLOY=1 + if: branch = auto - env: IMAGE=dist-aarch64-linux DEPLOY=1 if: branch = auto - env: IMAGE=dist-android DEPLOY=1