mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-02 07:22:42 +00:00
c6daea7c9a
This commit introduces a separately compiled backend for Emscripten, avoiding compiling the `JSBackend` target in the main LLVM codegen backend. This builds on the foundation provided by #47671 to create a new codegen backend dedicated solely to Emscripten, removing the `JSBackend` of the main codegen backend in the process. A new field was added to each target for this commit which specifies the backend to use for translation, the default being `llvm` which is the main backend that we use. The Emscripten targets specify an `emscripten` backend instead of the main `llvm` one. There's a whole bunch of consequences of this change, but I'll try to enumerate them here: * A *second* LLVM submodule was added in this commit. The main LLVM submodule will soon start to drift from the Emscripten submodule, but currently they're both at the same revision. * Logic was added to rustbuild to *not* build the Emscripten backend by default. This is gated behind a `--enable-emscripten` flag to the configure script. By default users should neither check out the emscripten submodule nor compile it. * The `init_repo.sh` script was updated to fetch the Emscripten submodule from GitHub the same way we do the main LLVM submodule (a tarball fetch). * The Emscripten backend, turned off by default, is still turned on for a number of targets on CI. We'll only be shipping an Emscripten backend with Tier 1 platforms, though. All cross-compiled platforms will not be receiving an Emscripten backend yet. This commit means that when you download the `rustc` package in Rustup for Tier 1 platforms you'll be receiving two trans backends, one for Emscripten and one that's the general LLVM backend. If you never compile for Emscripten you'll never use the Emscripten backend, so we may update this one day to only download the Emscripten backend when you add the Emscripten target. For now though it's just an extra 10MB gzip'd. Closes #46819
379 lines
13 KiB
YAML
379 lines
13 KiB
YAML
language: shell
|
|
sudo: required
|
|
dist: trusty
|
|
services:
|
|
- docker
|
|
|
|
git:
|
|
depth: 2
|
|
submodules: false
|
|
|
|
matrix:
|
|
fast_finish: true
|
|
include:
|
|
# Images used in testing PR and try-build should be run first.
|
|
- env: IMAGE=x86_64-gnu-llvm-3.9 RUST_BACKTRACE=1
|
|
if: type = pull_request OR branch = auto
|
|
|
|
- env: IMAGE=dist-x86_64-linux DEPLOY=1
|
|
if: branch = try OR branch = auto
|
|
|
|
# "alternate" deployments, these are "nightlies" but have LLVM assertions
|
|
# turned on, they're deployed to a different location primarily for
|
|
# additional testing.
|
|
- env: IMAGE=dist-x86_64-linux DEPLOY_ALT=1
|
|
if: branch = try OR branch = auto
|
|
|
|
- env: >
|
|
RUST_CHECK_TARGET=dist
|
|
RUST_CONFIGURE_ARGS="--enable-extended --enable-profiler"
|
|
SRC=.
|
|
DEPLOY_ALT=1
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
SCCACHE_ERROR_LOG=/tmp/sccache.log
|
|
MACOSX_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
os: osx
|
|
osx_image: xcode7.3
|
|
if: branch = auto
|
|
|
|
# macOS builders. These are placed near the beginning because they are very
|
|
# slow to run.
|
|
|
|
# OSX builders running tests, these run the full test suite.
|
|
#
|
|
# Note that the compiler is compiled to target 10.8 here because the Xcode
|
|
# version that we're using, 8.2, cannot compile LLVM for OSX 10.7.
|
|
- env: >
|
|
RUST_CHECK_TARGET=check
|
|
RUST_CONFIGURE_ARGS="--build=x86_64-apple-darwin --enable-sanitizers --enable-profiler"
|
|
SRC=.
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
SCCACHE_ERROR_LOG=/tmp/sccache.log
|
|
MACOSX_DEPLOYMENT_TARGET=10.8
|
|
MACOSX_STD_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
os: osx
|
|
osx_image: xcode8.3
|
|
if: branch = auto
|
|
|
|
- env: >
|
|
RUST_CHECK_TARGET=check
|
|
RUST_CONFIGURE_ARGS=--build=i686-apple-darwin
|
|
SRC=.
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
SCCACHE_ERROR_LOG=/tmp/sccache.log
|
|
MACOSX_DEPLOYMENT_TARGET=10.8
|
|
MACOSX_STD_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
os: osx
|
|
osx_image: xcode8.3
|
|
if: branch = auto
|
|
|
|
# OSX builders producing releases. These do not run the full test suite and
|
|
# just produce a bunch of artifacts.
|
|
#
|
|
# Note that these are running in the `xcode7` image instead of the
|
|
# `xcode8.2` image as above. That's because we want to build releases for
|
|
# OSX 10.7 and `xcode7` is the latest Xcode able to compile LLVM for 10.7.
|
|
- env: >
|
|
RUST_CHECK_TARGET=dist
|
|
RUST_CONFIGURE_ARGS="--build=i686-apple-darwin --enable-extended --enable-profiler --enable-emscripten"
|
|
SRC=.
|
|
DEPLOY=1
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
SCCACHE_ERROR_LOG=/tmp/sccache.log
|
|
MACOSX_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
os: osx
|
|
osx_image: xcode7.3
|
|
if: branch = auto
|
|
|
|
- env: >
|
|
RUST_CHECK_TARGET=dist
|
|
RUST_CONFIGURE_ARGS="--target=aarch64-apple-ios,armv7-apple-ios,armv7s-apple-ios,i386-apple-ios,x86_64-apple-ios --enable-extended --enable-sanitizers --enable-profiler --enable-emscripten"
|
|
SRC=.
|
|
DEPLOY=1
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
SCCACHE_ERROR_LOG=/tmp/sccache.log
|
|
MACOSX_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
os: osx
|
|
osx_image: xcode7.3
|
|
if: branch = auto
|
|
|
|
# Linux builders, remaining docker images
|
|
- env: IMAGE=arm-android
|
|
if: branch = auto
|
|
- env: IMAGE=armhf-gnu
|
|
if: branch = auto
|
|
- env: IMAGE=dist-various-1 DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-various-2 DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-aarch64-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-android DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-arm-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-armhf-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-armv7-linux 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
|
|
if: branch = auto
|
|
- env: IMAGE=dist-i686-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-mips-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-mips64-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-mips64el-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-mipsel-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-powerpc-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-powerpc64-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-powerpc64le-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-s390x-linux DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-x86_64-freebsd DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-x86_64-musl DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-x86_64-netbsd DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=asmjs
|
|
if: branch = auto
|
|
- env: IMAGE=i686-gnu
|
|
if: branch = auto
|
|
- env: IMAGE=i686-gnu-nopt
|
|
if: branch = auto
|
|
- env: IMAGE=wasm32-unknown
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu-full-bootstrap
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu-aux
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu-tools
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu-debug
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu-nopt
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu-distcheck
|
|
if: branch = auto
|
|
- env: IMAGE=x86_64-gnu-incremental
|
|
if: branch = auto
|
|
|
|
- stage: publish toolstate
|
|
if: branch = master AND type = push
|
|
before_install: []
|
|
install: []
|
|
cache: false
|
|
sudo: false
|
|
script:
|
|
MESSAGE_FILE=$(mktemp -t msg.XXXXXX);
|
|
. src/ci/docker/x86_64-gnu-tools/repo.sh;
|
|
commit_toolstate_change "$MESSAGE_FILE" "$TRAVIS_BUILD_DIR/src/tools/publish_toolstate.py" "$(git rev-parse HEAD)" "$(git log --format=%s -n1 HEAD)" "$MESSAGE_FILE"
|
|
|
|
env:
|
|
global:
|
|
- SCCACHE_BUCKET=rust-lang-ci-sccache2
|
|
- SCCACHE_REGION=us-west-1
|
|
- AWS_ACCESS_KEY_ID=AKIAJAMV3QAMMA6AXHFQ
|
|
# AWS_SECRET_ACCESS_KEY=...
|
|
- secure: "j96XxTVOSUf4s4r4htIxn/fvIa5DWbMgLqWl7r8z2QfgUwscmkMXAwXuFNc7s7bGTpV/+CgDiMFFM6BAFLGKutytIF6oA02s9b+usQYnM0th7YQ2AIgm9GtMTJCJp4AoyfFmh8F2faUICBZlfVLUJ34udHEe35vOklix+0k4WDo="
|
|
# TOOLSTATE_REPO_ACCESS_TOKEN=...
|
|
- secure: "cFh8thThqEJLC98XKI5pfqflUzOlxsYPRW20AWRaYOOgYHPTiGWypTXiPbGSKaeAXTZoOA+DpQtEmefc0U6lt9dHc7a/MIaK6isFurjlnKYiLOeTruzyu1z7PWCeZ/jKXsU2RK/88DBtlNwfMdaMIeuKj14IVfpepPPL71ETbuk="
|
|
|
|
before_install:
|
|
- zcat $HOME/docker/rust-ci.tar.gz | docker load || true
|
|
- mkdir -p $HOME/rustsrc
|
|
# FIXME(#46924): these two commands are required to enable IPv6,
|
|
# they shouldn't exist, please revert once more official solutions appeared.
|
|
# see https://github.com/travis-ci/travis-ci/issues/8891#issuecomment-353403729
|
|
- if [ "$TRAVIS_OS_NAME" = linux ]; then
|
|
echo '{"ipv6":true,"fixed-cidr-v6":"fd9a:8454:6789:13f7::/64"}' | sudo tee /etc/docker/daemon.json;
|
|
sudo service docker restart;
|
|
fi
|
|
|
|
install:
|
|
- case "$TRAVIS_OS_NAME" in
|
|
linux)
|
|
travis_retry curl -fo $HOME/stamp https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-03-17-stamp-x86_64-unknown-linux-musl &&
|
|
chmod +x $HOME/stamp &&
|
|
export PATH=$PATH:$HOME
|
|
;;
|
|
osx)
|
|
if [[ "$RUST_CHECK_TARGET" == dist ]]; then
|
|
travis_retry brew update &&
|
|
travis_retry brew install xz;
|
|
fi &&
|
|
travis_retry curl -fo /usr/local/bin/sccache https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-05-12-sccache-x86_64-apple-darwin &&
|
|
chmod +x /usr/local/bin/sccache &&
|
|
travis_retry curl -fo /usr/local/bin/stamp https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-03-17-stamp-x86_64-apple-darwin &&
|
|
chmod +x /usr/local/bin/stamp
|
|
;;
|
|
esac
|
|
|
|
before_script:
|
|
- >
|
|
echo "#### Disk usage before running script:";
|
|
df -h;
|
|
du . | sort -nr | head -n100
|
|
- >
|
|
RUN_SCRIPT="src/ci/init_repo.sh . $HOME/rustsrc";
|
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|
export RUN_SCRIPT="$RUN_SCRIPT && src/ci/run.sh";
|
|
else
|
|
export RUN_SCRIPT="$RUN_SCRIPT && src/ci/docker/run.sh $IMAGE";
|
|
fi
|
|
|
|
# Log time information from this machine and an external machine for insight into possible
|
|
# clock drift. Timezones don't matter since relative deltas give all the necessary info.
|
|
script:
|
|
- >
|
|
date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
|
|
- stamp sh -x -c "$RUN_SCRIPT"
|
|
- >
|
|
date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
|
|
|
|
after_success:
|
|
- >
|
|
echo "#### Build successful; Disk usage after running script:";
|
|
df -h;
|
|
du . | sort -nr | head -n100
|
|
|
|
after_failure:
|
|
- >
|
|
echo "#### Build failed; Disk usage after running script:";
|
|
df -h;
|
|
du . | sort -nr | head -n100
|
|
|
|
# One of these is the linux sccache log, one is the OSX sccache log. Instead
|
|
# of worrying about what system we are just cat both. One of these commands
|
|
# will fail but that's ok, they'll both get executed.
|
|
- cat obj/tmp/sccache.log
|
|
- cat /tmp/sccache.log
|
|
|
|
# Random attempt at debugging currently. Just poking around in here to see if
|
|
# anything shows up.
|
|
- ls -lat $HOME/Library/Logs/DiagnosticReports/
|
|
- find $HOME/Library/Logs/DiagnosticReports
|
|
-type f
|
|
-not -name '*.stage2-*.crash'
|
|
-not -name 'com.apple.CoreSimulator.CoreSimulatorService-*.crash'
|
|
-exec printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" {} \;
|
|
-exec head -750 {} \;
|
|
-exec echo travis_fold":"end:crashlog \;
|
|
|
|
# attempt to debug anything killed by the oom killer on linux, just to see if
|
|
# it happened
|
|
- dmesg | grep -i kill
|
|
|
|
# Save tagged docker images we created and load them if they're available
|
|
# Travis saves caches whether the build failed or not, nuke rustsrc if
|
|
# the failure was while updating it (as it may be in a bad state)
|
|
# https://github.com/travis-ci/travis-ci/issues/4472
|
|
before_cache:
|
|
- docker history -q rust-ci |
|
|
grep -v missing |
|
|
xargs docker save |
|
|
gzip > $HOME/docker/rust-ci.tar.gz
|
|
|
|
notifications:
|
|
email: false
|
|
|
|
cache:
|
|
directories:
|
|
- $HOME/docker
|
|
|
|
before_deploy:
|
|
- mkdir -p deploy/$TRAVIS_COMMIT
|
|
- >
|
|
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
|
rm -rf build/dist/doc &&
|
|
cp -r build/dist/* deploy/$TRAVIS_COMMIT;
|
|
else
|
|
rm -rf obj/build/dist/doc &&
|
|
cp -r obj/build/dist/* deploy/$TRAVIS_COMMIT;
|
|
fi
|
|
- travis_retry gem update --system
|
|
- ls -la deploy/$TRAVIS_COMMIT
|
|
|
|
deploy:
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: auto
|
|
condition: $DEPLOY = 1
|
|
|
|
# this is the same as the above deployment provider except that it uploads to
|
|
# a slightly different directory and has a different trigger
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds-alt
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: auto
|
|
condition: $DEPLOY_ALT = 1
|
|
|
|
# These two providers are the same as the two above, except deploy on the
|
|
# try branch. Travis does not appear to provide a way to use "or" in these
|
|
# conditions.
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: try
|
|
condition: $DEPLOY = 1
|
|
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds-alt
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: try
|
|
condition: $DEPLOY_ALT = 1
|