diff --git a/kansas-lava-shake.cabal b/kansas-lava-shake.cabal
--- a/kansas-lava-shake.cabal
+++ b/kansas-lava-shake.cabal
@@ -1,5 +1,5 @@
 name:                kansas-lava-shake
-version:             0.1.0
+version:             0.1.1
 synopsis:            Shake rules for building Kansas Lava projects
 -- description:
 license:             BSD3
@@ -17,11 +17,13 @@
 Library
   hs-source-dirs:      src
   Exposed-modules:
+        Development.KansasLava.Shake
         Development.KansasLava.Shake.Xilinx
   Other-modules:
         Paths_kansas_lava_shake
   build-depends:
         base >=4.7 && < 5,
+        kansas-lava >=0.2.4 && < 0.2.5,
         filepath,
         directory,
         shake,
diff --git a/src/Development/KansasLava/Shake.hs b/src/Development/KansasLava/Shake.hs
new file mode 100644
--- /dev/null
+++ b/src/Development/KansasLava/Shake.hs
@@ -0,0 +1,19 @@
+module Development.KansasLava.Shake
+       ( lavaRules
+       ) where
+
+import Development.Shake
+import Development.Shake.FilePath
+import Language.KansasLava.VHDL (writeVhdlPrelude)
+
+lavaRules :: FilePath -> String -> String -> Rules ()
+lavaRules modName vhdl ucf = do
+    gensrc modName <.> "vhdl" *> \target -> do
+        alwaysRerun
+        writeFileChanged target vhdl
+    gensrc modName <.> "ucf" *> \target -> do
+        alwaysRerun
+        writeFileChanged target ucf
+    gensrc "lava-prelude.vhdl" *> liftIO . writeVhdlPrelude
+  where
+    gensrc f = "gensrc" </> f
diff --git a/src/Development/KansasLava/Shake/Xilinx.hs b/src/Development/KansasLava/Shake/Xilinx.hs
--- a/src/Development/KansasLava/Shake/Xilinx.hs
+++ b/src/Development/KansasLava/Shake/Xilinx.hs
@@ -108,6 +108,7 @@
                      , "-ir", "off"
                      , "-pr", "off"
                      , "-c", "100"
+                     , "-w"
                      , "-o", mapFileName (<> "_map") target -<.> "ncd"
                      , target -<.> "ngd"
                      , target -<.> "pcf"
