diff --git a/.travis.yml b/.travis.yml index 6e242b74894..1642a399552 100644 --- a/.travis.yml +++ b/.travis.yml @@ -126,6 +126,8 @@ matrix: if: branch = auto - env: IMAGE=dist-armv7-linux DEPLOY=1 if: branch = auto + - env: IMAGE=dist-cloudabi DEPLOY=1 + if: branch = auto - env: IMAGE=dist-i586-gnu-i586-i686-musl DEPLOY=1 if: branch = auto - env: IMAGE=dist-i686-freebsd DEPLOY=1 diff --git a/src/ci/docker/dist-cloudabi/Dockerfile b/src/ci/docker/dist-cloudabi/Dockerfile new file mode 100644 index 00000000000..f1f6f0ff6ca --- /dev/null +++ b/src/ci/docker/dist-cloudabi/Dockerfile @@ -0,0 +1,30 @@ +FROM ubuntu:17.10 + +ENV TARGETS=aarch64-unknown-cloudabi +# FIXME(EdSchouten): Enable ARMv7 support once libc ≥0.2.37 has been merged. +# ENV TARGETS=armv7-unknown-cloudabi-eabihf +ENV TARGETS=$TARGETS,i686-unknown-cloudabi +ENV TARGETS=$TARGETS,x86_64-unknown-cloudabi + +COPY scripts/cloudabi-toolchain.sh /tmp/ +RUN /tmp/cloudabi-toolchain.sh + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +# FIXME(EdSchouten): Remove this once cc ≥1.0.4 has been merged. It can +# automatically pick the right compiler path. +ENV \ + AR_aarch64_unknown_cloudabi=aarch64-unknown-cloudabi-ar \ + CC_aarch64_unknown_cloudabi=aarch64-unknown-cloudabi-clang \ + CXX_aarch64_unknown_cloudabi=aarch64-unknown-cloudabi-clang++ \ + AR_i686_unknown_cloudabi=i686-unknown-cloudabi-ar \ + CC_i686_unknown_cloudabi=i686-unknown-cloudabi-clang \ + CXX_i686_unknown_cloudabi=i686-unknown-cloudabi-clang++ \ + AR_x86_64_unknown_cloudabi=x86_64-unknown-cloudabi-ar \ + CC_x86_64_unknown_cloudabi=x86_64-unknown-cloudabi-clang \ + CXX_x86_64_unknown_cloudabi=x86_64-unknown-cloudabi-clang++ + +# FIXME(EdSchouten): Work towards being able to run 'x.py test'. +ENV RUST_CONFIGURE_ARGS --target=${TARGETS} --disable-jemalloc +ENV SCRIPT python2.7 /checkout/x.py dist --target ${TARGETS} diff --git a/src/ci/docker/scripts/cloudabi-toolchain.sh b/src/ci/docker/scripts/cloudabi-toolchain.sh new file mode 100755 index 00000000000..5d6ecb48d3c --- /dev/null +++ b/src/ci/docker/scripts/cloudabi-toolchain.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Copyright 2018 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 -eux + +# Install prerequisites. +apt-get update +apt-get install -y --no-install-recommends \ + apt-transport-https \ + ca-certificates \ + clang-5.0 \ + cmake \ + curl \ + file \ + g++ \ + gdb \ + git \ + lld-5.0 \ + make \ + python \ + sudo \ + xz-utils + +# Set up a Clang-based cross compiler toolchain. +# Based on the steps described at https://nuxi.nl/cloudabi/debian/ +IFS=, +for target in ${TARGETS}; do + for tool in ar nm objdump ranlib size; do + ln -s ../lib/llvm-5.0/bin/llvm-${tool} /usr/bin/${target}-${tool} + done + ln -s ../lib/llvm-5.0/bin/clang /usr/bin/${target}-cc + ln -s ../lib/llvm-5.0/bin/clang /usr/bin/${target}-c++ + ln -s ../lib/llvm-5.0/bin/lld /usr/bin/${target}-ld + ln -s ../../${target} /usr/lib/llvm-5.0/${target} + + # FIXME(EdSchouten): Remove this once cc ≥1.0.4 has been merged. It + # can make use of ${target}-cc and ${target}-c++, without incorrectly + # assuming it's MSVC. + ln -s ../lib/llvm-5.0/bin/clang /usr/bin/${target}-clang + ln -s ../lib/llvm-5.0/bin/clang /usr/bin/${target}-clang++ +done + +# Install the C++ runtime libraries from CloudABI Ports. +echo deb https://nuxi.nl/distfiles/cloudabi-ports/debian/ cloudabi cloudabi > \ + /etc/apt/sources.list.d/cloudabi.list +curl 'https://pgp.mit.edu/pks/lookup?op=get&search=0x0DA51B8531344B15' | \ + apt-key add - +apt-get update +for target in ${TARGETS}; do + apt-get install -y $(echo ${target} | sed -e s/_/-/g)-cxx-runtime +done