From 0c2ef101608d8ced4005cb220a69d4df95a1c87b Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:22:12 -0500 Subject: [PATCH 01/11] CI: run all Linux targets inside docker --- .travis.yml | 65 ++--------------------------------- ci/env.sh | 26 +++----------- ci/install.sh | 93 +++++++++------------------------------------------ ci/script.sh | 25 ++++++++------ 4 files changed, 36 insertions(+), 173 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4fe9705..7542351 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,97 +1,39 @@ language: generic -sudo: false +sudo: required +services: docker matrix: include: - env: TARGET=thumbv6m-none-eabi os: linux - dist: trusty - sudo: required - env: TARGET=thumbv7m-none-eabi os: linux - dist: trusty - sudo: required - env: TARGET=thumbv7em-none-eabi os: linux - dist: trusty - sudo: required - env: TARGET=i586-unknown-linux-gnu os: linux - services: docker - sudo: required - env: TARGET=aarch64-unknown-linux-gnu os: linux - dist: trusty - sudo: required - addons: - apt: - packages: - - binfmt-support - - qemu-user-static - env: TARGET=arm-unknown-linux-gnueabi os: linux - sudo: required - addons: - apt: - packages: - - binfmt-support - - gcc-arm-linux-gnueabi - - libc6-armel-cross - - libc6-dev-armel-cross - - qemu-user-static - env: TARGET=arm-unknown-linux-gnueabihf os: linux - sudo: required - addons: - apt: - packages: &armhf - - binfmt-support - - gcc-arm-linux-gnueabihf - - libc6-armhf-cross - - libc6-dev-armhf-cross - - qemu-user-static - env: TARGET=armv7-unknown-linux-gnueabihf os: linux - sudo: required - addons: - apt: - packages: *armhf - env: TARGET=i686-apple-darwin os: osx - env: TARGET=i686-unknown-linux-gnu os: linux - addons: - apt: - packages: - - gcc-multilib - env: TARGET=mips-unknown-linux-gnu os: linux - services: docker - sudo: required - env: TARGET=mipsel-unknown-linux-gnu os: linux - services: docker - sudo: required - env: TARGET=powerpc-unknown-linux-gnu os: linux - dist: trusty - sudo: required - addons: - apt: - packages: - - binfmt-support - - gcc-powerpc-linux-gnu - - libc6-powerpc-cross - - libc6-dev-powerpc-cross - - qemu-user-static - env: TARGET=powerpc64-unknown-linux-gnu os: linux - services: docker - sudo: required - env: TARGET=powerpc64le-unknown-linux-gnu os: linux - services: docker - sudo: required - env: TARGET=x86_64-apple-darwin os: osx - env: TARGET=x86_64-unknown-linux-gnu @@ -107,9 +49,6 @@ matrix: - env: TARGET=armv7-unknown-linux-gnueabihf os: linux -before_install: - - export PATH="$PATH:$HOME/.cargo/bin" - install: - bash ci/install.sh diff --git a/ci/env.sh b/ci/env.sh index 17f5f9c..a8c7003 100644 --- a/ci/env.sh +++ b/ci/env.sh @@ -28,26 +28,14 @@ case $TARGET in export PREFIX=arm-linux-gnueabihf- export QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf ;; - i586-unknown-linux-gnu) - # NOTE $DOCKER values: 'y' (yes, call docker), 'i' (inside a docker container) or 'n' ("no) - if [[ -z $DOCKER ]]; then - export DOCKER=y - fi - ;; mips-unknown-linux-gnu) - if [[ -z $DOCKER ]]; then - export DOCKER=y - fi export PREFIX=mips-linux-gnu- - export QEMU=qemu-mips + # export QEMU=qemu-mips export QEMU_LD_PREFIX=/usr/mips-linux-gnu ;; mipsel-unknown-linux-gnu) - if [[ -z $DOCKER ]]; then - export DOCKER=y - fi export PREFIX=mipsel-linux-gnu- - export QEMU=qemu-mipsel + # export QEMU=qemu-mipsel export QEMU_LD_PREFIX=/usr/mipsel-linux-gnu ;; powerpc-unknown-linux-gnu) @@ -55,19 +43,13 @@ case $TARGET in export QEMU_LD_PREFIX=/usr/powerpc-linux-gnu ;; powerpc64-unknown-linux-gnu) - if [[ -z $DOCKER ]]; then - export DOCKER=y - fi export PREFIX=powerpc64-linux-gnu- - export QEMU=qemu-ppc64 + # export QEMU=qemu-ppc64 export QEMU_LD_PREFIX=/usr/powerpc64-linux-gnu ;; powerpc64le-unknown-linux-gnu) - if [[ -z $DOCKER ]]; then - export DOCKER=y - fi export PREFIX=powerpc64le-linux-gnu- - export QEMU=qemu-ppc64le + # export QEMU=qemu-ppc64le export QEMU_LD_PREFIX=/usr/powerpc64le-linux-gnu # Issue #2. QEMU doesn't work export RUN_TESTS=n diff --git a/ci/install.sh b/ci/install.sh index 3bd806d..e3b7ce8 100644 --- a/ci/install.sh +++ b/ci/install.sh @@ -2,77 +2,33 @@ set -ex . $(dirname $0)/env.sh -install_deps() { - if [[ ${DOCKER} == "i" ]]; then - apt-get update - apt-get install -y --no-install-recommends \ - ca-certificates curl - fi -} - install_qemu() { - case $TARGET in - mipsel-unknown-linux-gnu | \ - powerpc64le-unknown-linux-gnu) + case ${QEMU_ARCH:-$TRAVIS_OS_NAME} in + i386) + dpkg --add-architecture $QEMU_ARCH apt-get install -y --no-install-recommends \ - qemu-user + binfmt-support qemu-user-static:$QEMU_ARCH ;; - mips-unknown-linux-gnu | \ - powerpc64-unknown-linux-gnu) - dpkg --add-architecture i386 + linux) apt-get update apt-get install -y --no-install-recommends \ - qemu-user:i386 + binfmt-support qemu-user-static ;; esac } install_binutils() { - case $TRAVIS_OS_NAME in - osx) - brew install binutils - ;; - esac - - case $TARGET in - thumbv*-none-eabi) - sudo apt-get install -y --no-install-recommends \ - gcc-arm-none-eabi - ;; - esac -} - -install_c_toolchain() { - case $TARGET in - aarch64-unknown-linux-gnu) - sudo apt-get install -y --no-install-recommends \ - gcc-aarch64-linux-gnu libc6-dev-arm64-cross - ;; - i586-unknown-linux-gnu) - apt-get install -y --no-install-recommends \ - gcc libc6-dev-i386 lib32gcc-5-dev - ;; - mips-unknown-linux-gnu) - apt-get install -y --no-install-recommends \ - gcc gcc-mips-linux-gnu libc6-dev libc6-dev-mips-cross - ;; - mipsel-unknown-linux-gnu) - apt-get install -y --no-install-recommends \ - gcc gcc-mipsel-linux-gnu libc6-dev libc6-dev-mipsel-cross - ;; - powerpc64-unknown-linux-gnu) - apt-get install -y --no-install-recommends \ - gcc gcc-powerpc64-linux-gnu libc6-dev libc6-dev-ppc64-cross - ;; - powerpc64le-unknown-linux-gnu) - apt-get install -y --no-install-recommends \ - gcc gcc-powerpc64le-linux-gnu libc6-dev libc6-dev-ppc64el-cross - ;; - esac + if [[ $TRAVIS_OS_NAME == "osx" ]]; then + brew install binutils + fi } install_rust() { - curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=nightly + if [[ $TRAVIS_OS_NAME == "osx" ]]; then + curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=nightly + else + rustup default nightly + fi rustc -V cargo -V @@ -86,35 +42,18 @@ add_rustup_target() { install_xargo() { if [[ $CARGO == "xargo" ]]; then - sudo apt-get install -y --no-install-recommends \ - libssh2-1 curl -sf "https://raw.githubusercontent.com/japaric/rust-everywhere/master/install.sh" | \ - bash -s -- --from japaric/xargo --at $HOME/.cargo/bin - fi -} - -configure_cargo() { - if [[ $PREFIX ]]; then - ${PREFIX}gcc -v - - mkdir -p .cargo - cat >>.cargo/config < Date: Sat, 13 Aug 2016 17:24:52 -0500 Subject: [PATCH 02/11] fix bash syntax --- ci/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/install.sh b/ci/install.sh index e3b7ce8..bdb0fa1 100644 --- a/ci/install.sh +++ b/ci/install.sh @@ -48,7 +48,7 @@ install_xargo() { } main() { - if [[ $TRAVIS_OS_NAME == "osx" || ${IN_DOCKER_CONTAINER:-n} == "y" ]] + if [[ $TRAVIS_OS_NAME == "osx" || ${IN_DOCKER_CONTAINER:-n} == "y" ]]; then install_qemu install_binutils install_rust From aa9a282c618ea47c9252f8cde3556305e8ae0cf3 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:27:18 -0500 Subject: [PATCH 03/11] actually enter docker --- ci/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/script.sh b/ci/script.sh index 4243fb0..e119044 100644 --- a/ci/script.sh +++ b/ci/script.sh @@ -36,7 +36,7 @@ run_tests() { } main() { - if [[ $DOCKER == "y" ]]; then + if [[ $TRAVIS_OS_NAME == "linux" ]]; then local tag=2016-08-13 docker run \ From b4df203c46a5e422f6e1a9255b4c085bd56900b2 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:32:08 -0500 Subject: [PATCH 04/11] use trusty --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7542351..99a2729 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ +dist: trusty language: generic -sudo: required services: docker +sudo: required matrix: include: From 480bbec3cdf354c546fb2347a675ba8613a506a1 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:36:00 -0500 Subject: [PATCH 05/11] don't call docker inside docker --- ci/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/script.sh b/ci/script.sh index e119044..847530a 100644 --- a/ci/script.sh +++ b/ci/script.sh @@ -36,7 +36,7 @@ run_tests() { } main() { - if [[ $TRAVIS_OS_NAME == "linux" ]]; then + if [[ $TRAVIS_OS_NAME == "linux" && ${IN_DOCKER_CONTAINER:-n} == "n" ]]; then local tag=2016-08-13 docker run \ From 12933b8dca49c11fa524039d711cfed4ac0572a5 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:43:40 -0500 Subject: [PATCH 06/11] sort targets --- .travis.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 99a2729..53b5706 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,14 +5,6 @@ sudo: required matrix: include: - - env: TARGET=thumbv6m-none-eabi - os: linux - - env: TARGET=thumbv7m-none-eabi - os: linux - - env: TARGET=thumbv7em-none-eabi - os: linux - - env: TARGET=i586-unknown-linux-gnu - os: linux - env: TARGET=aarch64-unknown-linux-gnu os: linux - env: TARGET=arm-unknown-linux-gnueabi @@ -21,6 +13,8 @@ matrix: os: linux - env: TARGET=armv7-unknown-linux-gnueabihf os: linux + - env: TARGET=i586-unknown-linux-gnu + os: linux - env: TARGET=i686-apple-darwin os: osx - env: TARGET=i686-unknown-linux-gnu @@ -35,6 +29,12 @@ matrix: os: linux - env: TARGET=powerpc64le-unknown-linux-gnu os: linux + - env: TARGET=thumbv6m-none-eabi + os: linux + - env: TARGET=thumbv7em-none-eabi + os: linux + - env: TARGET=thumbv7m-none-eabi + os: linux - env: TARGET=x86_64-apple-darwin os: osx - env: TARGET=x86_64-unknown-linux-gnu From a2135c1a5caafe63df61e28f06e8e9288a9d0ff5 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:45:43 -0500 Subject: [PATCH 07/11] no need to explicitly call qemu-$ARCH --- ci/env.sh | 4 ---- ci/script.sh | 11 +---------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/ci/env.sh b/ci/env.sh index a8c7003..89660a1 100644 --- a/ci/env.sh +++ b/ci/env.sh @@ -30,12 +30,10 @@ case $TARGET in ;; mips-unknown-linux-gnu) export PREFIX=mips-linux-gnu- - # export QEMU=qemu-mips export QEMU_LD_PREFIX=/usr/mips-linux-gnu ;; mipsel-unknown-linux-gnu) export PREFIX=mipsel-linux-gnu- - # export QEMU=qemu-mipsel export QEMU_LD_PREFIX=/usr/mipsel-linux-gnu ;; powerpc-unknown-linux-gnu) @@ -44,12 +42,10 @@ case $TARGET in ;; powerpc64-unknown-linux-gnu) export PREFIX=powerpc64-linux-gnu- - # export QEMU=qemu-ppc64 export QEMU_LD_PREFIX=/usr/powerpc64-linux-gnu ;; powerpc64le-unknown-linux-gnu) export PREFIX=powerpc64le-linux-gnu- - # export QEMU=qemu-ppc64le export QEMU_LD_PREFIX=/usr/powerpc64le-linux-gnu # Issue #2. QEMU doesn't work export RUN_TESTS=n diff --git a/ci/script.sh b/ci/script.sh index 847530a..3b00ff6 100644 --- a/ci/script.sh +++ b/ci/script.sh @@ -20,16 +20,7 @@ run_tests() { export RUST_TEST_THREADS=1 fi - if [[ $QEMU ]]; then - cargo test --target $TARGET --no-run - if [[ ${RUN_TESTS:-y} == "y" ]]; then - $QEMU target/**/debug/rustc_builtins-* - fi - cargo test --target $TARGET --release --no-run - if [[ ${RUN_TESTS:-y} == "y" ]]; then - $QEMU target/**/release/rustc_builtins-* - fi - elif [[ ${RUN_TESTS:-y} == "y" ]]; then + if [[ ${RUN_TESTS:-y} == "y" ]]; then cargo test --target $TARGET cargo test --target $TARGET --release fi From 7111a4a0ddb34b9b5ad196b165c5ecf1c4880207 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:46:12 -0500 Subject: [PATCH 08/11] arm targets no longer have flaky tests --- .travis.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 53b5706..2b0154a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,16 +39,6 @@ matrix: os: osx - env: TARGET=x86_64-unknown-linux-gnu os: linux - allow_failures: - # Issue #2. Flaky test - - env: TARGET=arm-unknown-linux-gnueabi - os: linux - # Issue #2. Flaky test - - env: TARGET=arm-unknown-linux-gnueabihf - os: linux - # Issue #2. Flaky test - - env: TARGET=armv7-unknown-linux-gnueabihf - os: linux install: - bash ci/install.sh From ac8370b4ac55a23121896a77514940ce391e7cd5 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 17:53:26 -0500 Subject: [PATCH 09/11] need to set PATH for macos --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2b0154a..e74b680 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,6 +40,9 @@ matrix: - env: TARGET=x86_64-unknown-linux-gnu os: linux +before_install: + - export PATH="$PATH:$HOME/.cargo/bin" + install: - bash ci/install.sh From 9c651118feb8846595aac41b0df7d429b9ae9f1f Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 18:00:49 -0500 Subject: [PATCH 10/11] enable tests for ppc64le --- ci/env.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/ci/env.sh b/ci/env.sh index 89660a1..c3591cb 100644 --- a/ci/env.sh +++ b/ci/env.sh @@ -47,8 +47,6 @@ case $TARGET in powerpc64le-unknown-linux-gnu) export PREFIX=powerpc64le-linux-gnu- export QEMU_LD_PREFIX=/usr/powerpc64le-linux-gnu - # Issue #2. QEMU doesn't work - export RUN_TESTS=n ;; thumbv*-none-eabi) export CARGO=xargo From b5b28c02bafe14e86fbff82049e0139d07c2f67b Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 13 Aug 2016 18:20:52 -0500 Subject: [PATCH 11/11] qemu-ppc64le still doesn't work --- ci/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/env.sh b/ci/env.sh index c3591cb..50f19b2 100644 --- a/ci/env.sh +++ b/ci/env.sh @@ -47,6 +47,7 @@ case $TARGET in powerpc64le-unknown-linux-gnu) export PREFIX=powerpc64le-linux-gnu- export QEMU_LD_PREFIX=/usr/powerpc64le-linux-gnu + export RUN_TESTS=n ;; thumbv*-none-eabi) export CARGO=xargo