diff --git a/clash-shake.cabal b/clash-shake.cabal
--- a/clash-shake.cabal
+++ b/clash-shake.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           clash-shake
-version:        0.2.0
+version:        0.2.1
 synopsis:       Shake rules for building Clash programs
 description:    Shake rules for building Clash programs and synthesizing FPGA
                 configuration. Contains build rules for Xilinx ISE and Xilinx Vivado
diff --git a/src/Clash/Shake.hs b/src/Clash/Shake.hs
--- a/src/Clash/Shake.hs
+++ b/src/Clash/Shake.hs
@@ -12,6 +12,8 @@
     , binImage
 
     , toolchain
+
+    , withTargets
     ) where
 
 import Development.Shake
@@ -170,3 +172,8 @@
 
 (|>) :: String -> Action () -> (String, Action ())
 (|>) = (,)
+
+withTargets :: [String] -> Rules a -> Rules a
+withTargets targets rules
+  | null targets = rules
+  | otherwise = want targets >> withoutActions rules
diff --git a/src/Clash/Shake/SymbiFlow.hs b/src/Clash/Shake/SymbiFlow.hs
--- a/src/Clash/Shake/SymbiFlow.hs
+++ b/src/Clash/Shake/SymbiFlow.hs
@@ -28,7 +28,7 @@
         srcs <- manifestSrcs
         verilogs <- verilogSrcs
         xdcs <- xdcSrcs
-        need $ verilogs <> xdcs
+        need $ srcs <> verilogs <> xdcs
 
         symbiflow' "symbiflow_synth" $
           [ "-d", targetFamily
diff --git a/template/xilinx-vivado/project.tcl.mustache b/template/xilinx-vivado/project.tcl.mustache
--- a/template/xilinx-vivado/project.tcl.mustache
+++ b/template/xilinx-vivado/project.tcl.mustache
@@ -1,5 +1,7 @@
 set origin_dir "{{rootDir}}"
 set _xil_proj_name_ "{{project}}"
+set vivadoVersion [version -short]
+set vivadoVintage [lindex [split $vivadoVersion "."] 0]
 
 set orig_proj_dir "[file normalize "$origin_dir/"]"
 
@@ -72,10 +74,10 @@
 
 # Create 'synth_1' run (if not found)
 if {[string equal [get_runs -quiet synth_1] ""]} {
-    create_run -name synth_1 -part {{part}} -flow {Vivado Synthesis 2019} -strategy "Vivado Synthesis Defaults" -report_strategy {No Reports} -constrset constrs_1
+    create_run -name synth_1 -part {{part}} -flow {Vivado Synthesis $vivadoVintage} -strategy "Vivado Synthesis Defaults" -report_strategy {No Reports} -constrset constrs_1
 } else {
   set_property strategy "Vivado Synthesis Defaults" [get_runs synth_1]
-  set_property flow "Vivado Synthesis 2019" [get_runs synth_1]
+  set_property flow "Vivado Synthesis $vivadoVintage" [get_runs synth_1]
 }
 set obj [get_runs synth_1]
 set_property set_report_strategy_name 1 $obj
@@ -97,10 +99,10 @@
 
 # Create 'impl_1' run (if not found)
 if {[string equal [get_runs -quiet impl_1] ""]} {
-    create_run -name impl_1 -part {{part}} -flow {Vivado Implementation 2019} -strategy "Vivado Implementation Defaults" -report_strategy {No Reports} -constrset constrs_1 -parent_run synth_1
+    create_run -name impl_1 -part {{part}} -flow {Vivado Implementation $vivadoVintage} -strategy "Vivado Implementation Defaults" -report_strategy {No Reports} -constrset constrs_1 -parent_run synth_1
 } else {
   set_property strategy "Vivado Implementation Defaults" [get_runs impl_1]
-  set_property flow "Vivado Implementation 2019" [get_runs impl_1]
+  set_property flow "Vivado Implementation $vivadoVintage" [get_runs impl_1]
 }
 set obj [get_runs impl_1]
 set_property set_report_strategy_name 1 $obj
