--- /dev/null
+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}
--- /dev/null
+#!/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 <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 -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