From d30c29e9263ea63c4b053322f45fccd25bc0a900 Mon Sep 17 00:00:00 2001 From: Peter Jin Date: Fri, 28 Dec 2018 08:26:45 -0500 Subject: [PATCH] Add a build libcore-only nvptx64 test (using xargo). This also disables the "integer_atomics" feature on nvptx/nvptx64. --- library/stdarch/.travis.yml | 10 ++++- .../stdarch/ci/cross/nvptx64-nvidia-cuda.json | 15 ++++++++ .../nvptx64-nvidia-cuda-cross/Dockerfile | 5 +++ library/stdarch/ci/run-docker.sh | 19 ++++++++-- library/stdarch/ci/run.sh | 37 ++++++++++++++++++- library/stdarch/crates/coresimd/src/lib.rs | 9 ++++- 6 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 library/stdarch/ci/cross/nvptx64-nvidia-cuda.json create mode 100644 library/stdarch/ci/docker/nvptx64-nvidia-cuda-cross/Dockerfile diff --git a/library/stdarch/.travis.yml b/library/stdarch/.travis.yml index 53d9806e0d5c..60ea14a1c6e2 100644 --- a/library/stdarch/.travis.yml +++ b/library/stdarch/.travis.yml @@ -56,6 +56,14 @@ matrix: script: ci/run.sh - name: "wasm32-unknown-unknown" env: TARGET=wasm32-unknown-unknown + - name: "nvptx64-nvidia-cuda - cross compiled, build libcore only" + env: TARGET=x86_64-unknown-linux-gnu CROSS_TARGET=nvptx64-nvidia-cuda-cross NORUN=1 NOSTD=1 + install: + - travis_retry rustup target add $TARGET + - travis_retry rustup component add rust-src + - cargo install xargo + - xargo --version + - mkdir -p $HOME/.xargo - name: "thumbv6m-none-eabi - build libcore only" env: TARGET=thumbv6m-none-eabi NORUN=1 NOSTD=1 script: ci/run.sh @@ -103,7 +111,7 @@ matrix: install: travis_retry rustup target add $TARGET script: - cargo generate-lockfile - - ci/run-docker.sh $TARGET $FEATURES + - ci/run-docker.sh $TARGET $CROSS_TARGET $FEATURES notifications: email: diff --git a/library/stdarch/ci/cross/nvptx64-nvidia-cuda.json b/library/stdarch/ci/cross/nvptx64-nvidia-cuda.json new file mode 100644 index 000000000000..e946d947ed76 --- /dev/null +++ b/library/stdarch/ci/cross/nvptx64-nvidia-cuda.json @@ -0,0 +1,15 @@ +{ + "arch": "nvptx64" +, "cpu": "sm_35" +, "data-layout": "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64" +, "linker": false +, "linker-flavor": "ld" +, "llvm-target": "nvptx64-nvidia-cuda" +, "max-atomic-width": 0 +, "obj-is-bitcode": true +, "os": "cuda" +, "panic-strategy": "abort" +, "target-c-int-width": "32" +, "target-endian": "little" +, "target-pointer-width": "64" +} diff --git a/library/stdarch/ci/docker/nvptx64-nvidia-cuda-cross/Dockerfile b/library/stdarch/ci/docker/nvptx64-nvidia-cuda-cross/Dockerfile new file mode 100644 index 000000000000..864d72e628e9 --- /dev/null +++ b/library/stdarch/ci/docker/nvptx64-nvidia-cuda-cross/Dockerfile @@ -0,0 +1,5 @@ +FROM ubuntu:18.04 +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + libc6-dev \ + ca-certificates diff --git a/library/stdarch/ci/run-docker.sh b/library/stdarch/ci/run-docker.sh index bd02dcd9bcb8..cfb801734ac1 100755 --- a/library/stdarch/ci/run-docker.sh +++ b/library/stdarch/ci/run-docker.sh @@ -6,10 +6,18 @@ set -ex run() { - echo "Building docker container for TARGET=${1}" - docker build -t stdsimd -f "ci/docker/${1}/Dockerfile" ci/ - mkdir -p target target=$(echo "${1}" | sed 's/-emulated//') + cross="0" + if [ -z "${2}" ]; then + echo "Building docker container for TARGET=${1}" + docker build -t stdsimd -f "ci/docker/${1}/Dockerfile" ci/ + else + target=$(echo "${2}" | sed 's/-cross//') + cross="1" + echo "Building docker container for CROSS_TARGET=${2}" + docker build -t stdsimd -f "ci/docker/${2}/Dockerfile" ci/ + fi + mkdir -p target echo "Running docker" # shellcheck disable=SC2016 docker run \ @@ -18,6 +26,8 @@ run() { --init \ --volume "${HOME}"/.cargo:/cargo-h \ --env CARGO_HOME=/cargo-h \ + --volume "${HOME}"/.xargo:/xargo-h \ + --env XARGO_HOME=/xargo-h \ --volume "$(rustc --print sysroot)":/rust:ro \ --env TARGET="${target}" \ --env STDSIMD_TEST_EVERYTHING \ @@ -27,6 +37,7 @@ run() { --env NORUN \ --env RUSTFLAGS \ --env STDSIMD_TEST_NORUN \ + --env CROSS="${cross}" \ --volume "$(pwd)":/checkout:ro \ --volume "$(pwd)"/target:/checkout/target \ --workdir /checkout \ @@ -41,5 +52,5 @@ if [ -z "$1" ]; then run "${d}" done else - run "${1}" + run "${1}" "${2}" fi diff --git a/library/stdarch/ci/run.sh b/library/stdarch/ci/run.sh index c3c1471b94db..e4ba2b9d2d2a 100755 --- a/library/stdarch/ci/run.sh +++ b/library/stdarch/ci/run.sh @@ -30,14 +30,34 @@ echo "FEATURES=${FEATURES}" echo "OBJDUMP=${OBJDUMP}" echo "STDSIMD_DISABLE_ASSERT_INSTR=${STDSIMD_DISABLE_ASSERT_INSTR}" echo "STDSIMD_TEST_EVERYTHING=${STDSIMD_TEST_EVERYTHING}" +echo "CROSS=${CROSS}" + +cargo_setup() { + if [ "$CROSS" = "1" ] + then + export RUST_TARGET_PATH="/checkout/ci/cross" + echo "RUST_TARGET_PATH=${RUST_TARGET_PATH}" + fi +} cargo_test() { + if [ "$CROSS" = "1" ] + then + cmd="/cargo-h/bin/xargo" + else + cmd="cargo" + fi subcmd="test" if [ "$NORUN" = "1" ] then - export subcmd="build" + if [ "$CROSS" = "1" ] + then + export subcmd="rustc" + else + export subcmd="build" + fi fi - cmd="cargo ${subcmd} --target=$TARGET $1" + cmd="$cmd ${subcmd} --target=$TARGET $1" if [ "$NOSTD" = "1" ] then cmd="$cmd -p coresimd" @@ -52,11 +72,24 @@ cargo_test() { cmd="$cmd --quiet" fi fi + if [ "$CROSS" = "1" ] + then + cmd="$cmd --emit=asm" + fi $cmd } +cargo_output() { + if [ "$CROSS" = "1" ] + then + find /checkout/target -name "*.s" + fi +} + +cargo_setup cargo_test cargo_test "--release" +cargo_output # Test targets compiled with extra features. case ${TARGET} in diff --git a/library/stdarch/crates/coresimd/src/lib.rs b/library/stdarch/crates/coresimd/src/lib.rs index 4cd07343ce3b..3561219efa4f 100644 --- a/library/stdarch/crates/coresimd/src/lib.rs +++ b/library/stdarch/crates/coresimd/src/lib.rs @@ -18,7 +18,6 @@ simd_ffi, asm, proc_macro_hygiene, - integer_atomics, stmt_expr_attributes, core_intrinsics, no_core, @@ -38,6 +37,14 @@ powerpc_target_feature, wasm_target_feature )] +// NB: When running nvptx/nvptx64 cross tests, enabling "integer_atomics" yields +// a compile-time error: 'unknown feature `integer_atomics`'. This ought to be +// investigated further, but for now just disable "integer_atomics" so we can +// run _some_ test for the nvptx/nvptx64 targets. +#![cfg_attr( + not(any(target_arch = "nvptx", target_arch = "nvptx64")), + feature(integer_atomics) +)] #![cfg_attr(test, feature(test, abi_vectorcall, untagged_unions))] #![cfg_attr( feature = "cargo-clippy",