diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs index 66bdd5e00f43d..8e79c2d27d195 100644 --- a/src/bootstrap/sanity.rs +++ b/src/bootstrap/sanity.rs @@ -45,7 +45,7 @@ pub fn check(build: &mut Build) { let target = path.join(cmd); let mut cmd_alt = cmd.to_os_string(); cmd_alt.push(".exe"); - if target.exists() || + if target.is_file() || target.with_extension("exe").exists() || target.join(cmd_alt).exists() { return Some(target); diff --git a/src/ci/docker/emscripten/Dockerfile b/src/ci/docker/emscripten/Dockerfile new file mode 100644 index 0000000000000..84e12eb6c3e11 --- /dev/null +++ b/src/ci/docker/emscripten/Dockerfile @@ -0,0 +1,41 @@ +FROM ubuntu:16.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + g++ \ + make \ + file \ + curl \ + ca-certificates \ + python \ + git \ + cmake \ + sudo \ + gdb \ + xz-utils \ + lib32stdc++6 + +ENV SCCACHE_DIGEST=7237e38e029342fa27b7ac25412cb9d52554008b12389727320bd533fd7f05b6a96d55485f305caf95e5c8f5f97c3313e10012ccad3e752aba2518f3522ba783 +RUN curl -L https://api.pub.build.mozilla.org/tooltool/sha512/$SCCACHE_DIGEST | \ + tar xJf - -C /usr/local/bin --strip-components=1 + +RUN curl -OL https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \ + dpkg -i dumb-init_*.deb && \ + rm dumb-init_*.deb +ENTRYPOINT ["/usr/bin/dumb-init", "--"] + +WORKDIR /tmp +COPY build-emscripten.sh /tmp/ +RUN ./build-emscripten.sh +ENV PATH=$PATH:/tmp/emsdk_portable +ENV PATH=$PATH:/tmp/emsdk_portable/clang/tag-e1.37.1/build_tag-e1.37.1_32/bin +ENV PATH=$PATH:/tmp/emsdk_portable/node/4.1.1_32bit/bin +ENV PATH=$PATH:/tmp/emsdk_portable/emscripten/tag-1.37.1 +ENV EMSCRIPTEN=/tmp/emsdk_portable/emscripten/tag-1.37.1 + +ENV RUST_CONFIGURE_ARGS --target=asmjs-unknown-emscripten + +# Run `emcc` first as it's got a prompt and doesn't actually do anything, after +# that's done with do the real build. +ENV SCRIPT emcc && \ + python2.7 ../x.py test --target asmjs-unknown-emscripten + diff --git a/src/ci/docker/emscripten/build-emscripten.sh b/src/ci/docker/emscripten/build-emscripten.sh new file mode 100755 index 0000000000000..2ce7a58ae6656 --- /dev/null +++ b/src/ci/docker/emscripten/build-emscripten.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Copyright 2017 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 + +curl https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz | \ + tar xzf - +source emsdk_portable/emsdk_env.sh +emsdk update +emsdk install --build=Release sdk-tag-1.37.1-32bit +emsdk activate --build=Release sdk-tag-1.37.1-32bit diff --git a/src/libstd/net/test.rs b/src/libstd/net/test.rs index 3f2eacda7d60e..aec3d901ece60 100644 --- a/src/libstd/net/test.rs +++ b/src/libstd/net/test.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[allow(dead_code)] // not used on emscripten +#![allow(warnings)] // not used on emscripten use env; use net::{SocketAddr, SocketAddrV4, SocketAddrV6, Ipv4Addr, Ipv6Addr, ToSocketAddrs}; diff --git a/src/libstd/num.rs b/src/libstd/num.rs index d1c2fc3d3fce9..5f83d077a1368 100644 --- a/src/libstd/num.rs +++ b/src/libstd/num.rs @@ -172,6 +172,7 @@ mod tests { macro_rules! test_checked_next_power_of_two { ($test_name:ident, $T:ident) => ( + #[cfg_attr(target_os = "emscripten", ignore)] // FIXME(#39119) fn $test_name() { #![test] assert_eq!((0 as $T).checked_next_power_of_two(), Some(1)); diff --git a/src/test/codegen/fastcall-inreg.rs b/src/test/codegen/fastcall-inreg.rs index e1dda4d2be084..1cbde9b1a7c77 100644 --- a/src/test/codegen/fastcall-inreg.rs +++ b/src/test/codegen/fastcall-inreg.rs @@ -53,6 +53,7 @@ // ignore-shave // ignore-wasm32 // ignore-wasm64 +// ignore-emscripten // compile-flags: -C no-prepopulate-passes diff --git a/src/test/compile-fail/asm-bad-clobber.rs b/src/test/compile-fail/asm-bad-clobber.rs index 85832ddefe25f..cb931329051f9 100644 --- a/src/test/compile-fail/asm-bad-clobber.rs +++ b/src/test/compile-fail/asm-bad-clobber.rs @@ -12,6 +12,7 @@ // ignore-arm // ignore-aarch64 // ignore-s390x +// ignore-emscripten #![feature(asm, rustc_attrs)] diff --git a/src/test/compile-fail/asm-in-bad-modifier.rs b/src/test/compile-fail/asm-in-bad-modifier.rs index a4d076fc90da2..7ba5beac21340 100644 --- a/src/test/compile-fail/asm-in-bad-modifier.rs +++ b/src/test/compile-fail/asm-in-bad-modifier.rs @@ -9,6 +9,7 @@ // except according to those terms. // ignore-s390x +// ignore-emscripten #![feature(asm)] diff --git a/src/test/compile-fail/asm-misplaced-option.rs b/src/test/compile-fail/asm-misplaced-option.rs index fbfc20f8d048a..bafbf625e3517 100644 --- a/src/test/compile-fail/asm-misplaced-option.rs +++ b/src/test/compile-fail/asm-misplaced-option.rs @@ -12,6 +12,7 @@ // ignore-arm // ignore-aarch64 // ignore-s390x +// ignore-emscripten #![feature(asm, rustc_attrs)] diff --git a/src/test/compile-fail/asm-out-assign-imm.rs b/src/test/compile-fail/asm-out-assign-imm.rs index 1329959fe4938..161c0b977ff0c 100644 --- a/src/test/compile-fail/asm-out-assign-imm.rs +++ b/src/test/compile-fail/asm-out-assign-imm.rs @@ -9,6 +9,7 @@ // except according to those terms. // ignore-s390x +// ignore-emscripten #![feature(asm)] diff --git a/src/test/compile-fail/asm-out-no-modifier.rs b/src/test/compile-fail/asm-out-no-modifier.rs index d610f9e344024..cb8fb19a7c7f0 100644 --- a/src/test/compile-fail/asm-out-no-modifier.rs +++ b/src/test/compile-fail/asm-out-no-modifier.rs @@ -9,6 +9,7 @@ // except according to those terms. // ignore-s390x +// ignore-emscripten #![feature(asm)] diff --git a/src/test/compile-fail/asm-out-read-uninit.rs b/src/test/compile-fail/asm-out-read-uninit.rs index 360f89dda9ce3..42bff4c633aa9 100644 --- a/src/test/compile-fail/asm-out-read-uninit.rs +++ b/src/test/compile-fail/asm-out-read-uninit.rs @@ -9,6 +9,7 @@ // except according to those terms. // ignore-s390x +// ignore-emscripten #![feature(asm)] diff --git a/src/test/compile-fail/asm-src-loc-codegen-units.rs b/src/test/compile-fail/asm-src-loc-codegen-units.rs index 79f0c436759b3..df1a6d52f5739 100644 --- a/src/test/compile-fail/asm-src-loc-codegen-units.rs +++ b/src/test/compile-fail/asm-src-loc-codegen-units.rs @@ -12,6 +12,7 @@ // ignore-stage1 // compile-flags: -C codegen-units=2 // error-pattern: build without -C codegen-units for more exact errors +// ignore-emscripten #![feature(asm)] diff --git a/src/test/compile-fail/asm-src-loc.rs b/src/test/compile-fail/asm-src-loc.rs index e3cece7c8f0db..59b47c2408d7d 100644 --- a/src/test/compile-fail/asm-src-loc.rs +++ b/src/test/compile-fail/asm-src-loc.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-emscripten + #![feature(asm)] fn main() { diff --git a/src/test/compile-fail/cdylib-deps-must-be-static.rs b/src/test/compile-fail/cdylib-deps-must-be-static.rs index 4b160f26e92ca..853507cbc6d8a 100644 --- a/src/test/compile-fail/cdylib-deps-must-be-static.rs +++ b/src/test/compile-fail/cdylib-deps-must-be-static.rs @@ -11,6 +11,7 @@ // error-pattern: dependency `cdylib_dep` not found in rlib format // aux-build:cdylib-dep.rs // ignore-musl +// ignore-emscripten #![crate_type = "cdylib"] diff --git a/src/test/compile-fail/macro-expanded-include/test.rs b/src/test/compile-fail/macro-expanded-include/test.rs index e1e85ddb2c1b1..bcc2c10653f9c 100644 --- a/src/test/compile-fail/macro-expanded-include/test.rs +++ b/src/test/compile-fail/macro-expanded-include/test.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-emscripten + #![feature(asm, rustc_attrs)] #![allow(unused)] diff --git a/src/test/compile-fail/panic-runtime/abort-link-to-unwind-dylib.rs b/src/test/compile-fail/panic-runtime/abort-link-to-unwind-dylib.rs index c3242a5082b62..1fd60b15a72ac 100644 --- a/src/test/compile-fail/panic-runtime/abort-link-to-unwind-dylib.rs +++ b/src/test/compile-fail/panic-runtime/abort-link-to-unwind-dylib.rs @@ -10,6 +10,7 @@ // compile-flags:-C panic=abort -C prefer-dynamic // ignore-musl - no dylibs here +// ignore-emscripten // error-pattern:`panic_unwind` is not compiled with this crate's panic strategy // This is a test where the local crate, compiled with `panic=abort`, links to diff --git a/src/test/compile-fail/two-allocators-3.rs b/src/test/compile-fail/two-allocators-3.rs index 7782d0e338ef4..965e4e0e2eabe 100644 --- a/src/test/compile-fail/two-allocators-3.rs +++ b/src/test/compile-fail/two-allocators-3.rs @@ -11,6 +11,7 @@ // aux-build:allocator1.rs // error-pattern: cannot link together two allocators // ignore-musl no dylibs on musl yet +// ignore-emscripten // We're linking std dynamically (via -C prefer-dynamic for this test) which // has an allocator and then we're also linking in a new allocator (allocator1) diff --git a/src/test/run-pass-valgrind/down-with-thread-dtors.rs b/src/test/run-pass-valgrind/down-with-thread-dtors.rs index 0bf10c67d9fc2..90c20444842f4 100644 --- a/src/test/run-pass-valgrind/down-with-thread-dtors.rs +++ b/src/test/run-pass-valgrind/down-with-thread-dtors.rs @@ -9,6 +9,7 @@ // except according to those terms. // no-prefer-dynamic +// ignore-emscripten thread_local!(static FOO: Foo = Foo); thread_local!(static BAR: Bar = Bar(1)); diff --git a/src/test/run-pass-valgrind/exit-flushes.rs b/src/test/run-pass-valgrind/exit-flushes.rs index 1897b92140182..b72d2659967c4 100644 --- a/src/test/run-pass-valgrind/exit-flushes.rs +++ b/src/test/run-pass-valgrind/exit-flushes.rs @@ -11,6 +11,7 @@ // no-prefer-dynamic // ignore-macos this needs valgrind 3.11 or higher; see // https://github.com/rust-lang/rust/pull/30365#issuecomment-165763679 +// ignore-emscripten use std::env; use std::process::{exit, Command}; diff --git a/src/test/run-pass/i128-ffi.rs b/src/test/run-pass/i128-ffi.rs index 3b5f4884d21e7..222f32754fb6b 100644 --- a/src/test/run-pass/i128-ffi.rs +++ b/src/test/run-pass/i128-ffi.rs @@ -20,6 +20,8 @@ // Ignore 32 bit targets: // ignore-x86, ignore-arm +// ignore-emscripten + #![feature(i128_type)] #[link(name = "rust_test_helpers", kind = "static")] diff --git a/src/test/run-pass/i128.rs b/src/test/run-pass/i128.rs index a4ff36d20e4fa..3eb1c95050267 100644 --- a/src/test/run-pass/i128.rs +++ b/src/test/run-pass/i128.rs @@ -10,6 +10,9 @@ // ignore-stage0 // ignore-stage1 + +// ignore-emscripten + #![feature(i128_type, test)] extern crate test; diff --git a/src/test/run-pass/stdio-is-blocking.rs b/src/test/run-pass/stdio-is-blocking.rs index 74170ca6506ec..448bb7de7727f 100644 --- a/src/test/run-pass/stdio-is-blocking.rs +++ b/src/test/run-pass/stdio-is-blocking.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-emscripten + use std::env; use std::io::prelude::*; use std::process::Command; diff --git a/src/test/run-pass/try-wait.rs b/src/test/run-pass/try-wait.rs index fdaf0cfd5b0c8..d9826373cceb0 100644 --- a/src/test/run-pass/try-wait.rs +++ b/src/test/run-pass/try-wait.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// ignore-emscripten + #![feature(process_try_wait)] use std::env; diff --git a/src/test/run-pass/u128.rs b/src/test/run-pass/u128.rs index 53d726f1f663b..139d42e3a3524 100644 --- a/src/test/run-pass/u128.rs +++ b/src/test/run-pass/u128.rs @@ -10,6 +10,9 @@ // ignore-stage0 // ignore-stage1 + +// ignore-emscripten + #![feature(i128_type, test)] extern crate test;