From ae65f755729f633296e4d9f1bd570eb06ae9ee67 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 28 Jul 2017 02:01:44 +0200 Subject: [PATCH 1/4] Travis: Simplify configuration using Build Stages and APT addon Using APT addon has nice side-effect - you don't need sudo anymore, so it can run on Travis containers-based infrastructure that is much faster than their VMs infrastructure (used when sudo is needed). You've been still running on Ubuntu Presty builders, but new default is Trusty. Thus I've explicitly set `dist: presty` to let it stay on Presty, to not change build environment by this commit. --- .travis.yml | 88 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 27 deletions(-) diff --git a/.travis.yml b/.travis.yml index 63b469716e..878a547fa0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,38 +1,72 @@ +# XXX: Precise is already deprecated, new default is Trusty. +# https://blog.travis-ci.com/2017-07-11-trusty-as-default-linux-is-coming +dist: precise +sudo: false language: c +compiler: gcc -notifications: - webhooks: - urls: - - https://webhooks.gitter.im/e/8a6e4470a0cebd090344 - on_success: change # options: [always|never|change] default: always - on_failure: always # options: [always|never|change] default: always - on_start: never # options: [always|never|change] default: always +jobs: + include: + - &test-ubuntu + stage: test + addons: + apt: + packages: + - gfortran + script: + - set -e + - COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32" + - make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE + - make -C test $COMMON_FLAGS $BTYPE + - make -C ctest $COMMON_FLAGS $BTYPE + - make -C utest $COMMON_FLAGS $BTYPE + env: + - TARGET_BOX=LINUX64 + - BTYPE="BINARY=64" -compiler: - - gcc + - <<: *test-ubuntu + env: + - TARGET_BOX=LINUX64 + - BTYPE="BINARY=64 USE_OPENMP=1" -env: - - TARGET_BOX=LINUX64 BTYPE="BINARY=64" - - TARGET_BOX=LINUX64 BTYPE="BINARY=64 USE_OPENMP=1" - - TARGET_BOX=LINUX64 BTYPE="BINARY=64 INTERFACE64=1" - - TARGET_BOX=LINUX32 BTYPE="BINARY=32" - - TARGET_BOX=WIN64 BTYPE="BINARY=64 HOSTCC=gcc CC=x86_64-w64-mingw32-gcc FC=x86_64-w64-mingw32-gfortran" + - <<: *test-ubuntu + env: + - TARGET_BOX=LINUX64 + - BTYPE="BINARY=64 INTERFACE64=1" -before_install: - - sudo apt-get update -qq - - sudo apt-get install -qq gfortran - - if [[ "$TARGET_BOX" == "WIN64" ]]; then sudo apt-get install -qq binutils-mingw-w64-x86-64 gcc-mingw-w64-x86-64 gfortran-mingw-w64-x86-64; fi - - if [[ "$TARGET_BOX" == "LINUX32" ]]; then sudo apt-get install -qq gcc-multilib gfortran-multilib; fi + - <<: *test-ubuntu + addons: + apt: + packages: + - gcc-multilib + - gfortran-multilib + env: + - TARGET_BOX=LINUX32 + - BTYPE="BINARY=32" -script: - - set -e - - make QUIET_MAKE=1 DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32 $BTYPE - - if [ "$TARGET_BOX" == "LINUX32" ] || [ "$TARGET_BOX" == "LINUX64" ]; then make -C test DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32 $BTYPE; fi - - if [ "$TARGET_BOX" == "LINUX32" ] || [ "$TARGET_BOX" == "LINUX64" ]; then make -C ctest DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32 $BTYPE; fi - - if [ "$TARGET_BOX" == "LINUX32" ] || [ "$TARGET_BOX" == "LINUX64" ]; then make -C utest DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32 $BTYPE; fi + - stage: test + addons: + apt: + packages: + - binutils-mingw-w64-x86-64 + - gcc-mingw-w64-x86-64 + - gfortran-mingw-w64-x86-64 + script: + - make QUIET_MAKE=1 DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32 $BTYPE + env: + - TARGET_BOX=WIN64 + - BTYPE="BINARY=64 HOSTCC=gcc CC=x86_64-w64-mingw32-gcc FC=x86_64-w64-mingw32-gfortran" # whitelist branches: only: - master - - develop \ No newline at end of file + - develop + +notifications: + webhooks: + urls: + - https://webhooks.gitter.im/e/8a6e4470a0cebd090344 + on_success: change # options: [always|never|change] default: always + on_failure: always # options: [always|never|change] default: always + on_start: never # options: [always|never|change] default: always From e0bd5b5c0ebbe908ed88de1c21a33919d4a7d6fe Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 28 Jul 2017 02:31:27 +0200 Subject: [PATCH 2/4] Travis: Build and test also on Alpine Linux (musl libc) Alpine jobs needs sudo (for chroot), so they run on VMs infrastructure. That's why they are much slower than other jobs. --- .travis.yml | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 878a547fa0..cb0a86597d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,9 +13,10 @@ jobs: apt: packages: - gfortran + before_script: &common-before + - COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32" script: - set -e - - COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32" - make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE - make -C test $COMMON_FLAGS $BTYPE - make -C ctest $COMMON_FLAGS $BTYPE @@ -51,12 +52,58 @@ jobs: - binutils-mingw-w64-x86-64 - gcc-mingw-w64-x86-64 - gfortran-mingw-w64-x86-64 + before_script: *common-before script: - - make QUIET_MAKE=1 DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32 $BTYPE + - make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE env: - TARGET_BOX=WIN64 - BTYPE="BINARY=64 HOSTCC=gcc CC=x86_64-w64-mingw32-gcc FC=x86_64-w64-mingw32-gfortran" + # Build & test on Alpine Linux inside chroot, i.e. on system with musl libc. + # These jobs needs sudo, so Travis runs them on VM-based infrastructure + # which is slower than container-based infrastructure used for jobs + # that don't require sudo. + - &test-alpine + stage: test + dist: trusty + sudo: true + language: minimal + before_install: + - "wget 'https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.6.0/alpine-chroot-install' \ + && echo 'a827a4ba3d0817e7c88bae17fe34e50204983d1e alpine-chroot-install' | sha1sum -c || exit 1" + - alpine() { /alpine/enter-chroot -u "$USER" "$@"; } + install: + - sudo sh alpine-chroot-install -p 'build-base gfortran perl linux-headers' + before_script: *common-before + script: + - set -e + - alpine make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE + - alpine make -C test $COMMON_FLAGS $BTYPE + - alpine make -C ctest $COMMON_FLAGS $BTYPE + - alpine make -C utest $COMMON_FLAGS $BTYPE + env: + - TARGET_BOX=LINUX64_MUSL + - BTYPE="BINARY=64" + + - <<: *test-alpine + env: + - TARGET_BOX=LINUX64_MUSL + - BTYPE="BINARY=64 USE_OPENMP=1" + + - <<: *test-alpine + env: + - TARGET_BOX=LINUX64_MUSL + - BTYPE="BINARY=64 INTERFACE64=1" + + # Build with the same flags as Alpine do in OpenBLAS package. + - <<: *test-alpine + env: + - TARGET_BOX=LINUX64_MUSL + - BTYPE="BINARY=64 NO_AFFINITY=1 USE_OPENMP=0 NO_LAPACK=0 TARGET=core2" + + allow_failures: + - <<: *test-alpine-openmp + # whitelist branches: only: From 08c7d1ddf8df51a8f9ec7199dfada1a419d2a101 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 28 Jul 2017 14:32:17 +0200 Subject: [PATCH 3/4] Travis: Disable some gcc warnings to avoid exceeding Travis limit See: https://github.com/xianyi/OpenBLAS/pull/1255#issuecomment-318628666 --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index cb0a86597d..56b3273b06 100644 --- a/.travis.yml +++ b/.travis.yml @@ -77,7 +77,9 @@ jobs: before_script: *common-before script: - set -e + # XXX: Disable some warnings for now to avoid exceeding Travis limit for log size. - alpine make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE + CFLAGS="-Wno-misleading-indentation -Wno-sign-conversion -Wno-incompatible-pointer-types" - alpine make -C test $COMMON_FLAGS $BTYPE - alpine make -C ctest $COMMON_FLAGS $BTYPE - alpine make -C utest $COMMON_FLAGS $BTYPE From 486a485bb781b6a2c017c9924197911c31f7b1f4 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 28 Jul 2017 18:08:44 +0200 Subject: [PATCH 4/4] Travis: Allow job LINUX64_MUSL USE_OPENMP=1 to fail See: https://github.com/xianyi/OpenBLAS/pull/1255#issuecomment-318692183 --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 56b3273b06..b1a13acd9c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -87,7 +87,10 @@ jobs: - TARGET_BOX=LINUX64_MUSL - BTYPE="BINARY=64" - - <<: *test-alpine + # XXX: This job segfaults in TESTS OF THE COMPLEX LEVEL 3 BLAS, + # so it's "allowed to fail" for now (see allow_failures). + - &test-alpine-openmp + <<: *test-alpine env: - TARGET_BOX=LINUX64_MUSL - BTYPE="BINARY=64 USE_OPENMP=1"