From d2850b5b809759bafa7aead995d069acc023af15 Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Wed, 25 Oct 2017 20:01:54 -0700 Subject: travis: Reworking travis setup. * Move the code into scripts inside .travis directory. * Build on multiple compiler versions. Fixes #442 - Make travis build pass Fixes #441 - Fix git version information on travis build Fixes #440 - Make travis cache the iverilog build --- .travis.yml | 136 ++++++++++++++++++++++++++++++---------- .travis/build-and-test.sh | 49 +++++++++++++++ .travis/common.sh | 15 +++++ .travis/deploy-after-success.sh | 6 ++ .travis/setup.sh | 89 ++++++++++++++++++++++++++ 5 files changed, 262 insertions(+), 33 deletions(-) create mode 100755 .travis/build-and-test.sh create mode 100644 .travis/common.sh create mode 100755 .travis/deploy-after-success.sh create mode 100755 .travis/setup.sh diff --git a/.travis.yml b/.travis.yml index 1c08c21a8..b04e73dcd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,36 +1,106 @@ sudo: false -script: make && make test language: cpp -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - gperf - - build-essential - - clang - - bison - - flex - - libreadline-dev - - gawk - - tcl-dev - - libffi-dev - - git - - mercurial - - graphviz - - xdot - - pkg-config - - python - - g++-4.8 + +cache: + ccache: true + directories: + - ~/.local-bin + + +env: + global: + - MAKEFLAGS="-j 2" + +matrix: + include: + + # Latest gcc supported on Travis Linux + - os: linux + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-7 + - gperf + - build-essential + - bison + - flex + - libreadline-dev + - gawk + - tcl-dev + - libffi-dev + - git + - mercurial + - graphviz + - xdot + - pkg-config + - python + env: + - MATRIX_EVAL="CONFIG=gcc && CC=gcc-7 && CXX=g++-7" + + # Clang which ships on Trusty Linux + - os: linux + addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.8 + packages: + - clang-3.8 + - gperf + - build-essential + - bison + - flex + - libreadline-dev + - gawk + - tcl-dev + - libffi-dev + - git + - mercurial + - graphviz + - xdot + - pkg-config + - python + env: + - MATRIX_EVAL="CONFIG=clang && CC=clang-3.8 && CXX=clang++-3.8" + + # Latest clang supported by Travis Linux + - os: linux + addons: + apt: + sources: + - llvm-toolchain-trusty-5.0 + packages: + - clang-5.0 + - gperf + - build-essential + - bison + - flex + - libreadline-dev + - gawk + - tcl-dev + - libffi-dev + - git + - mercurial + - graphviz + - xdot + - pkg-config + - python + env: + - MATRIX_EVAL="CONFIG=clang && CC=clang-5.0 && CXX=clang++-5.0" + + # Latest clang on Mac OS X + - os: osx + osx_image: xcode8 + env: + - MATRIX_EVAL="CONFIG=gcc && CC=gcc-7 && CXX=g++-7" + before_install: - - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8" CC="gcc-4.8"; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew tap Homebrew/bundle && brew bundle; fi - - git clone git://github.com/steveicarus/iverilog.git - - (cd iverilog && autoconf && ./configure --prefix=$HOME/iverilog && make && make install) - - export PATH=$PATH:$HOME/iverilog/bin -compiler: -# - clang - - gcc -os: - - linux -# - osx + - ./.travis/setup.sh + +script: + - ./.travis/build-and-test.sh + +after_success: + - ./.travis/deploy-after-success.sh diff --git a/.travis/build-and-test.sh b/.travis/build-and-test.sh new file mode 100755 index 000000000..096dde64f --- /dev/null +++ b/.travis/build-and-test.sh @@ -0,0 +1,49 @@ +#! /bin/bash + +set -e + +source .travis/common.sh + +########################################################################## + +echo +echo 'Configuring...' && echo -en 'travis_fold:start:script.configure\\r' +echo + +if [ "$CONFIG" = "gcc" ]; then + echo "Configuring for gcc." + make config-gcc +elif [ "$CONFIG" = "clang" ]; then + echo "Configuring for clang." + make config-clang +fi + +echo +echo -en 'travis_fold:end:script.configure\\r' +echo + +########################################################################## + +echo +echo 'Building...' && echo -en 'travis_fold:start:script.build\\r' +echo + +make + +echo +echo -en 'travis_fold:end:script.build\\r' +echo + +########################################################################## + +echo +echo 'Testing...' && echo -en 'travis_fold:start:script.test\\r' +echo + +make test + +echo +echo -en 'travis_fold:end:script.test\\r' +echo + +########################################################################## diff --git a/.travis/common.sh b/.travis/common.sh new file mode 100644 index 000000000..8eecc4c09 --- /dev/null +++ b/.travis/common.sh @@ -0,0 +1,15 @@ +#! /bin/bash + +# Setup the CC / CXX from the matrix config +eval "${MATRIX_EVAL}" + +# Look for location binaries first +export PATH="$HOME/.local-bin/bin:$PATH" + +# OS X specific common setup +if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + export PATH="/usr/local/opt/ccache/libexec:$PATH" +fi + +# Parallel builds! +MAKEFLAGS="-j 2" diff --git a/.travis/deploy-after-success.sh b/.travis/deploy-after-success.sh new file mode 100755 index 000000000..d64e95244 --- /dev/null +++ b/.travis/deploy-after-success.sh @@ -0,0 +1,6 @@ +#! /bin/bash + +set -x +set -e + +# FIXME: Upload the build results somewhere... diff --git a/.travis/setup.sh b/.travis/setup.sh new file mode 100755 index 000000000..773140cf5 --- /dev/null +++ b/.travis/setup.sh @@ -0,0 +1,89 @@ +#! /bin/bash + +set -e + +source .travis/common.sh + +########################################################################## + +# Fixing Travis's git clone +echo +echo 'Fixing git setup...' && echo -en 'travis_fold:start:before_install.git\\r' +echo +git fetch --unshallow && git fetch --tags + +# For pull requests, we get more info about the git source. +if [ z"$TRAVIS_PULL_REQUEST_SLUG" != z ]; then + echo "- Fetching from pull request source" + git remote add source https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git + git fetch source && git fetch --tags + + echo "- Fetching the actual pull request" + git fetch origin pull/$TRAVIS_PULL_REQUEST/head:pull-$TRAVIS_PULL_REQUEST-head + git fetch origin pull/$TRAVIS_PULL_REQUEST/merge:pull-$TRAVIS_PULL_REQUEST-merge + + git log -n 5 --graph pull-$TRAVIS_PULL_REQUEST-merge +fi + +# For building branches we need to fix the "detached head" state. +if [ z"$TRAVIS_BRANCH" != z ]; then + TRAVIS_COMMIT_ACTUAL=$(git log --pretty=format:'%H' -n 1) + echo "- Fixing detached head (current $TRAVIS_COMMIT_ACTUAL -> $TRAVIS_COMMIT)" + git fetch origin $TRAVIS_COMMIT + git branch -v + git branch -D $TRAVIS_BRANCH || true + git checkout $TRAVIS_COMMIT -b $TRAVIS_BRANCH + git branch -v +fi + +# Output status information. +git status +git describe --tags +git log -n 5 --graph +echo +echo -en 'travis_fold:end:before_install.git\\r' +echo + +########################################################################## + +# Mac OS X specific setup. +if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + ( + echo + echo 'Setting up brew...' && echo -en 'travis_fold:start:before_install.brew\\r' + echo + brew update + brew tap Homebrew/bundle + brew bundle + brew install ccache + brew install gcc + echo + echo -en 'travis_fold:end:before_install.brew\\r' + echo + ) +fi + +########################################################################## + +# Install iverilog +( + if [ ! -e ~/.local/bin/iverilog ]; then + echo + echo 'Building iverilog...' && echo -en 'travis_fold:start:before_install.iverilog\\r' + echo + mkdir -p ~/.local-src + mkdir -p ~/.local-bin + cd ~/.local-src + git clone git://github.com/steveicarus/iverilog.git + cd iverilog + autoconf + ./configure --prefix=$HOME/.local-bin + make + make install + echo + echo -en 'travis_fold:end:before_install.iverilog\\r' + echo + fi +) + +########################################################################## -- cgit v1.2.3