From b597c4c1540d94e5cca150a37e69b2724747cceb Mon Sep 17 00:00:00 2001
From: Yaman Umuroglu <yamanu@xilinx.com>
Date: Wed, 19 Aug 2020 21:20:53 +0100
Subject: [PATCH] [PYNQ] make deployment work for VitisBuild too

---
 .../fpgadataflow/make_deployment.py           | 29 +++++++++++--------
 .../fpgadataflow/make_zynq_proj.py            |  1 +
 .../fpgadataflow/synth_pynq_proj.py           |  1 +
 3 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/finn/transformation/fpgadataflow/make_deployment.py b/src/finn/transformation/fpgadataflow/make_deployment.py
index a4c751b84..051e75cda 100644
--- a/src/finn/transformation/fpgadataflow/make_deployment.py
+++ b/src/finn/transformation/fpgadataflow/make_deployment.py
@@ -26,6 +26,7 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import warnings
 import os
 import subprocess
 from distutils.dir_util import copy_tree
@@ -64,30 +65,34 @@ class DeployToPYNQ(Transformation):
 
         # get and copy necessary files
         # .bit and .hwh file
-        vivado_pynq_proj = model.get_metadata_prop("vivado_pynq_proj")
-        for file in os.listdir(vivado_pynq_proj):
-            if file.endswith(".bit"):
-                bitfile = os.path.join(vivado_pynq_proj, file)
-                copy(bitfile, deployment_dir)
-            elif file.endswith(".hwh"):
-                hwhfile = os.path.join(vivado_pynq_proj, file)
-                copy(hwhfile, deployment_dir)
+        bitfile = model.get_metadata_prop("bitfile")
+        hwh_file = model.get_metadata_prop("hw_handoff")
+        deploy_files = [bitfile, hwh_file]
+
+        for dfile in deploy_files:
+            if dfile is not None:
+                copy(dfile, deployment_dir)
 
         # driver.py and python libraries
         pynq_driver_dir = model.get_metadata_prop("pynq_driver_dir")
         copy_tree(pynq_driver_dir, deployment_dir)
         model.set_metadata_prop("pynq_deploy_dir", deployment_dir)
         model.set_metadata_prop("exec_mode", "remote_pynq")
+        if self.password == "":
+            prefix = "" # assume we are using an ssh key
+            warnings.warn("Empty password, make sure you've set up an ssh key")
+        else:
+            prefix = "sshpass -p %s " % self.password
+
         # create target directory on PYNQ board
-        cmd = 'sshpass -p {} ssh {}@{} -p {} "mkdir -p {}"'.format(
-            self.password, self.username, self.ip, self.port, self.target_dir
+        cmd = prefix + 'ssh {}@{} -p {} "mkdir -p {}"'.format(
+            self.username, self.ip, self.port, self.target_dir
         )
         bash_command = ["/bin/bash", "-c", cmd]
         process_compile = subprocess.Popen(bash_command, stdout=subprocess.PIPE)
         process_compile.communicate()
         # copy directory to PYNQ board using scp and sshpass
-        cmd = "sshpass -p {} scp -P{} -r {} {}@{}:{}".format(
-            self.password,
+        cmd = prefix + "scp -P{} -r {} {}@{}:{}".format(
             self.port,
             deployment_dir,
             self.username,
diff --git a/src/finn/transformation/fpgadataflow/make_zynq_proj.py b/src/finn/transformation/fpgadataflow/make_zynq_proj.py
index 0aaf65f40..82dba36f2 100644
--- a/src/finn/transformation/fpgadataflow/make_zynq_proj.py
+++ b/src/finn/transformation/fpgadataflow/make_zynq_proj.py
@@ -260,6 +260,7 @@ class MakeZYNQProject(Transformation):
             raise Exception("Synthesis failed, no hardware handoff file found")
         deploy_hwh_name = vivado_pynq_proj_dir + "/resizer.hwh"
         copy(hwh_name, deploy_hwh_name)
+        model.set_metadata_prop("hw_handoff", deploy_hwh_name)
         # filename for the synth utilization report
         synth_report_filename = vivado_pynq_proj_dir + "/synth_report.xml"
         model.set_metadata_prop("vivado_synth_rpt", synth_report_filename)
diff --git a/src/finn/transformation/fpgadataflow/synth_pynq_proj.py b/src/finn/transformation/fpgadataflow/synth_pynq_proj.py
index 54c9c805c..7f9bbaf56 100644
--- a/src/finn/transformation/fpgadataflow/synth_pynq_proj.py
+++ b/src/finn/transformation/fpgadataflow/synth_pynq_proj.py
@@ -51,5 +51,6 @@ class SynthPYNQProject(Transformation):
         process_compile.communicate()
         # set bitfile attribute
         model.set_metadata_prop("bitfile", vivado_pynq_proj_dir + "/resizer.bit")
+        model.set_metadata_prop("hw_handoff", vivado_pynq_proj_dir + "/resizer.hwh")
         # TODO pull out synthesis statistics and put them in as attributes
         return (model, False)
-- 
GitLab