travis: Reworking travis setup.
authorTim 'mithro' Ansell <mithro@mithis.com>
Thu, 26 Oct 2017 03:01:54 +0000 (20:01 -0700)
committerTim 'mithro' Ansell <mithro@mithis.com>
Fri, 24 Nov 2017 04:45:45 +0000 (15:45 +1100)
 * 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
.travis/build-and-test.sh [new file with mode: 0755]
.travis/common.sh [new file with mode: 0644]
.travis/deploy-after-success.sh [new file with mode: 0755]
.travis/setup.sh [new file with mode: 0755]

index 1c08c21a8fb9e93b1a438b22dedbfbace30e2561..b04e73dcdb443dfa5d85aaab362f544f64b6434c 100644 (file)
 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 (executable)
index 0000000..096dde6
--- /dev/null
@@ -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 (file)
index 0000000..8eecc4c
--- /dev/null
@@ -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 (executable)
index 0000000..d64e952
--- /dev/null
@@ -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 (executable)
index 0000000..773140c
--- /dev/null
@@ -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
+)
+
+##########################################################################