diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,96 @@
-language: haskell
-before_install:
-  # Uncomment whenever hackage is down.
-  # - mkdir -p ~/.cabal && cp travis/config ~/.cabal/config && cabal update
-  - cabal update
+# This file has been generated -- see https://github.com/hvr/multi-ghc-travis
+language: c
+sudo: false
 
-  # Try installing some of the build-deps with apt-get for speed.
-  - travis/cabal-apt-install $mode
+cache:
+  directories:
+    - $HOME/.cabsnap
+    - $HOME/.cabal/packages
 
+before_cache:
+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
+
+matrix:
+  include:
+    - env: CABALVER=1.18 GHCVER=7.4.2
+      compiler: ": #GHC 7.4.2"
+      addons: {apt: {packages: [cabal-install-1.18,ghc-7.4.2,hlint], sources: [hvr-ghc]}}
+    - env: CABALVER=1.18 GHCVER=7.6.3
+      compiler: ": #GHC 7.6.3"
+      addons: {apt: {packages: [cabal-install-1.18,ghc-7.6.3,hlint], sources: [hvr-ghc]}}
+    - env: CABALVER=1.18 GHCVER=7.8.4
+      compiler: ": #GHC 7.8.4"
+      addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,hlint], sources: [hvr-ghc]}}
+    - env: CABALVER=1.24 GHCVER=7.10.3
+      compiler: ": #GHC 7.10.3"
+      addons: {apt: {packages: [cabal-install-1.24,ghc-7.10.3,hlint], sources: [hvr-ghc]}}
+    - env: CABALVER=1.24 GHCVER=8.0.2
+      compiler: ": #GHC 8.0.2"
+      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2,hlint], sources: [hvr-ghc]}}
+    - env: CABALVER=1.24 GHCVER=head
+      compiler: ": #GHC head"
+      addons: {apt: {packages: [cabal-install-1.24,ghc-head,hlint], sources: [hvr-ghc]}}
+
+  allow_failures:
+    - env: CABALVER=1.24 GHCVER=head
+
+before_install:
+ - unset CC
+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+
 install:
-  - cabal configure -flib-Werror $mode
-  - cabal build
+ - cabal --version
+ - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
+ - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
+   then
+     zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
+          $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
+   fi
+ - travis_retry cabal update -v
+ - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config
+ - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt
+ - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
 
+# check whether current requested install-plan matches cached package-db snapshot
+ - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
+   then
+     echo "cabal build-cache HIT";
+     rm -rfv .ghc;
+     cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
+     cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;
+   else
+     echo "cabal build-cache MISS";
+     rm -rf $HOME/.cabsnap;
+     mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
+     cabal install -j --only-dependencies --enable-tests --enable-benchmarks;
+   fi
+
+# snapshot package-db on cache miss
+ - if [ ! -d $HOME/.cabsnap ];
+   then
+      echo "snapshotting package-db to build-cache";
+      mkdir $HOME/.cabsnap;
+      cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
+      cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
+   fi
+
+# Here starts the actual work to be performed for the package under test;
+# any command which exits with a non-zero exit code causes the build to fail.
 script:
-  - $script && hlint src --cpp-define HLINT
+ - cabal configure -v2 --enable-tests --enable-benchmarks  # -v2 provides useful information for debugging
+ - cabal build # this builds all libraries and executables (including tests/benchmarks)
+ - cabal test --show-details=always
+ - cabal sdist   # tests that a source-distribution can be generated
+ - hlint src --cpp-define HLINT
+ - export SRC_TGZ=$(cabal info . | awk '{print $2 ".tar.gz";exit}') ;
+   cd dist/;
+   if [ -f "$SRC_TGZ" ]; then
+      cabal install "$SRC_TGZ";
+   else
+      echo "expected '$SRC_TGZ' not found";
+      exit 1;
+   fi
 
 notifications:
   irc:
@@ -20,7 +98,6 @@
       - "irc.freenode.org#haskell-lens"
     skip_join: true
     template:
-      - "\x0313log-domain\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
+      - "\x0313log-domain\x0f/\x0306%{branch}\x0f \x0314%{commit}\x0f %{message} \x0302\x1f%{build_url}\x0f"
 
