diff --git a/.travis.yml b/.travis.yml
index a7230a037..ba0dec676 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,20 +1,13 @@
+# This is a travis-ci.org continuous integration configuration file.
 language: c
 
 addons:
     apt:
-        sourceline: 'ppa:team-gcc-arm-embedded/ppa'
         packages:
             - gcc-avr
             - avr-libc
             - wget
 
-env:
-    - TARGET=atmega2560-16mhz
-    - TARGET=atmega328-16mhz
-      # - TARGET=beaglebone needs pru-gcc (not out of the box available on Ubuntu)
-    - TARGET=hostsimulator
-    - TARGET=linuxprocess
-    - TARGET=sam3x8e GCC_SRC=https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 GCC_DIR=gcc-arm-none-eabi-7-2017-q4-major
-
-script: ./test/travis-build.sh
+install: ./scripts/travis-install.sh
 
+script: ./scripts/travis-build.sh
diff --git a/scripts/travis-build.sh b/scripts/travis-build.sh
new file mode 100755
index 000000000..d03d66bd3
--- /dev/null
+++ b/scripts/travis-build.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Test script for travis-ci.org continuous integration.
+
+# Stop script early on any error; check variables; be verbose
+set -eux
+
+# Paths to tools installed by travis-install.sh
+export PATH=${PWD}/gcc-arm-none-eabi-7-2017-q4-major/bin:${PATH}
+PYTHON=${PWD}/python-env/bin/python
+
+
+######################################################################
+# Run compile tests for several different MCU types
+######################################################################
+
+DICTDIR=${PWD}/dict
+mkdir -p ${DICTDIR}
+
+for TARGET in test/configs/*.config ; do
+    echo "=============== Test compile $TARGET"
+    make clean
+    make distclean
+    unset CC
+    cp ${TARGET} .config
+    make olddefconfig
+    make V=1
+    cp out/klipper.dict ${DICTDIR}/$(basename ${TARGET} .config).dict
+done
+
+
+######################################################################
+# Verify klippy host software
+######################################################################
+
+HOSTDIR=${PWD}/hosttest
+mkdir -p ${HOSTDIR}
+
+echo "=============== Test invoke klippy"
+$PYTHON klippy/klippy.py config/example.cfg -i /dev/null -o ${HOSTDIR}/output -v -d ${DICTDIR}/atmega2560-16mhz.dict
+$PYTHON klippy/parsedump.py ${DICTDIR}/atmega2560-16mhz.dict ${HOSTDIR}/output > ${HOSTDIR}/output-parsed
diff --git a/scripts/travis-install.sh b/scripts/travis-install.sh
new file mode 100755
index 000000000..759a8c019
--- /dev/null
+++ b/scripts/travis-install.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# Build setup script for travis-ci.org continuous integration testing.
+# See travis-build.sh for the actual test steps.
+
+# Stop script early on any error; check variables; be verbose
+set -eux
+
+
+######################################################################
+# Install embedded arm gcc
+######################################################################
+
+echo "=============== Install embedded arm gcc"
+GCC_ARM_URL="https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2"
+GCC_ARM_SHA="96a029e2ae130a1210eaa69e309ea40463028eab18ba19c1086e4c2dafe69a6a  gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2"
+GCC_ARM_FILE="$(basename ${GCC_ARM_URL})"
+
+wget "$GCC_ARM_URL"
+FOUND_SHA=`sha256sum "$GCC_ARM_FILE"`
+if [ "$FOUND_SHA" != "$GCC_ARM_SHA" ]; then
+    echo "ERROR: Mismatch on gcc arm sha256"
+    exit -1
+fi
+tar xf "$GCC_ARM_FILE"
+
+
+######################################################################
+# Create python virtualenv environment
+######################################################################
+
+echo "=============== Install python virtualenv"
+virtualenv python-env
+./python-env/bin/pip install cffi==1.6.0 pyserial==3.2.1 greenlet==0.4.10
diff --git a/test/configs/beaglebone.config b/test/configs/beaglebone.config
deleted file mode 100644
index 9e56034b3..000000000
--- a/test/configs/beaglebone.config
+++ /dev/null
@@ -1,2 +0,0 @@
-# Base config file for beaglebone
-CONFIG_MACH_PRU=y
diff --git a/test/travis-build.sh b/test/travis-build.sh
deleted file mode 100755
index 58be77680..000000000
--- a/test/travis-build.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-set -eux
-if [ -z ${TARGET+x} ]; then
-    if [ -z ${1+x} ]; then
-        echo "Need a TARGET as environment variable or first parameter!"
-        exit 1
-    else
-        TARGET="$1"
-    fi
-fi
-
-echo "Target is '$TARGET'"
-make clean
-make distclean
-unset CC
-cp test/configs/${TARGET}.config .config
-make olddefconfig
-
-if [ ! -z ${GCC_SRC+x} ]; then
-    if [ -z ${GCC_DIR+x} ]; then
-        echo "Need a GCC_DIR together with GCC_SRC!"
-        exit 1
-    fi
-    if [ -e "$GCC_DIR" ]; then
-        echo "Reusing GCC in '$GCC_DIR'"
-    else
-        echo "Getting GCC from '$GCC_SRC'"
-        wget "$GCC_SRC"
-        echo "Unpacking GCC to '$GCC_DIR'"
-        tar xf $(basename "$GCC_SRC")
-    fi
-    export PATH=$GCC_DIR/bin:$PATH
-fi
-
-make V=1