From 97c8e82fe03c079368e7913c46f6b26fefa30150 Mon Sep 17 00:00:00 2001 From: Denys Zariaiev Date: Thu, 24 Jan 2019 01:13:52 +0100 Subject: Enable CI for `nvptx64-nvidia-cuda` --- src/ci/docker/dist-various-2/Dockerfile | 1 + src/ci/docker/nvptx-cuda/Dockerfile | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/ci/docker/nvptx-cuda/Dockerfile (limited to 'src/ci/docker') diff --git a/src/ci/docker/dist-various-2/Dockerfile b/src/ci/docker/dist-various-2/Dockerfile index 952c1ba2ccb..66cbb43196a 100644 --- a/src/ci/docker/dist-various-2/Dockerfile +++ b/src/ci/docker/dist-various-2/Dockerfile @@ -70,6 +70,7 @@ ENV TARGETS=$TARGETS,x86_64-sun-solaris ENV TARGETS=$TARGETS,x86_64-unknown-linux-gnux32 ENV TARGETS=$TARGETS,x86_64-unknown-cloudabi ENV TARGETS=$TARGETS,x86_64-fortanix-unknown-sgx +ENV TARGETS=$TARGETS,nvptx64-nvidia-cuda ENV X86_FORTANIX_SGX_LIBS="/x86_64-fortanix-unknown-sgx/lib/" diff --git a/src/ci/docker/nvptx-cuda/Dockerfile b/src/ci/docker/nvptx-cuda/Dockerfile new file mode 100644 index 00000000000..cdb1f565bd2 --- /dev/null +++ b/src/ci/docker/nvptx-cuda/Dockerfile @@ -0,0 +1,18 @@ +FROM ubuntu:18.04 + +RUN apt-get update +RUN apt-get install -y --no-install-recommends \ + g++ make file curl ca-certificates python git \ + cmake sudo gdb + +# TODO(denzp): setup `ptx-linker` CI for auttomatic binary releases. +RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha/rust-ptx-linker.linux64.tar.gz | \ + tar -xzvC /usr/bin + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +ENV TARGETS=nvptx64-nvidia-cuda + +ENV SCRIPT python2.7 /checkout/x.py test --target $TARGETS \ + src/test/run-make -- cgit 1.4.1-3-g733a5 From ceacde31aeac4732a970ba253a99502b5d9f5280 Mon Sep 17 00:00:00 2001 From: Denys Zariaiev Date: Sun, 27 Jan 2019 23:52:22 +0100 Subject: NVPTX: by-default use target cpu "sm_30" --- src/ci/docker/nvptx-cuda/Dockerfile | 2 +- src/librustc_target/spec/nvptx64_nvidia_cuda.rs | 6 +++--- src/test/run-make/nvptx-emit-asm/kernel.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/ci/docker') diff --git a/src/ci/docker/nvptx-cuda/Dockerfile b/src/ci/docker/nvptx-cuda/Dockerfile index cdb1f565bd2..b52865ced3e 100644 --- a/src/ci/docker/nvptx-cuda/Dockerfile +++ b/src/ci/docker/nvptx-cuda/Dockerfile @@ -5,7 +5,7 @@ RUN apt-get install -y --no-install-recommends \ g++ make file curl ca-certificates python git \ cmake sudo gdb -# TODO(denzp): setup `ptx-linker` CI for auttomatic binary releases. +# FIXME: setup `ptx-linker` CI for automatic binary releases. RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha/rust-ptx-linker.linux64.tar.gz | \ tar -xzvC /usr/bin diff --git a/src/librustc_target/spec/nvptx64_nvidia_cuda.rs b/src/librustc_target/spec/nvptx64_nvidia_cuda.rs index ed5d0f24506..e8512415e66 100644 --- a/src/librustc_target/spec/nvptx64_nvidia_cuda.rs +++ b/src/librustc_target/spec/nvptx64_nvidia_cuda.rs @@ -22,9 +22,9 @@ pub fn target() -> TargetResult { linker: Some("rust-ptx-linker".to_string()), // With `ptx-linker` approach, it can be later overriden via link flags. - cpu: "sm_20".to_string(), + cpu: "sm_30".to_string(), - // TODO(denzp): create tests for the atomics. + // FIXME: create tests for the atomics. max_atomic_width: Some(64), // Unwinding on CUDA is neither feasible nor useful. @@ -51,7 +51,7 @@ pub fn target() -> TargetResult { // This behavior is not supported by PTX ISA. merge_functions: MergeFunctions::Disabled, - // TODO(denzp): enable compilation tests for the target and + // FIXME: enable compilation tests for the target and // create the tests for this. abi_blacklist: vec![ Abi::Cdecl, diff --git a/src/test/run-make/nvptx-emit-asm/kernel.rs b/src/test/run-make/nvptx-emit-asm/kernel.rs index 070a6efd2d5..b71e18d9103 100644 --- a/src/test/run-make/nvptx-emit-asm/kernel.rs +++ b/src/test/run-make/nvptx-emit-asm/kernel.rs @@ -3,7 +3,7 @@ #![feature(abi_ptx)] // Verify the default CUDA arch. -// CHECK: .target sm_20 +// CHECK: .target sm_30 // CHECK: .address_size 64 // Verify function name doesn't contain unacceaptable characters. -- cgit 1.4.1-3-g733a5 From 6f86a70ea13cbe8b32c6e6ed76b8f57be4d70c68 Mon Sep 17 00:00:00 2001 From: Denys Zariaiev Date: Mon, 28 Jan 2019 23:56:37 +0100 Subject: Adjust PTXLinker LTO logic and CLI --- src/ci/docker/nvptx-cuda/Dockerfile | 2 +- src/librustc_codegen_ssa/back/linker.rs | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'src/ci/docker') diff --git a/src/ci/docker/nvptx-cuda/Dockerfile b/src/ci/docker/nvptx-cuda/Dockerfile index b52865ced3e..c7c3ca6bc54 100644 --- a/src/ci/docker/nvptx-cuda/Dockerfile +++ b/src/ci/docker/nvptx-cuda/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get install -y --no-install-recommends \ cmake sudo gdb # FIXME: setup `ptx-linker` CI for automatic binary releases. -RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha/rust-ptx-linker.linux64.tar.gz | \ +RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha.1/rust-ptx-linker.linux64.tar.gz | \ tar -xzvC /usr/bin COPY scripts/sccache.sh /scripts/ diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs index 5e9aeed7107..55b02ebe6c4 100644 --- a/src/librustc_codegen_ssa/back/linker.rs +++ b/src/librustc_codegen_ssa/back/linker.rs @@ -13,7 +13,7 @@ use rustc::hir::def_id::{LOCAL_CRATE, CrateNum}; use rustc::middle::dependency_format::Linkage; use rustc::session::Session; use rustc::session::config::{self, CrateType, OptLevel, DebugInfo, - CrossLangLto}; + CrossLangLto, Lto}; use rustc::ty::TyCtxt; use rustc_target::spec::{LinkerFlavor, LldFlavor}; use serialize::{json, Encoder}; @@ -1118,14 +1118,13 @@ impl<'a> Linker for PtxLinker<'a> { } fn optimize(&mut self) { - self.cmd.arg(match self.sess.opts.optimize { - OptLevel::No => "-O0", - OptLevel::Less => "-O1", - OptLevel::Default => "-O2", - OptLevel::Aggressive => "-O3", - OptLevel::Size => "-Os", - OptLevel::SizeMin => "-Os" - }); + match self.sess.lto() { + Lto::Thin | Lto::Fat | Lto::ThinLocal => { + self.cmd.arg("-Olto"); + }, + + Lto::No => { }, + }; } fn output_filename(&mut self, path: &Path) { -- cgit 1.4.1-3-g733a5 From 899d936dee555ef2ac67e68a5017ccb0d1e9a697 Mon Sep 17 00:00:00 2001 From: Denys Zariaiev Date: Tue, 29 Jan 2019 19:06:42 +0100 Subject: Merge NVPTX and WASM test images into `test-various` --- src/ci/docker/test-various/Dockerfile | 50 +++++++++++++++++++++++++++ src/ci/docker/wasm32-unknown/Dockerfile | 41 ---------------------- src/test/run-make/nvptx-dylib-crate/kernel.rs | 12 ++----- 3 files changed, 52 insertions(+), 51 deletions(-) create mode 100644 src/ci/docker/test-various/Dockerfile delete mode 100644 src/ci/docker/wasm32-unknown/Dockerfile (limited to 'src/ci/docker') diff --git a/src/ci/docker/test-various/Dockerfile b/src/ci/docker/test-various/Dockerfile new file mode 100644 index 00000000000..a5ae94262c1 --- /dev/null +++ b/src/ci/docker/test-various/Dockerfile @@ -0,0 +1,50 @@ +FROM ubuntu:18.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 + +# FIXME: build the `ptx-linker` instead. +RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha.1/rust-ptx-linker.linux64.tar.gz | \ + tar -xzvC /usr/bin + +RUN curl -sL https://nodejs.org/dist/v9.2.0/node-v9.2.0-linux-x64.tar.xz | \ + tar -xJ + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +ENV RUST_CONFIGURE_ARGS \ + --set build.nodejs=/node-v9.2.0-linux-x64/bin/node \ + --set rust.lld + +# Some run-make tests have assertions about code size, and enabling debug +# assertions in libstd causes the binary to be much bigger than it would +# otherwise normally be. We already test libstd with debug assertions in lots of +# other contexts as well +ENV NO_DEBUG_ASSERTIONS=1 + +ENV WASM_TARGETS=wasm32-unknown-unknown +ENV WASM_SCRIPT python2.7 /checkout/x.py test --target $WASM_TARGETS \ + src/test/run-make \ + src/test/ui \ + src/test/run-pass \ + src/test/compile-fail \ + src/test/mir-opt \ + src/test/codegen-units \ + src/libcore + +ENV NVPTX_TARGETS=nvptx64-nvidia-cuda +ENV NVPTX_SCRIPT python2.7 /checkout/x.py test --target $NVPTX_TARGETS \ + src/test/run-make + +ENV SCRIPT $WASM_SCRIPT && $NVPTX_SCRIPT diff --git a/src/ci/docker/wasm32-unknown/Dockerfile b/src/ci/docker/wasm32-unknown/Dockerfile deleted file mode 100644 index 161f0c0062f..00000000000 --- a/src/ci/docker/wasm32-unknown/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -FROM ubuntu:18.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 - -RUN curl -sL https://nodejs.org/dist/v9.2.0/node-v9.2.0-linux-x64.tar.xz | \ - tar -xJ - -COPY scripts/sccache.sh /scripts/ -RUN sh /scripts/sccache.sh - -ENV TARGETS=wasm32-unknown-unknown - -ENV RUST_CONFIGURE_ARGS \ - --set build.nodejs=/node-v9.2.0-linux-x64/bin/node \ - --set rust.lld - -# Some run-make tests have assertions about code size, and enabling debug -# assertions in libstd causes the binary to be much bigger than it would -# otherwise normally be. We already test libstd with debug assertions in lots of -# other contexts as well -ENV NO_DEBUG_ASSERTIONS=1 - -ENV SCRIPT python2.7 /checkout/x.py test --target $TARGETS \ - src/test/run-make \ - src/test/ui \ - src/test/run-pass \ - src/test/compile-fail \ - src/test/mir-opt \ - src/test/codegen-units \ - src/libcore \ diff --git a/src/test/run-make/nvptx-dylib-crate/kernel.rs b/src/test/run-make/nvptx-dylib-crate/kernel.rs index a889e23018d..5e65cca9140 100644 --- a/src/test/run-make/nvptx-dylib-crate/kernel.rs +++ b/src/test/run-make/nvptx-dylib-crate/kernel.rs @@ -12,7 +12,6 @@ extern crate dep; // CHECK: .func (.param .b32 func_retval0) wrapping_external_fn // CHECK: .func (.param .b32 func_retval0) panicking_external_fn // CHECK: .func [[PANIC_HANDLER:_ZN4core9panicking5panic[a-zA-Z0-9]+]] -// CHECK: .func [[PANIC_FMT:_ZN4core9panicking9panic_fmt[a-zA-Z0-9]+]] // CHECK-LABEL: .visible .entry top_kernel( #[no_mangle] @@ -47,15 +46,8 @@ pub unsafe extern "ptx-kernel" fn top_kernel(a: *const u32, b: *mut u32) { // CHECK: [[PANIC_HANDLER]] // CHECK: } -// Verify whether panic handler is present. -// CHECK: .func [[PANIC_HANDLER]]() -// CHECK: { -// CHECK: call.uni -// CHECK: [[PANIC_FMT]] -// CHECK: } - -// And finally, check the dummy panic formatter. -// CHECK: .func [[PANIC_FMT]]() +// Verify whether out dummy panic formatter has a correct body. +// CHECK: .func [[PANIC_FMT:_ZN4core9panicking9panic_fmt[a-zA-Z0-9]+]]() // CHECK: { // CHECK: trap; // CHECK: } -- cgit 1.4.1-3-g733a5 From 3f624456e6e284f918d4e189e766e357911b49e2 Mon Sep 17 00:00:00 2001 From: Denys Zariaiev Date: Tue, 29 Jan 2019 20:54:23 +0100 Subject: Provide PTXLinker with fallback to internal `target-cpu` --- src/ci/docker/test-various/Dockerfile | 2 +- src/librustc_codegen_ssa/back/linker.rs | 6 ++++++ src/test/run-make/nvptx-binary-crate/Makefile | 7 +++++-- src/test/run-make/nvptx-dylib-crate/kernel.rs | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) (limited to 'src/ci/docker') diff --git a/src/ci/docker/test-various/Dockerfile b/src/ci/docker/test-various/Dockerfile index a5ae94262c1..6c419e13c9f 100644 --- a/src/ci/docker/test-various/Dockerfile +++ b/src/ci/docker/test-various/Dockerfile @@ -14,7 +14,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ xz-utils # FIXME: build the `ptx-linker` instead. -RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha.1/rust-ptx-linker.linux64.tar.gz | \ +RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha.2/rust-ptx-linker.linux64.tar.gz | \ tar -xzvC /usr/bin RUN curl -sL https://nodejs.org/dist/v9.2.0/node-v9.2.0-linux-x64.tar.xz | \ diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs index 55b02ebe6c4..249715a7b6e 100644 --- a/src/librustc_codegen_ssa/back/linker.rs +++ b/src/librustc_codegen_ssa/back/linker.rs @@ -1132,6 +1132,12 @@ impl<'a> Linker for PtxLinker<'a> { } fn finalize(&mut self) -> Command { + // Provide the linker with fallback to internal `target-cpu`. + self.cmd.arg("--fallback-arch").arg(match self.sess.opts.cg.target_cpu { + Some(ref s) => s, + None => &self.sess.target.target.options.cpu + }); + ::std::mem::replace(&mut self.cmd, Command::new("")) } diff --git a/src/test/run-make/nvptx-binary-crate/Makefile b/src/test/run-make/nvptx-binary-crate/Makefile index 4c22dae265c..2c211b5c785 100644 --- a/src/test/run-make/nvptx-binary-crate/Makefile +++ b/src/test/run-make/nvptx-binary-crate/Makefile @@ -2,8 +2,11 @@ ifeq ($(TARGET),nvptx64-nvidia-cuda) all: - $(RUSTC) main.rs -Clink-arg=--arch=sm_60 --crate-type="bin" -O --target $(TARGET) - FileCheck main.rs --input-file $(TMPDIR)/main.ptx + $(RUSTC) main.rs --crate-type="bin" --target $(TARGET) -O -C link-arg=--arch=sm_60 -o $(TMPDIR)/main.link_arg.ptx + $(RUSTC) main.rs --crate-type="bin" --target $(TARGET) -O -C target-cpu=sm_60 -o $(TMPDIR)/main.target_cpu.ptx + + FileCheck main.rs --input-file $(TMPDIR)/main.link_arg.ptx + FileCheck main.rs --input-file $(TMPDIR)/main.target_cpu.ptx else all: endif diff --git a/src/test/run-make/nvptx-dylib-crate/kernel.rs b/src/test/run-make/nvptx-dylib-crate/kernel.rs index 5e65cca9140..63fd6b063dd 100644 --- a/src/test/run-make/nvptx-dylib-crate/kernel.rs +++ b/src/test/run-make/nvptx-dylib-crate/kernel.rs @@ -5,7 +5,7 @@ extern crate dep; // Verify the default CUDA arch. -// CHECK: .target sm_20 +// CHECK: .target sm_30 // CHECK: .address_size 64 // Make sure declarations are there. -- cgit 1.4.1-3-g733a5 From 49931fda56dc6268ba3c104b64768f551cfc4636 Mon Sep 17 00:00:00 2001 From: Denys Zariaiev Date: Tue, 29 Jan 2019 21:00:07 +0100 Subject: Use correct CI test image for WASM and NVPTX --- .travis.yml | 4 +--- src/ci/docker/nvptx-cuda/Dockerfile | 18 ------------------ 2 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 src/ci/docker/nvptx-cuda/Dockerfile (limited to 'src/ci/docker') diff --git a/.travis.yml b/.travis.yml index a8e1bfbbfa9..7985b6c0e19 100644 --- a/.travis.yml +++ b/.travis.yml @@ -168,7 +168,7 @@ matrix: if: branch = auto - env: IMAGE=i686-gnu-nopt if: branch = auto - - env: IMAGE=wasm32-unknown + - env: IMAGE=test-various if: branch = auto - env: IMAGE=x86_64-gnu if: branch = auto @@ -186,8 +186,6 @@ matrix: if: branch = auto - env: IMAGE=mingw-check if: type = pull_request OR branch = auto - - env: IMAGE=nvptx-cuda - if: branch = auto - stage: publish toolstate if: branch = master AND type = push diff --git a/src/ci/docker/nvptx-cuda/Dockerfile b/src/ci/docker/nvptx-cuda/Dockerfile deleted file mode 100644 index c7c3ca6bc54..00000000000 --- a/src/ci/docker/nvptx-cuda/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM ubuntu:18.04 - -RUN apt-get update -RUN apt-get install -y --no-install-recommends \ - g++ make file curl ca-certificates python git \ - cmake sudo gdb - -# FIXME: setup `ptx-linker` CI for automatic binary releases. -RUN curl -sL https://github.com/denzp/rust-ptx-linker/releases/download/v0.9.0-alpha.1/rust-ptx-linker.linux64.tar.gz | \ - tar -xzvC /usr/bin - -COPY scripts/sccache.sh /scripts/ -RUN sh /scripts/sccache.sh - -ENV TARGETS=nvptx64-nvidia-cuda - -ENV SCRIPT python2.7 /checkout/x.py test --target $TARGETS \ - src/test/run-make -- cgit 1.4.1-3-g733a5