about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbgermann <bgermann@users.noreply.github.com>2017-10-03 14:48:39 +0200
committerbgermann <bgermann@users.noreply.github.com>2017-10-03 14:48:39 +0200
commit80fe86f8c78b52f19aa36e8d9845ecdc77277e55 (patch)
tree75f19ea24a0a953eab020da12ffab190bfec8b3a
parent61bad301f136fb6f4cb543014ed02034007e4bd2 (diff)
downloadrust-80fe86f8c78b52f19aa36e8d9845ecdc77277e55.tar.gz
rust-80fe86f8c78b52f19aa36e8d9845ecdc77277e55.zip
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.
-rw-r--r--src/ci/docker/dist-solaris/Dockerfile29
-rwxr-xr-xsrc/ci/docker/dist-solaris/build-toolchain.sh114
-rw-r--r--src/tools/build-manifest/src/main.rs2
3 files changed, 145 insertions, 0 deletions
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 <LICENSE-APACHE or
+# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+# <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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",