diff --git a/.travis-deps.sh b/.travis-deps.sh
index b0833f74ac..567a2543d8 100755
--- a/.travis-deps.sh
+++ b/.travis-deps.sh
@@ -9,15 +9,24 @@ if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then
     export CXX=g++-6
     mkdir -p $HOME/.local
 
-    curl -L http://www.cmake.org/files/v3.2/cmake-3.2.0-Linux-i386.tar.gz \
-        | tar -xz -C $HOME/.local --strip-components=1
+    if [ ! -e $HOME/.local/bin/cmake ]; then
+        echo "CMake not found in the cache, get and extract it..."
+        curl -L http://www.cmake.org/files/v3.2/cmake-3.2.0-Linux-i386.tar.gz \
+            | tar -xz -C $HOME/.local --strip-components=1
+    else
+        echo "Using cached CMake"
+    fi
 
-    (
+    if [ ! -e $HOME/.local/lib/libSDL2.la ]; then
+        echo "SDL2 not found in cache, get and build it..."
         wget http://libsdl.org/release/SDL2-2.0.4.tar.gz -O - | tar xz
         cd SDL2-2.0.4
         ./configure --prefix=$HOME/.local
         make -j4 && make install
-    )
+    else
+        echo "Using cached SDL2"
+    fi
+
 elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
     brew update > /dev/null # silence the very verbose output
     brew unlink cmake || true
diff --git a/.travis.yml b/.travis.yml
index a693e70aa1..69f9ef2732 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -26,6 +26,10 @@ addons:
       - lib32stdc++6 # For CMake
       - lftp # To upload builds
 
+cache:
+  directories:
+    - $HOME/.local
+
 install: ./.travis-deps.sh
 script: ./.travis-build.sh
 after_success: ./.travis-upload.sh