-env:
-  - mode="--enable-tests" script="cabal test --show-details=always"
+# EOF
diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,11 @@
+0.11
+----
+* Replace use of `Hashable1` from `hashable-extras` in favor of `Hashable` from
+  `hashable-1.2.5.0`. As a result, the `hashable-extras` dependency has been removed.
+* On Windows, we now use the FFI to link against the C math library if building with
+  GHC 8.0 or later, which features a much improved runtime linker story.
+* Remove `generic-deriving` dependency
+
 0.10.3.1
 --------
 * Support `safecopy` 0.9
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,16 +1,16 @@
-log
-===
+log-domain
+==========
 
 [![Hackage](https://img.shields.io/hackage/v/log-domain.svg)](https://hackage.haskell.org/package/log-domain) [![Build Status](https://secure.travis-ci.org/ekmett/log-domain.png?branch=master)](http://travis-ci.org/ekmett/log-domain)
 
-> What rolls down stairs alone or in pairs  
-> Rolls over your neighbor's dog?  
-> What's great for a snack and fits on your back?  
-> It's Log, Log, Log!  
+> What rolls down stairs alone or in pairs
+> Rolls over your neighbor's dog?
+> What's great for a snack and fits on your back?
+> It's Log, Log, Log!
 
-> It's Log, Log, it's big, it's heavy, it's wood.  
-> It's Log, Log, it's better than bad, it's good!  
-> Everyone wants a log! You're gonna love it, Log!  
+> It's Log, Log, it's big, it's heavy, it's wood.
+> It's Log, Log, it's better than bad, it's good!
+> Everyone wants a log! You're gonna love it, Log!
 > Come on and get your log! Everyone needs a Log!"
 
 > -- Ren & Stimpy, The Log Song
diff --git a/Setup.lhs b/Setup.lhs
--- a/Setup.lhs
+++ b/Setup.lhs
@@ -41,6 +41,10 @@
     withTestLBI pkg lbi $ \suite suitecfg -> do
       rewriteFile (dir </> "Build_" ++ testName suite ++ ".hs") $ unlines
         [ "module Build_" ++ testName suite ++ " where"
+        , ""
+        , "autogen_dir :: String"
+        , "autogen_dir = " ++ show dir
+        , ""
         , "deps :: [String]"
         , "deps = " ++ (show $ formatdeps (testDeps libcfg suitecfg))
         ]
diff --git a/log-domain.cabal b/log-domain.cabal
--- a/log-domain.cabal
+++ b/log-domain.cabal
@@ -1,6 +1,6 @@
 name:          log-domain
 category:      Numeric
-version:       0.10.3.1
+version:       0.11
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -11,7 +11,7 @@
 bug-reports:   http://github.com/ekmett/log-domain/issues
 copyright:     Copyright (C) 2013-2015 Edward A. Kmett
 build-type:    Custom
-tested-with:   GHC == 7.4.1, GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2
+tested-with:   GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2
 synopsis:      Log-domain arithmetic
 description:   This package provides log-domain floats, doubles and complex numbers.
 
@@ -42,27 +42,26 @@
 
 library
   build-depends:
-    base                      >= 4.3      && < 5,
-    binary                    >= 0.5      && < 0.8,
+    base                      >= 4.5      && < 5,
+    binary                    >= 0.5      && < 0.9,
     bytes                     >= 0.7      && < 1,
     cereal                    >= 0.3.5    && < 0.6,
-    comonad                   >= 4        && < 5,
+    comonad                   >= 4        && < 6,
     deepseq                   >= 1.3      && < 1.5,
     distributive              >= 0.3      && < 1,
-    hashable                  >= 1.1.2.3  && < 1.3,
-    hashable-extras           >= 0.2      && < 1,
+    hashable                  >= 1.2.5    && < 1.3,
     semigroupoids             >= 4        && < 6,
     semigroups                >= 0.8.4    && < 1,
     safecopy                  >= 0.8.1    && < 0.10,
-    vector                    >= 0.9      && < 0.12
+    vector                    >= 0.9      && < 0.13
 
   exposed-modules:
     Numeric.Log Numeric.Log.Signed
 
   if impl(ghc < 7.6)
-    build-depends: generic-deriving >= 1.4 && < 1.9
+    build-depends: ghc-prim
 
-  if flag(ffi) && !os(windows)
+  if flag(ffi) && !(os(windows) && !impl(ghc >= 8.0))
     cpp-options: -D__USE_FFI__
 
   ghc-options: -Wall -fwarn-tabs -O2
diff --git a/src/Numeric/Log.hs b/src/Numeric/Log.hs
--- a/src/Numeric/Log.hs
+++ b/src/Numeric/Log.hs
@@ -38,7 +38,7 @@
 import Data.Functor.Bind
 import Data.Functor.Extend
 import Data.Hashable
-import Data.Hashable.Extras
+import Data.Hashable.Lifted
 import Data.Int
 import Data.List as List hiding (sum)
 #if __GLASGOW_HASKELL__ < 710
@@ -56,11 +56,7 @@
 import Data.Vector.Generic.Mutable as M
 import Foreign.Ptr
 import Foreign.Storable
-#if __GLASGOW_HASKELL__ < 706
-import Generics.Deriving
-#else
 import GHC.Generics
-#endif
 import Text.Read as T
 import Text.Show as T
 
@@ -124,7 +120,9 @@
   hashWithSalt i (Exp a) = hashWithSalt i a
   {-# INLINE hashWithSalt #-}
 
-instance Hashable1 Log
+instance Hashable1 Log where
+  liftHashWithSalt hws i (Exp a) = hws i a
+  {-# INLINE liftHashWithSalt #-}
 
 instance Storable a => Storable (Log a) where
   sizeOf = sizeOf . ln
diff --git a/src/Numeric/Log/Signed.hs b/src/Numeric/Log/Signed.hs
--- a/src/Numeric/Log/Signed.hs
+++ b/src/Numeric/Log/Signed.hs
@@ -26,11 +26,7 @@
 import Data.Monoid (Monoid(..))
 #endif
 import Data.Data (Data(..))
-#if __GLASGOW_HASKELL__ < 706
-import Generics.Deriving (Generic(..))
-#else
 import GHC.Generics (Generic(..))
-#endif
 import Data.Typeable (Typeable)
 import Text.Read as T
 import Text.Show as T
diff --git a/tests/doctests.hsc b/tests/doctests.hsc
--- a/tests/doctests.hsc
+++ b/tests/doctests.hsc
@@ -15,7 +15,7 @@
 -----------------------------------------------------------------------------
 module Main where
 
-import Build_doctests (deps)
+import Build_doctests (autogen_dir, deps)
 import Control.Applicative
 import Control.Monad
 import Data.List
@@ -54,11 +54,10 @@
 main :: IO ()
 main = withUnicode $ getSources >>= \sources -> doctest $
     "-isrc"
-  : "-idist/build/autogen"
+  : ("-i" ++ autogen_dir)
   : "-optP-include"
-  : "-optPdist/build/autogen/cabal_macros.h"
+  : ("-optP" ++ autogen_dir ++ "/cabal_macros.h")
   : "-hide-all-packages"
-  : "-Iincludes"
   : map ("-package="++) deps ++ sources
 
 getSources :: IO [FilePath]
